From b4d6e9bc95c198b363ac2f752c7ec57d11c52a0f Mon Sep 17 00:00:00 2001 From: jafaircl Date: Tue, 3 Feb 2026 06:53:46 -0500 Subject: [PATCH 1/7] Add type checking for ident expressions --- packages/cel/src/check.ts | 2 +- packages/cel/src/checker.test.ts | 10 -- packages/cel/src/checker.ts | 125 ++++++++++++++++++++++++- packages/cel/src/referenceinfo.test.ts | 108 +++++++++++++++++++++ packages/cel/src/referenceinfo.ts | 87 +++++++++++++++++ 5 files changed, 320 insertions(+), 12 deletions(-) create mode 100644 packages/cel/src/referenceinfo.test.ts create mode 100644 packages/cel/src/referenceinfo.ts diff --git a/packages/cel/src/check.ts b/packages/cel/src/check.ts index f03505f..f15a7b5 100644 --- a/packages/cel/src/check.ts +++ b/packages/cel/src/check.ts @@ -32,7 +32,7 @@ const cache = new WeakMap(); export function check(env: CelEnv, expr: Expr | ParsedExpr): CheckedExpr { let checker = cache.get(env); if (checker === undefined) { - checker = new Checker(); + checker = new Checker(env); cache.set(env, checker); } if (isMessage(expr, ExprSchema)) { diff --git a/packages/cel/src/checker.test.ts b/packages/cel/src/checker.test.ts index e44f4e2..52af699 100644 --- a/packages/cel/src/checker.test.ts +++ b/packages/cel/src/checker.test.ts @@ -20,19 +20,9 @@ import { } from "./testing.js"; const filter = createExpressionFilter([ - // Ident types - "is", - "ii", - "iu", - "iz", - "ib", - "id", - "ix", "[]", "[1]", '[1, "A"]', - - // Call resolution "fg_s()", "is.fi_s_s()", "1 + 2", diff --git a/packages/cel/src/checker.ts b/packages/cel/src/checker.ts index 15c0846..e253857 100644 --- a/packages/cel/src/checker.ts +++ b/packages/cel/src/checker.ts @@ -17,10 +17,13 @@ import type { Constant, Expr, SourceInfo, + Expr_Ident, + ConstantSchema, } from "@bufbuild/cel-spec/cel/expr/syntax_pb.js"; import { type CheckedExpr, CheckedExprSchema, + type ReferenceSchema, type Type, type TypeSchema, Type_PrimitiveType, @@ -28,7 +31,9 @@ import { import { create, type MessageInitShape } from "@bufbuild/protobuf"; import { CelScalar, + celType, type CelType, + type CelValue, DURATION, listType, type mapKeyType, @@ -37,17 +42,24 @@ import { TIMESTAMP, } from "./type.js"; import { NullValue } from "@bufbuild/protobuf/wkt"; +import type { CelEnv } from "./env.js"; +import { resolveCandidateNames } from "./namespace.js"; +import { celError } from "./error.js"; +import { identReference, type ReferenceInfo } from "./referenceinfo.js"; export class Checker { + private readonly referenceMap: Map = new Map(); private readonly typeMap: Map = new Map(); + constructor(private readonly env: CelEnv) {} + check(expr: Expr, sourceInfo: SourceInfo | undefined): CheckedExpr { // Clear each time we check since Checker instances are cached per environment. this.typeMap.clear(); return create(CheckedExprSchema, { expr: this.checkExpr(expr), sourceInfo, - // TODO: referenceMap + referenceMap: celReferenceMapToProtoReferenceMap(this.referenceMap), typeMap: celTypeMapToProtoTypeMap(this.typeMap), }); } @@ -56,6 +68,8 @@ export class Checker { switch (expr.exprKind.case) { case "constExpr": return this.checkConstExpr(expr.id, expr.exprKind.value); + case "identExpr": + return this.checkIdentExpr(expr.id, expr.exprKind.value); default: throw new Error(`Unsupported expression kind: ${expr.exprKind.case}`); } @@ -107,9 +121,49 @@ export class Checker { }; } + private checkIdentExpr( + id: bigint, + ident: Expr_Ident, + ): MessageInitShape { + const found = this.resolveVariable(ident.name); + if (found) { + this.setType(id, found); + this.setReference(id, identReference(ident.name)); + return { + id, + exprKind: { + case: "identExpr", + value: ident, + }, + }; + } + throw celError( + `undeclared reference to '${ident.name}' (in container '${this.env.namespace}')`, + id, + ); + } + private setType(id: bigint, type: CelType): void { this.typeMap.set(id, type); } + + private setReference(id: bigint, reference: ReferenceInfo): void { + this.referenceMap.set(id, reference); + } + + private resolveVariable(name: string): CelType | undefined { + const ident = this.env.variables.find(name); + if (ident) { + return ident; + } + for (const candidate of resolveCandidateNames(this.env.namespace, name)) { + const ident = this.env.variables.find(candidate); + if (ident) { + return ident; + } + } + return undefined; + } } export function protoTypeToCelType(pt: Type): CelType { @@ -272,3 +326,72 @@ function celTypeMapToProtoTypeMap( } return protoTypeMap; } + +function protoConstant< + T extends Exclude, +>( + caseName: T, + value: Extract["value"], +): MessageInitShape { + return { constantKind: { case: caseName, value } } as MessageInitShape< + typeof ConstantSchema + >; +} + +function celValueToProtoConstant( + value: CelValue, +): MessageInitShape { + const type = celType(value); + switch (type.kind) { + case "scalar": + switch (type.name) { + case "bool": + return protoConstant("boolValue", value as boolean); + case "bytes": + return protoConstant("bytesValue", value as Uint8Array); + case "double": + return protoConstant("doubleValue", value as number); + case "int": + return protoConstant("int64Value", BigInt(value as number | bigint)); + case "string": + return protoConstant("stringValue", value as string); + case "uint": + return protoConstant("uint64Value", BigInt(value as number | bigint)); + case "null_type": + return protoConstant("nullValue", NullValue.NULL_VALUE); + case "dyn": + throw new Error("cannot convert dyn to proto constant"); + case "type": + throw new Error("cannot convert type to proto constant"); + } + default: + throw new Error(`unsupported constant type: ${type.toString()}`); + } +} + +function celReferenceMapToProtoReferenceMap( + referenceMap: Map, +): Record> { + const protoReferenceMap: Record< + string, + MessageInitShape + > = {}; + for (const [exprId, referenceInfo] of referenceMap.entries()) { + if (referenceInfo.overloadIds.size > 0) { + protoReferenceMap[exprId.toString()] = { + name: referenceInfo.name, + overloadId: Array.from(referenceInfo.overloadIds), + value: undefined, + }; + continue; + } + protoReferenceMap[exprId.toString()] = { + name: referenceInfo.name, + overloadId: [], + value: referenceInfo.value + ? celValueToProtoConstant(referenceInfo.value as CelValue) + : undefined, + }; + } + return protoReferenceMap; +} diff --git a/packages/cel/src/referenceinfo.test.ts b/packages/cel/src/referenceinfo.test.ts new file mode 100644 index 0000000..7e62df6 --- /dev/null +++ b/packages/cel/src/referenceinfo.test.ts @@ -0,0 +1,108 @@ +// Copyright 2024-2026 Buf Technologies, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import * as assert from "node:assert/strict"; +import { suite, test } from "node:test"; +import { ADD_BYTES, ADD_DOUBLE } from "./gen/dev/cel/expr/overload_const.js"; +import { + addOverloadIds, + functionReference, + identReference, +} from "./referenceinfo.js"; +import { toCel } from "./value.js"; + +void suite("ReferenceInfo", () => { + void test("equals", () => { + const testCases = [ + { + name: "single overload equal", + a: functionReference([ADD_BYTES]), + b: functionReference([ADD_BYTES]), + equal: true, + }, + { + name: "single overload not equal", + a: functionReference([ADD_BYTES]), + b: functionReference([ADD_DOUBLE]), + equal: false, + }, + { + name: "single and multiple overload not equal", + a: functionReference([ADD_BYTES]), + b: functionReference([ADD_BYTES, ADD_DOUBLE]), + equal: false, + }, + { + name: "multiple overloads equal", + a: functionReference([ADD_BYTES, ADD_DOUBLE]), + b: functionReference([ADD_DOUBLE, ADD_BYTES]), + equal: true, + }, + { + name: "identifier reference equal", + a: identReference("BYTES"), + b: identReference("BYTES"), + equal: true, + }, + { + name: "identifier reference not equal", + a: identReference("BYTES"), + b: identReference("TRUE"), + equal: false, + }, + { + name: "identifier and constant reference not equal", + a: identReference("BYTES"), + b: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), + equal: false, + }, + { + name: "constant references equal", + a: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), + b: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), + equal: true, + }, + { + name: "constant references not equal", + a: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), + b: identReference( + "BYTES", + toCel(new TextEncoder().encode("bytes-other")), + ), + equal: false, + }, + { + name: "constant and overload reference not equal", + a: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), + b: functionReference([ADD_DOUBLE, ADD_BYTES]), + equal: false, + }, + ]; + for (const tc of testCases) { + assert.equal( + tc.a.equals(tc.b), + tc.equal, + `unexpected equality for ${tc.name}`, + ); + } + }); + + void test("add overload", () => { + let add = functionReference([ADD_BYTES]); + add = addOverloadIds(add, ADD_DOUBLE); + assert.equal(functionReference([ADD_BYTES, ADD_DOUBLE]).equals(add), true); + add = addOverloadIds(add, ADD_DOUBLE); + assert.equal(functionReference([ADD_BYTES, ADD_DOUBLE]).equals(add), true); + }); +}); diff --git a/packages/cel/src/referenceinfo.ts b/packages/cel/src/referenceinfo.ts new file mode 100644 index 0000000..34f1bba --- /dev/null +++ b/packages/cel/src/referenceinfo.ts @@ -0,0 +1,87 @@ +// Copyright 2024-2026 Buf Technologies, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { equals } from "./equals.js"; +import type { CelValue } from "./type.js"; + +/** + * ReferenceInfo contains a CEL native representation of an identifier + * reference which may refer to either a qualified identifier name, a set of + * overload ids, or a constant value from an enum. + */ +export class ReferenceInfo { + constructor( + public readonly name?: string, + public readonly value?: CelValue, + public readonly overloadIds: Set = new Set(), + ) {} + + /** + * Equals returns whether two references are identical to each other. + */ + equals(other: ReferenceInfo) { + if (this.name !== other.name) { + return false; + } + if (this.overloadIds.size !== other.overloadIds.size) { + return false; + } + const otherOverloads = other.overloadIds; + for (const overload of this.overloadIds) { + if (!otherOverloads.has(overload)) { + return false; + } + } + if (this.value && !other.value) { + return false; + } + if (other.value && !this.value) { + return false; + } + if (this.value && other.value && !equals(this.value, other.value)) { + return false; + } + return true; + } +} + +/** + * identReference creates a ReferenceInfo instance for an identifier with an + * optional constant value. + */ +export function identReference(name: string, value?: CelValue): ReferenceInfo { + return new ReferenceInfo(name, value); +} + +/** + * functionReference creates a ReferenceInfo instance for a set of function + * overloads. + */ +export function functionReference( + overloadIds: Set | string[], +): ReferenceInfo { + return new ReferenceInfo("", undefined, new Set(overloadIds)); +} + +/** + * AddOverloadIds creates a new ReferenceInfo with the provided overload ids + * added to the existing set. + */ +export function addOverloadIds(ref: ReferenceInfo, ...ids: string[]) { + return new ReferenceInfo( + ref.name, + ref.value, + new Set([...ref.overloadIds, ...ids]), + ); +} From a02360b10fce2905f340ffd86d0c6636573c4a8e Mon Sep 17 00:00:00 2001 From: jafaircl Date: Wed, 4 Feb 2026 18:15:56 -0500 Subject: [PATCH 2/7] implement PR feedback --- packages/cel/src/checker.ts | 99 ++++++++++------------- packages/cel/src/referenceinfo.test.ts | 108 ------------------------- packages/cel/src/referenceinfo.ts | 87 -------------------- 3 files changed, 42 insertions(+), 252 deletions(-) delete mode 100644 packages/cel/src/referenceinfo.test.ts delete mode 100644 packages/cel/src/referenceinfo.ts diff --git a/packages/cel/src/checker.ts b/packages/cel/src/checker.ts index e253857..a525625 100644 --- a/packages/cel/src/checker.ts +++ b/packages/cel/src/checker.ts @@ -18,12 +18,11 @@ import type { Expr, SourceInfo, Expr_Ident, - ConstantSchema, } from "@bufbuild/cel-spec/cel/expr/syntax_pb.js"; import { type CheckedExpr, CheckedExprSchema, - type ReferenceSchema, + type Reference, type Type, type TypeSchema, Type_PrimitiveType, @@ -45,16 +44,17 @@ import { NullValue } from "@bufbuild/protobuf/wkt"; import type { CelEnv } from "./env.js"; import { resolveCandidateNames } from "./namespace.js"; import { celError } from "./error.js"; -import { identReference, type ReferenceInfo } from "./referenceinfo.js"; +import { isCelUint } from "./uint.js"; export class Checker { - private readonly referenceMap: Map = new Map(); + private readonly referenceMap: Map = new Map(); private readonly typeMap: Map = new Map(); constructor(private readonly env: CelEnv) {} check(expr: Expr, sourceInfo: SourceInfo | undefined): CheckedExpr { // Clear each time we check since Checker instances are cached per environment. + this.referenceMap.clear(); this.typeMap.clear(); return create(CheckedExprSchema, { expr: this.checkExpr(expr), @@ -147,7 +147,7 @@ export class Checker { this.typeMap.set(id, type); } - private setReference(id: bigint, reference: ReferenceInfo): void { + private setReference(id: bigint, reference: Reference): void { this.referenceMap.set(id, reference); } @@ -327,71 +327,56 @@ function celTypeMapToProtoTypeMap( return protoTypeMap; } +function identReference(name: string, value?: CelValue): Reference { + return { + $typeName: "cel.expr.Reference", + name, + value: value ? celValueToProtoConstant(value) : undefined, + overloadId: [], + }; +} + function protoConstant< T extends Exclude, >( caseName: T, value: Extract["value"], -): MessageInitShape { - return { constantKind: { case: caseName, value } } as MessageInitShape< - typeof ConstantSchema - >; +): Constant { + return { + $typeName: "cel.expr.Constant", + constantKind: { case: caseName, value } as Constant["constantKind"], + }; } -function celValueToProtoConstant( - value: CelValue, -): MessageInitShape { - const type = celType(value); - switch (type.kind) { - case "scalar": - switch (type.name) { - case "bool": - return protoConstant("boolValue", value as boolean); - case "bytes": - return protoConstant("bytesValue", value as Uint8Array); - case "double": - return protoConstant("doubleValue", value as number); - case "int": - return protoConstant("int64Value", BigInt(value as number | bigint)); - case "string": - return protoConstant("stringValue", value as string); - case "uint": - return protoConstant("uint64Value", BigInt(value as number | bigint)); - case "null_type": +function celValueToProtoConstant(value: CelValue): Constant { + switch (typeof value) { + case "bigint": + return protoConstant("int64Value", value); + case "number": + return protoConstant("doubleValue", value); + case "boolean": + return protoConstant("boolValue", value); + case "string": + return protoConstant("stringValue", value); + case "object": + switch (true) { + case isCelUint(value): + return protoConstant("uint64Value", value.value); + case null: return protoConstant("nullValue", NullValue.NULL_VALUE); - case "dyn": - throw new Error("cannot convert dyn to proto constant"); - case "type": - throw new Error("cannot convert type to proto constant"); + case value instanceof Uint8Array: + return protoConstant("bytesValue", value); } - default: - throw new Error(`unsupported constant type: ${type.toString()}`); } + throw new Error(`unsupported constant type: ${celType(value)}`); } function celReferenceMapToProtoReferenceMap( - referenceMap: Map, -): Record> { - const protoReferenceMap: Record< - string, - MessageInitShape - > = {}; - for (const [exprId, referenceInfo] of referenceMap.entries()) { - if (referenceInfo.overloadIds.size > 0) { - protoReferenceMap[exprId.toString()] = { - name: referenceInfo.name, - overloadId: Array.from(referenceInfo.overloadIds), - value: undefined, - }; - continue; - } - protoReferenceMap[exprId.toString()] = { - name: referenceInfo.name, - overloadId: [], - value: referenceInfo.value - ? celValueToProtoConstant(referenceInfo.value as CelValue) - : undefined, - }; + referenceMap: Map, +): Record { + const protoReferenceMap: Record = {}; + for (const [id, ref] of referenceMap.entries()) { + protoReferenceMap[id.toString()] = ref; } return protoReferenceMap; } diff --git a/packages/cel/src/referenceinfo.test.ts b/packages/cel/src/referenceinfo.test.ts deleted file mode 100644 index 7e62df6..0000000 --- a/packages/cel/src/referenceinfo.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2024-2026 Buf Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import * as assert from "node:assert/strict"; -import { suite, test } from "node:test"; -import { ADD_BYTES, ADD_DOUBLE } from "./gen/dev/cel/expr/overload_const.js"; -import { - addOverloadIds, - functionReference, - identReference, -} from "./referenceinfo.js"; -import { toCel } from "./value.js"; - -void suite("ReferenceInfo", () => { - void test("equals", () => { - const testCases = [ - { - name: "single overload equal", - a: functionReference([ADD_BYTES]), - b: functionReference([ADD_BYTES]), - equal: true, - }, - { - name: "single overload not equal", - a: functionReference([ADD_BYTES]), - b: functionReference([ADD_DOUBLE]), - equal: false, - }, - { - name: "single and multiple overload not equal", - a: functionReference([ADD_BYTES]), - b: functionReference([ADD_BYTES, ADD_DOUBLE]), - equal: false, - }, - { - name: "multiple overloads equal", - a: functionReference([ADD_BYTES, ADD_DOUBLE]), - b: functionReference([ADD_DOUBLE, ADD_BYTES]), - equal: true, - }, - { - name: "identifier reference equal", - a: identReference("BYTES"), - b: identReference("BYTES"), - equal: true, - }, - { - name: "identifier reference not equal", - a: identReference("BYTES"), - b: identReference("TRUE"), - equal: false, - }, - { - name: "identifier and constant reference not equal", - a: identReference("BYTES"), - b: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), - equal: false, - }, - { - name: "constant references equal", - a: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), - b: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), - equal: true, - }, - { - name: "constant references not equal", - a: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), - b: identReference( - "BYTES", - toCel(new TextEncoder().encode("bytes-other")), - ), - equal: false, - }, - { - name: "constant and overload reference not equal", - a: identReference("BYTES", toCel(new TextEncoder().encode("bytes"))), - b: functionReference([ADD_DOUBLE, ADD_BYTES]), - equal: false, - }, - ]; - for (const tc of testCases) { - assert.equal( - tc.a.equals(tc.b), - tc.equal, - `unexpected equality for ${tc.name}`, - ); - } - }); - - void test("add overload", () => { - let add = functionReference([ADD_BYTES]); - add = addOverloadIds(add, ADD_DOUBLE); - assert.equal(functionReference([ADD_BYTES, ADD_DOUBLE]).equals(add), true); - add = addOverloadIds(add, ADD_DOUBLE); - assert.equal(functionReference([ADD_BYTES, ADD_DOUBLE]).equals(add), true); - }); -}); diff --git a/packages/cel/src/referenceinfo.ts b/packages/cel/src/referenceinfo.ts deleted file mode 100644 index 34f1bba..0000000 --- a/packages/cel/src/referenceinfo.ts +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2024-2026 Buf Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import { equals } from "./equals.js"; -import type { CelValue } from "./type.js"; - -/** - * ReferenceInfo contains a CEL native representation of an identifier - * reference which may refer to either a qualified identifier name, a set of - * overload ids, or a constant value from an enum. - */ -export class ReferenceInfo { - constructor( - public readonly name?: string, - public readonly value?: CelValue, - public readonly overloadIds: Set = new Set(), - ) {} - - /** - * Equals returns whether two references are identical to each other. - */ - equals(other: ReferenceInfo) { - if (this.name !== other.name) { - return false; - } - if (this.overloadIds.size !== other.overloadIds.size) { - return false; - } - const otherOverloads = other.overloadIds; - for (const overload of this.overloadIds) { - if (!otherOverloads.has(overload)) { - return false; - } - } - if (this.value && !other.value) { - return false; - } - if (other.value && !this.value) { - return false; - } - if (this.value && other.value && !equals(this.value, other.value)) { - return false; - } - return true; - } -} - -/** - * identReference creates a ReferenceInfo instance for an identifier with an - * optional constant value. - */ -export function identReference(name: string, value?: CelValue): ReferenceInfo { - return new ReferenceInfo(name, value); -} - -/** - * functionReference creates a ReferenceInfo instance for a set of function - * overloads. - */ -export function functionReference( - overloadIds: Set | string[], -): ReferenceInfo { - return new ReferenceInfo("", undefined, new Set(overloadIds)); -} - -/** - * AddOverloadIds creates a new ReferenceInfo with the provided overload ids - * added to the existing set. - */ -export function addOverloadIds(ref: ReferenceInfo, ...ids: string[]) { - return new ReferenceInfo( - ref.name, - ref.value, - new Set([...ref.overloadIds, ...ids]), - ); -} From 173423348f011d3d8be627fb73173e3ffa9f1c5a Mon Sep 17 00:00:00 2001 From: jafaircl Date: Wed, 4 Feb 2026 19:13:39 -0500 Subject: [PATCH 3/7] Make variable resolution for idents more explicit --- packages/cel/src/checker.ts | 6 ++--- packages/cel/src/scope.ts | 45 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/packages/cel/src/checker.ts b/packages/cel/src/checker.ts index a525625..7cc6034 100644 --- a/packages/cel/src/checker.ts +++ b/packages/cel/src/checker.ts @@ -125,7 +125,7 @@ export class Checker { id: bigint, ident: Expr_Ident, ): MessageInitShape { - const found = this.resolveVariable(ident.name); + const found = this.resolveSimpleVariable(ident.name); if (found) { this.setType(id, found); this.setReference(id, identReference(ident.name)); @@ -151,8 +151,8 @@ export class Checker { this.referenceMap.set(id, reference); } - private resolveVariable(name: string): CelType | undefined { - const ident = this.env.variables.find(name); + private resolveSimpleVariable(name: string): CelType | undefined { + const ident = this.env.variables.findLocal(name); if (ident) { return ident; } diff --git a/packages/cel/src/scope.ts b/packages/cel/src/scope.ts index 9d18219..84f0bbe 100644 --- a/packages/cel/src/scope.ts +++ b/packages/cel/src/scope.ts @@ -29,6 +29,10 @@ export interface VariableScope { * All the variables in the scope. */ [Symbol.iterator](): IterableIterator<[string, CelType]>; + /** + * The parent VariableScope for the current scope or undefined. + */ + parent: VariableScope | undefined; /** * Creates a new VariableScope with the current scope as the parent and the * provided inputs as the new scope's variables. @@ -44,6 +48,18 @@ export interface VariableScope { * Finds the variable by name in the current scope or any parent scopes. */ find(name: string): CelType | undefined; + /** + * Finds a variable with a given name in the current scope only. + */ + findInScope(name: string): CelType | undefined; + /** + * Finds a locally scoped variable with a given name, ignoring the root scope. + */ + findLocal(name: string): CelType | undefined; + /** + * Finds a globally scoped variable with a given name, only searching the root scope. + */ + findGlobal(name: string): CelType | undefined; } /** @@ -83,6 +99,10 @@ class Scope } } + get parent(): VariableScope | undefined { + return this._parent; + } + push( inputs: PushVars, ): VariableScope { @@ -99,4 +119,29 @@ class Scope } return this._parent?.find(name); } + + findInScope(name: string): CelType | undefined { + return this._variables.get(name); + } + + findLocal(name: string): CelType | undefined { + if (!this._parent) { + return undefined; + } + if (this._variables.has(name)) { + return this._variables.get(name); + } + return this._parent.findLocal(name); + } + + findGlobal(name: string): CelType | undefined { + if (!this._parent) { + return this._variables.get(name); + } + let parent = this._parent; + while (parent.parent) { + parent = parent.parent; + } + return parent.findInScope(name); + } } From db83f96646170dde90c6decf5af3cd4868ce535c Mon Sep 17 00:00:00 2001 From: jafaircl Date: Wed, 4 Feb 2026 19:23:17 -0500 Subject: [PATCH 4/7] Add unit tests for new VariableScope methods --- packages/cel/src/scope.test.ts | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/packages/cel/src/scope.test.ts b/packages/cel/src/scope.test.ts index 095be8c..57be4b7 100644 --- a/packages/cel/src/scope.test.ts +++ b/packages/cel/src/scope.test.ts @@ -64,4 +64,41 @@ void suite("scope", () => { assert.equal(popped, undefined); }); }); + void suite("find() flavors", () => { + void test("find()", () => { + const root = createScope({ a: CelScalar.INT }); + const child = root.push({ b: CelScalar.STRING }); + const grandChild = child.push({ c: CelScalar.BOOL }); + assert.equal(grandChild.find("a"), CelScalar.INT); + assert.equal(grandChild.find("b"), CelScalar.STRING); + assert.equal(grandChild.find("c"), CelScalar.BOOL); + }); + void test("findInScope()", () => { + const root = createScope({ a: CelScalar.INT }); + const child = root.push({ b: CelScalar.STRING }); + const grandChild = child.push({ c: CelScalar.BOOL }); + assert.equal(child.findInScope("a"), undefined); + assert.equal(child.findInScope("b"), CelScalar.STRING); + assert.equal(child.findInScope("c"), undefined); + assert.equal(grandChild.findInScope("a"), undefined); + assert.equal(grandChild.findInScope("b"), undefined); + assert.equal(grandChild.findInScope("c"), CelScalar.BOOL); + }); + void test("findLocal()", () => { + const root = createScope({ a: CelScalar.INT }); + const child = root.push({ b: CelScalar.STRING }); + const grandChild = child.push({ c: CelScalar.BOOL }); + assert.equal(grandChild.findLocal("a"), undefined); + assert.equal(grandChild.findLocal("b"), CelScalar.STRING); + assert.equal(grandChild.findLocal("c"), CelScalar.BOOL); + }); + void test("findGlobal()", () => { + const root = createScope({ a: CelScalar.INT }); + const child = root.push({ b: CelScalar.STRING }); + const grandChild = child.push({ c: CelScalar.BOOL }); + assert.equal(grandChild.findGlobal("a"), CelScalar.INT); + assert.equal(grandChild.findGlobal("b"), undefined); + assert.equal(grandChild.findGlobal("c"), undefined); + }); + }); }); From 35aafbad6e99a639223e121a398ea5eabb591232 Mon Sep 17 00:00:00 2001 From: jafaircl Date: Tue, 10 Feb 2026 07:58:28 -0500 Subject: [PATCH 5/7] Implement PR feedback --- packages/cel/src/checker.ts | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/packages/cel/src/checker.ts b/packages/cel/src/checker.ts index 7cc6034..6e687ad 100644 --- a/packages/cel/src/checker.ts +++ b/packages/cel/src/checker.ts @@ -18,11 +18,12 @@ import type { Expr, SourceInfo, Expr_Ident, + ConstantSchema, } from "@bufbuild/cel-spec/cel/expr/syntax_pb.js"; import { type CheckedExpr, CheckedExprSchema, - type Reference, + type ReferenceSchema, type Type, type TypeSchema, Type_PrimitiveType, @@ -47,7 +48,10 @@ import { celError } from "./error.js"; import { isCelUint } from "./uint.js"; export class Checker { - private readonly referenceMap: Map = new Map(); + private readonly referenceMap: Map< + bigint, + MessageInitShape + > = new Map(); private readonly typeMap: Map = new Map(); constructor(private readonly env: CelEnv) {} @@ -147,7 +151,10 @@ export class Checker { this.typeMap.set(id, type); } - private setReference(id: bigint, reference: Reference): void { + private setReference( + id: bigint, + reference: MessageInitShape, + ): void { this.referenceMap.set(id, reference); } @@ -327,12 +334,13 @@ function celTypeMapToProtoTypeMap( return protoTypeMap; } -function identReference(name: string, value?: CelValue): Reference { +function identReference( + name: string, + value?: CelValue, +): MessageInitShape { return { - $typeName: "cel.expr.Reference", name, value: value ? celValueToProtoConstant(value) : undefined, - overloadId: [], }; } @@ -341,14 +349,15 @@ function protoConstant< >( caseName: T, value: Extract["value"], -): Constant { +): MessageInitShape { return { - $typeName: "cel.expr.Constant", constantKind: { case: caseName, value } as Constant["constantKind"], }; } -function celValueToProtoConstant(value: CelValue): Constant { +function celValueToProtoConstant( + value: CelValue, +): MessageInitShape { switch (typeof value) { case "bigint": return protoConstant("int64Value", value); @@ -372,9 +381,12 @@ function celValueToProtoConstant(value: CelValue): Constant { } function celReferenceMapToProtoReferenceMap( - referenceMap: Map, -): Record { - const protoReferenceMap: Record = {}; + referenceMap: Map>, +): Record> { + const protoReferenceMap: Record< + string, + MessageInitShape + > = {}; for (const [id, ref] of referenceMap.entries()) { protoReferenceMap[id.toString()] = ref; } From eae776318e02e939955d9f2585de28bc6d9b9288 Mon Sep 17 00:00:00 2001 From: jafaircl Date: Tue, 10 Feb 2026 17:29:48 -0500 Subject: [PATCH 6/7] Handle variable disambiguation and separate global scope from checker scope --- packages/cel-spec/src/testdata/conformance.ts | 31639 +--------------- packages/cel/src/checker.ts | 51 +- packages/cel/src/scope.test.ts | 18 +- packages/cel/src/scope.ts | 45 +- 4 files changed, 53 insertions(+), 31700 deletions(-) diff --git a/packages/cel-spec/src/testdata/conformance.ts b/packages/cel-spec/src/testdata/conformance.ts index 9c9703d..8ffbef0 100644 --- a/packages/cel-spec/src/testdata/conformance.ts +++ b/packages/cel-spec/src/testdata/conformance.ts @@ -1,31639 +1,2 @@ -// Copyright 2024-2026 Buf Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - // Generated from cel-go ../src/testdata/json -import type { SerializedIncrementalTestSuite } from "./tests.js"; -export const tests: SerializedIncrementalTestSuite = { - name: "conformance", - suites: [ - { - name: "basic", - suites: [ - { - name: "self_eval_zeroish", - tests: [ - { - original: { - name: "self_eval_int_zero", - expr: "0", - value: { int64Value: "0" }, - }, - ast: "0^#*expr.Constant_Int64Value#", - checkedAst: "0~int", - type: "int", - }, - { - original: { - name: "self_eval_uint_zero", - expr: "0u", - value: { uint64Value: "0" }, - }, - ast: "0u^#*expr.Constant_Uint64Value#", - checkedAst: "0u~uint", - type: "uint", - }, - { - original: { - name: "self_eval_uint_alias_zero", - expr: "0U", - value: { uint64Value: "0" }, - }, - ast: "0u^#*expr.Constant_Uint64Value#", - checkedAst: "0u~uint", - type: "uint", - }, - { - original: { - name: "self_eval_float_zero", - expr: "0.0", - value: { doubleValue: 0 }, - }, - ast: "0^#*expr.Constant_DoubleValue#", - checkedAst: "0~double", - type: "double", - }, - { - original: { - name: "self_eval_float_zerowithexp", - expr: "0e+0", - value: { doubleValue: 0 }, - }, - ast: "0^#*expr.Constant_DoubleValue#", - checkedAst: "0~double", - type: "double", - }, - { - original: { - name: "self_eval_string_empty", - expr: "''", - value: { stringValue: "" }, - }, - ast: '""^#*expr.Constant_StringValue#', - checkedAst: '""~string', - type: "string", - }, - { - original: { - name: "self_eval_string_empty_quotes", - expr: '""', - value: { stringValue: "" }, - }, - ast: '""^#*expr.Constant_StringValue#', - checkedAst: '""~string', - type: "string", - }, - { - original: { - name: "self_eval_string_raw_prefix", - expr: 'r""', - value: { stringValue: "" }, - }, - ast: '""^#*expr.Constant_StringValue#', - checkedAst: '""~string', - type: "string", - }, - { - original: { - name: "self_eval_bytes_empty", - expr: 'b""', - value: { bytesValue: "" }, - }, - ast: 'b""^#*expr.Constant_BytesValue#', - checkedAst: 'b""~bytes', - type: "bytes", - }, - { - original: { - name: "self_eval_bool_false", - expr: "false", - value: { boolValue: false }, - }, - ast: "false^#*expr.Constant_BoolValue#", - checkedAst: "false~bool", - type: "bool", - }, - { - original: { - name: "self_eval_null", - expr: "null", - value: { nullValue: null }, - }, - ast: "null^#*expr.Constant_NullValue#", - checkedAst: "null~null", - type: "null", - }, - { - original: { - name: "self_eval_empty_list", - expr: "[]", - value: { listValue: {} }, - }, - ast: "[]^#*expr.Expr_ListExpr#", - checkedAst: "[]~list(dyn)", - type: "list(dyn)", - }, - { - original: { - name: "self_eval_empty_map", - expr: "{}", - value: { mapValue: {} }, - }, - ast: "{}^#*expr.Expr_StructExpr#", - checkedAst: "{}~map(dyn, dyn)", - type: "map(dyn, dyn)", - }, - { - original: { - name: "self_eval_string_raw_prefix_triple_double", - expr: 'r""""""', - value: { stringValue: "" }, - }, - ast: '""^#*expr.Constant_StringValue#', - checkedAst: '""~string', - type: "string", - }, - { - original: { - name: "self_eval_string_raw_prefix_triple_single", - expr: "r''''''", - value: { stringValue: "" }, - }, - ast: '""^#*expr.Constant_StringValue#', - checkedAst: '""~string', - type: "string", - }, - ], - }, - { - name: "self_eval_nonzeroish", - tests: [ - { - original: { - name: "self_eval_int_nonzero", - expr: "42", - value: { int64Value: "42" }, - }, - ast: "42^#*expr.Constant_Int64Value#", - checkedAst: "42~int", - type: "int", - }, - { - original: { - name: "self_eval_uint_nonzero", - expr: "123456789u", - value: { uint64Value: "123456789" }, - }, - ast: "123456789u^#*expr.Constant_Uint64Value#", - checkedAst: "123456789u~uint", - type: "uint", - }, - { - original: { - name: "self_eval_uint_alias_nonzero", - expr: "123456789U", - value: { uint64Value: "123456789" }, - }, - ast: "123456789u^#*expr.Constant_Uint64Value#", - checkedAst: "123456789u~uint", - type: "uint", - }, - { - original: { - name: "self_eval_int_negative_min", - expr: "-9223372036854775808", - value: { int64Value: "-9223372036854775808" }, - }, - ast: "-9223372036854775808^#*expr.Constant_Int64Value#", - checkedAst: "-9223372036854775808~int", - type: "int", - }, - { - original: { - name: "self_eval_float_negative_exp", - expr: "-2.3e+1", - value: { doubleValue: -23 }, - }, - ast: "-23^#*expr.Constant_DoubleValue#", - checkedAst: "-23~double", - type: "double", - }, - { - original: { - name: "self_eval_string_excl", - expr: '"!"', - value: { stringValue: "!" }, - }, - ast: '"!"^#*expr.Constant_StringValue#', - checkedAst: '"!"~string', - type: "string", - }, - { - original: { - name: "self_eval_string_escape", - expr: "'\\''", - value: { stringValue: "'" }, - }, - ast: '"\'"^#*expr.Constant_StringValue#', - checkedAst: '"\'"~string', - type: "string", - }, - { - original: { - name: "self_eval_bytes_escape", - expr: "b'ÿ'", - value: { bytesValue: "w78=" }, - }, - ast: 'b"ÿ"^#*expr.Constant_BytesValue#', - checkedAst: 'b"ÿ"~bytes', - type: "bytes", - }, - { - original: { - name: "self_eval_bytes_invalid_utf8", - expr: "b'\\000\\xff'", - value: { bytesValue: "AP8=" }, - }, - ast: 'b"\\x00\\xff"^#*expr.Constant_BytesValue#', - checkedAst: 'b"\\x00\\xff"~bytes', - type: "bytes", - }, - { - original: { - name: "self_eval_list_singleitem", - expr: "[-1]", - value: { listValue: { values: [{ int64Value: "-1" }] } }, - }, - ast: "[\n -1^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#", - checkedAst: "[\n -1~int\n]~list(int)", - type: "list(int)", - }, - { - original: { - name: "self_eval_map_singleitem", - expr: '{"k":"v"}', - value: { - mapValue: { - entries: [ - { - key: { stringValue: "k" }, - value: { stringValue: "v" }, - }, - ], - }, - }, - }, - ast: '{\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: '{\n "k"~string:"v"~string\n}~map(string, string)', - type: "map(string, string)", - }, - { - original: { - name: "self_eval_bool_true", - expr: "true", - value: { boolValue: true }, - }, - ast: "true^#*expr.Constant_BoolValue#", - checkedAst: "true~bool", - type: "bool", - }, - { - original: { - name: "self_eval_int_hex", - expr: "0x55555555", - value: { int64Value: "1431655765" }, - }, - ast: "1431655765^#*expr.Constant_Int64Value#", - checkedAst: "1431655765~int", - type: "int", - }, - { - original: { - name: "self_eval_int_hex_negative", - expr: "-0x55555555", - value: { int64Value: "-1431655765" }, - }, - ast: "-1431655765^#*expr.Constant_Int64Value#", - checkedAst: "-1431655765~int", - type: "int", - }, - { - original: { - name: "self_eval_uint_hex", - expr: "0x55555555u", - value: { uint64Value: "1431655765" }, - }, - ast: "1431655765u^#*expr.Constant_Uint64Value#", - checkedAst: "1431655765u~uint", - type: "uint", - }, - { - original: { - name: "self_eval_uint_alias_hex", - expr: "0x55555555U", - value: { uint64Value: "1431655765" }, - }, - ast: "1431655765u^#*expr.Constant_Uint64Value#", - checkedAst: "1431655765u~uint", - type: "uint", - }, - { - original: { - name: "self_eval_unicode_escape_four", - expr: '"\\u270c"', - value: { stringValue: "✌" }, - }, - ast: '"✌"^#*expr.Constant_StringValue#', - checkedAst: '"✌"~string', - type: "string", - }, - { - original: { - name: "self_eval_unicode_escape_eight", - expr: '"\\U0001f431"', - value: { stringValue: "🐱" }, - }, - ast: '"🐱"^#*expr.Constant_StringValue#', - checkedAst: '"🐱"~string', - type: "string", - }, - { - original: { - name: "self_eval_ascii_escape_seq", - expr: '"\\a\\b\\f\\n\\r\\t\\v\\"\\\'\\\\"', - value: { stringValue: "\u0007\b\f\n\r\t\u000b\"'\\" }, - }, - ast: '"\\a\\b\\f\\n\\r\\t\\v\\"\'\\\\"^#*expr.Constant_StringValue#', - checkedAst: '"\\a\\b\\f\\n\\r\\t\\v\\"\'\\\\"~string', - type: "string", - }, - ], - }, - { - name: "variables", - tests: [ - { - original: { - name: "self_eval_bound_lookup", - expr: "x", - typeEnv: [ - { name: "x", ident: { type: { primitive: "INT64" } } }, - ], - bindings: { x: { value: { int64Value: "123" } } }, - value: { int64Value: "123" }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~int^x", - type: "int", - }, - { - original: { - name: "self_eval_unbound_lookup", - description: - "An unbound variable should be marked as an error during execution. See google/cel-go#154", - expr: "x", - disableCheck: true, - evalError: { - errors: [ - { - message: "undeclared reference to 'x' (in container '')", - }, - ], - }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'x' (in container '')\n | x\n | ^", - }, - { - original: { - name: "unbound_is_runtime_error", - description: - "Make sure we can short-circuit around an unbound variable.", - expr: "x || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n x^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'x' (in container '')\n | x || true\n | ^", - }, - ], - }, - { - name: "functions", - tests: [ - { - original: { - name: "binop", - expr: "1 + 1", - value: { int64Value: "2" }, - }, - ast: "_+_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n 1~int,\n 1~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "unbound", - expr: "f_unknown(17)", - disableCheck: true, - evalError: { errors: [{ message: "unbound function" }] }, - }, - ast: "f_unknown(\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:10: undeclared reference to 'f_unknown' (in container '')\n | f_unknown(17)\n | .........^", - }, - { - original: { - name: "unbound_is_runtime_error", - expr: "f_unknown(17) || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n f_unknown(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:10: undeclared reference to 'f_unknown' (in container '')\n | f_unknown(17) || true\n | .........^", - }, - ], - }, - { - name: "reserved_const", - tests: [ - { - original: { - name: "false", - expr: "false", - typeEnv: [ - { name: "false", ident: { type: { primitive: "BOOL" } } }, - ], - bindings: { false: { value: { boolValue: true } } }, - value: { boolValue: false }, - }, - ast: "false^#*expr.Constant_BoolValue#", - checkedAst: "false~bool", - type: "bool", - }, - { - original: { - name: "true", - expr: "true", - typeEnv: [ - { name: "true", ident: { type: { primitive: "BOOL" } } }, - ], - bindings: { true: { value: { boolValue: false } } }, - value: { boolValue: true }, - }, - ast: "true^#*expr.Constant_BoolValue#", - checkedAst: "true~bool", - type: "bool", - }, - { - original: { - name: "null", - expr: "null", - typeEnv: [ - { name: "null", ident: { type: { primitive: "BOOL" } } }, - ], - bindings: { null: { value: { boolValue: true } } }, - value: { nullValue: null }, - }, - ast: "null^#*expr.Constant_NullValue#", - checkedAst: "null~null", - type: "null", - }, - ], - }, - ], - }, - { - name: "bindings_ext", - suites: [ - { - name: "bind", - tests: [ - { - original: { - name: "boolean_literal", - expr: "cel.bind(t, true, t)", - value: { boolValue: true }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.bind(\n t^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n t^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t~bool^t,\n // Result\n t~bool^t)~bool", - type: "bool", - }, - { - original: { - name: "string_concat", - expr: 'cel.bind(msg, "hello", msg + msg + msg)', - value: { stringValue: "hellohellohello" }, - }, - ast: 'cel^#*expr.Expr_IdentExpr#.bind(\n msg^#*expr.Expr_IdentExpr#,\n "hello"^#*expr.Constant_StringValue#,\n _+_(\n _+_(\n msg^#*expr.Expr_IdentExpr#,\n msg^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n msg,\n // Init\n "hello"~string,\n // LoopCondition\n false~bool,\n // LoopStep\n msg~string^msg,\n // Result\n _+_(\n _+_(\n msg~string^msg,\n msg~string^msg\n )~string^add_string,\n msg~string^msg\n )~string^add_string)~string', - type: "string", - }, - { - original: { - name: "bind_nested", - expr: "cel.bind(t1, true, cel.bind(t2, true, t1 \u0026\u0026 t2))", - value: { boolValue: true }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.bind(\n t1^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n cel^#*expr.Expr_IdentExpr#.bind(\n t2^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n _\u0026\u0026_(\n t1^#*expr.Expr_IdentExpr#,\n t2^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t1,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t1~bool^t1,\n // Result\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t2,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t2~bool^t2,\n // Result\n _\u0026\u0026_(\n t1~bool^t1,\n t2~bool^t2\n )~bool^logical_and)~bool)~bool", - type: "bool", - }, - { - original: { - name: "macro_exists", - expr: "cel.bind(valid_elems, [1, 2, 3], [3, 4, 5].exists(e, e in valid_elems))", - value: { boolValue: true }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.bind(\n valid_elems^#*expr.Expr_IdentExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n @in(\n e^#*expr.Expr_IdentExpr#,\n valid_elems^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n valid_elems,\n // Init\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // LoopCondition\n false~bool,\n // LoopStep\n valid_elems~list(int)^valid_elems,\n // Result\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n @in(\n e~int^e,\n valid_elems~list(int)^valid_elems\n )~bool^in_list\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool)~bool", - type: "bool", - }, - { - original: { - name: "macro_not_exists", - expr: "cel.bind(valid_elems, [1, 2, 3], ![4, 5].exists(e, e in valid_elems))", - value: { boolValue: true }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.bind(\n valid_elems^#*expr.Expr_IdentExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n !_(\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n @in(\n e^#*expr.Expr_IdentExpr#,\n valid_elems^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n valid_elems,\n // Init\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // LoopCondition\n false~bool,\n // LoopStep\n valid_elems~list(int)^valid_elems,\n // Result\n !_(\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 4~int,\n 5~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n @in(\n e~int^e,\n valid_elems~list(int)^valid_elems\n )~bool^in_list\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n )~bool^logical_not)~bool", - type: "bool", - }, - ], - }, - ], - }, - { - name: "block_ext", - suites: [ - { - name: "basic", - tests: [ - { - original: { - name: "int_add", - expr: "cel.block([1, cel.index(0) + 1, cel.index(1) + 1, cel.index(2) + 1], cel.index(3))", - value: { int64Value: "4" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n 1^#*expr.Constant_Int64Value#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n 1~int,\n _+_(\n @index0~dyn^@index0,\n 1~int\n )~int^add_int64,\n _+_(\n @index1~dyn^@index1,\n 1~int\n )~int^add_int64,\n _+_(\n @index2~dyn^@index2,\n 1~int\n )~int^add_int64\n ]~list(int),\n @index3~dyn^@index3\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "size_1", - expr: "cel.block([[1, 2], size(cel.index(0)), cel.index(1) + cel.index(1), cel.index(2) + 1], cel.index(3))", - value: { int64Value: "5" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index2~dyn^@index2,\n 1~int\n )~int^add_int64\n ]~list(dyn),\n @index3~dyn^@index3\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "size_2", - expr: "cel.block([[1, 2], size(cel.index(0)), 2 + cel.index(1), cel.index(2) + cel.index(1), cel.index(3) + 1], cel.index(4))", - value: { int64Value: "7" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n 2~int,\n @index1~dyn^@index1\n )~int^add_int64,\n _+_(\n @index2~dyn^@index2,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index3~dyn^@index3,\n 1~int\n )~int^add_int64\n ]~list(dyn),\n @index4~dyn^@index4\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "size_3", - expr: "cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), cel.index(1) + cel.index(1), cel.index(4) + cel.index(3), cel.index(5) + cel.index(3)], cel.index(6))", - value: { int64Value: "6" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n [\n 0~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index2~dyn^@index2\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index5~dyn^@index5,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index6~dyn^@index6\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "size_4", - expr: "cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), [1, 2, 3], size(cel.index(4)), 5 + cel.index(1), cel.index(6) + cel.index(1), cel.index(7) + cel.index(3), cel.index(8) + cel.index(3), cel.index(9) + cel.index(5), cel.index(10) + cel.index(5)], cel.index(11))", - value: { int64Value: "17" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 5^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n [\n 0~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index2~dyn^@index2\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n size(\n @index4~dyn^@index4\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n 5~int,\n @index1~dyn^@index1\n )~int^add_int64,\n _+_(\n @index6~dyn^@index6,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index7~dyn^@index7,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index8~dyn^@index8,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index9~dyn^@index9,\n @index5~dyn^@index5\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index10~dyn^@index10,\n @index5~dyn^@index5\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index11~dyn^@index11\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "timestamp", - expr: "cel.block([timestamp(1000000000), int(cel.index(0)), timestamp(cel.index(1)), cel.index(2).getFullYear(), timestamp(50), int(cel.index(4)), timestamp(cel.index(5)), timestamp(200), int(cel.index(7)), timestamp(cel.index(8)), cel.index(9).getFullYear(), timestamp(75), int(cel.index(11)), timestamp(cel.index(12)), cel.index(13).getFullYear(), cel.index(3) + cel.index(14), cel.index(6).getFullYear(), cel.index(15) + cel.index(16), cel.index(17) + cel.index(3), cel.index(6).getSeconds(), cel.index(18) + cel.index(19), cel.index(20) + cel.index(10), cel.index(21) + cel.index(10), cel.index(13).getMinutes(), cel.index(22) + cel.index(23), cel.index(24) + cel.index(3)], cel.index(25))", - value: { int64Value: "13934" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n timestamp(\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n 200^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n timestamp(\n 75^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 14^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 16^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 18^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 19^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 21^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 23^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp,\n int(\n @index0~dyn^@index0\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index1~dyn^@index1\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index2~dyn^@index2.getFullYear()~int^timestamp_to_year,\n timestamp(\n 50~int\n )~timestamp^int64_to_timestamp,\n int(\n @index4~dyn^@index4\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index5~dyn^@index5\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n timestamp(\n 200~int\n )~timestamp^int64_to_timestamp,\n int(\n @index7~dyn^@index7\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index8~dyn^@index8\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index9~dyn^@index9.getFullYear()~int^timestamp_to_year,\n timestamp(\n 75~int\n )~timestamp^int64_to_timestamp,\n int(\n @index11~dyn^@index11\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index12~dyn^@index12\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index13~dyn^@index13.getFullYear()~int^timestamp_to_year,\n _+_(\n @index3~dyn^@index3,\n @index14~dyn^@index14\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index6~dyn^@index6.getFullYear()~int^timestamp_to_year,\n _+_(\n @index15~dyn^@index15,\n @index16~dyn^@index16\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index17~dyn^@index17,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index6~dyn^@index6.getSeconds()~int^duration_to_seconds|timestamp_to_seconds,\n _+_(\n @index18~dyn^@index18,\n @index19~dyn^@index19\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index20~dyn^@index20,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index21~dyn^@index21,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index13~dyn^@index13.getMinutes()~int^duration_to_minutes|timestamp_to_minutes,\n _+_(\n @index22~dyn^@index22,\n @index23~dyn^@index23\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index24~dyn^@index24,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index25~dyn^@index25\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "map_index", - expr: 'cel.block([{"a": 2}, cel.index(0)["a"], cel.index(1) * cel.index(1), cel.index(1) + cel.index(2)], cel.index(3))', - value: { int64Value: "6" }, - }, - ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n "a"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "a"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'cel.@block(\n [\n {\n "a"~string:2~int\n }~map(string, int),\n _[_](\n @index0~dyn^@index0,\n "a"~string\n )~dyn^index_map|optional_map_index_value,\n _*_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^multiply_double|multiply_int64|multiply_uint64,\n _+_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index3~dyn^@index3\n)~dyn^cel_block_list', - type: "dyn", - }, - { - original: { - name: "nested_map_construction", - expr: 'cel.block([{"b": 1}, {"e": cel.index(0)}], {"a": cel.index(0), "c": cel.index(0), "d": cel.index(1), "e": cel.index(1)})', - value: { - mapValue: { - entries: [ - { - key: { stringValue: "a" }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "b" }, - value: { int64Value: "1" }, - }, - ], - }, - }, - }, - { - key: { stringValue: "c" }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "b" }, - value: { int64Value: "1" }, - }, - ], - }, - }, - }, - { - key: { stringValue: "d" }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "e" }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "b" }, - value: { int64Value: "1" }, - }, - ], - }, - }, - }, - ], - }, - }, - }, - { - key: { stringValue: "e" }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "e" }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "b" }, - value: { int64Value: "1" }, - }, - ], - }, - }, - }, - ], - }, - }, - }, - ], - }, - }, - }, - ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n "b"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "e"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#,\n {\n "a"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n "c"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n "d"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n "e"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'cel.@block(\n [\n {\n "b"~string:1~int\n }~map(string, int),\n {\n "e"~string:@index0~dyn^@index0\n }~map(string, dyn)\n ]~list(map(string, dyn)),\n {\n "a"~string:@index0~dyn^@index0,\n "c"~string:@index0~dyn^@index0,\n "d"~string:@index1~dyn^@index1,\n "e"~string:@index1~dyn^@index1\n }~map(string, dyn)\n)~map(string, dyn)^cel_block_list', - type: "map(string, dyn)", - }, - { - original: { - name: "nested_list_construction", - expr: "cel.block([[1, 2, 3, 4], [1, 2], [cel.index(1), cel.index(0)]], [1, cel.index(0), 2, cel.index(0), 5, cel.index(0), 7, cel.index(2), cel.index(1)])", - value: { - listValue: { - values: [ - { int64Value: "1" }, - { - listValue: { - values: [ - { int64Value: "1" }, - { int64Value: "2" }, - { int64Value: "3" }, - { int64Value: "4" }, - ], - }, - }, - { int64Value: "2" }, - { - listValue: { - values: [ - { int64Value: "1" }, - { int64Value: "2" }, - { int64Value: "3" }, - { int64Value: "4" }, - ], - }, - }, - { int64Value: "5" }, - { - listValue: { - values: [ - { int64Value: "1" }, - { int64Value: "2" }, - { int64Value: "3" }, - { int64Value: "4" }, - ], - }, - }, - { int64Value: "7" }, - { - listValue: { - values: [ - { - listValue: { - values: [ - { int64Value: "1" }, - { int64Value: "2" }, - ], - }, - }, - { - listValue: { - values: [ - { int64Value: "1" }, - { int64Value: "2" }, - { int64Value: "3" }, - { int64Value: "4" }, - ], - }, - }, - ], - }, - }, - { - listValue: { - values: [{ int64Value: "1" }, { int64Value: "2" }], - }, - }, - ], - }, - }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n [\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n [\n 1~int,\n 2~int\n ]~list(int),\n [\n @index1~dyn^@index1,\n @index0~dyn^@index0\n ]~list(dyn)\n ]~list(list(dyn)),\n [\n 1~int,\n @index0~dyn^@index0,\n 2~int,\n @index0~dyn^@index0,\n 5~int,\n @index0~dyn^@index0,\n 7~int,\n @index2~dyn^@index2,\n @index1~dyn^@index1\n ]~list(dyn)\n)~list(dyn)^cel_block_list", - type: "list(dyn)", - }, - { - original: { - name: "select", - expr: "cel.block([msg.single_int64, cel.index(0) + cel.index(0)], cel.index(1))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "6" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _+_(\n @index0~dyn^@index0,\n @index0~dyn^@index0\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index1~dyn^@index1\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "select_nested_1", - expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, cel.index(1).single_int32, cel.index(2) + cel.index(3), cel.index(4) + cel.index(2), msg.single_int64, cel.index(5) + cel.index(6), cel.index(1).oneof_type, cel.index(8).payload, cel.index(9).single_int64, cel.index(7) + cel.index(10)], cel.index(11))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "31" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int32^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index1~dyn^@index1.single_int32~dyn,\n _+_(\n @index2~dyn^@index2,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index2~dyn^@index2\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _+_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index1~dyn^@index1.oneof_type~dyn,\n @index8~dyn^@index8.payload~dyn,\n @index9~dyn^@index9.single_int64~dyn,\n _+_(\n @index7~dyn^@index7,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index11~dyn^@index11\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "select_nested_2", - expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).oneof_type, cel.index(2).payload, cel.index(3).oneof_type, cel.index(4).payload, cel.index(5).oneof_type, cel.index(6).payload, cel.index(7).single_bool, true || cel.index(8), cel.index(4).child, cel.index(10).child, cel.index(11).payload, cel.index(12).single_bool], cel.index(9) || cel.index(13))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { boolValue: true }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_bool^#*expr.Expr_SelectExpr#,\n _||_(\n true^#*expr.Constant_BoolValue#,\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.child^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.child^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_bool^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n _||_(\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.oneof_type~dyn,\n @index2~dyn^@index2.payload~dyn,\n @index3~dyn^@index3.oneof_type~dyn,\n @index4~dyn^@index4.payload~dyn,\n @index5~dyn^@index5.oneof_type~dyn,\n @index6~dyn^@index6.payload~dyn,\n @index7~dyn^@index7.single_bool~dyn,\n _||_(\n true~bool,\n @index8~dyn^@index8\n )~bool^logical_or,\n @index4~dyn^@index4.child~dyn,\n @index10~dyn^@index10.child~dyn,\n @index11~dyn^@index11.payload~dyn,\n @index12~dyn^@index12.single_bool~dyn\n ]~list(dyn),\n _||_(\n @index9~dyn^@index9,\n @index13~dyn^@index13\n )~bool^logical_or\n)~bool^cel_block_list", - type: "bool", - }, - { - original: { - name: "select_nested_message_map_index_1", - expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[1], cel.index(3) + cel.index(3), cel.index(4) + cel.index(3)], cel.index(5))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "15" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_int32_int64^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_int32_int64~dyn,\n _[_](\n @index2~dyn^@index2,\n 1~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index3~dyn^@index3,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "select_nested_message_map_index_2", - expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[0], cel.index(2)[1], cel.index(3) + cel.index(4), cel.index(2)[2], cel.index(5) + cel.index(6)], cel.index(7))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "8" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_int32_int64^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_int32_int64~dyn,\n _[_](\n @index2~dyn^@index2,\n 0~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _[_](\n @index2~dyn^@index2,\n 1~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index3~dyn^@index3,\n @index4~dyn^@index4\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _[_](\n @index2~dyn^@index2,\n 2~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index7~dyn^@index7\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "ternary", - expr: "cel.block([msg.single_int64, cel.index(0) \u003e 0, cel.index(1) ? cel.index(0) : 0], cel.index(2))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "3" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _\u003e_(\n @index0~dyn^@index0,\n 0~int\n )~bool^greater_int64,\n _?_:_(\n @index1~dyn^@index1,\n @index0~dyn^@index0,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index2~dyn^@index2\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "nested_ternary", - expr: "cel.block([msg.single_int64, msg.single_int32, cel.index(0) \u003e 0, cel.index(1) \u003e 0, cel.index(0) + cel.index(1), cel.index(3) ? cel.index(4) : 0, cel.index(2) ? cel.index(5) : 0], cel.index(6))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "8" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int32~int,\n _\u003e_(\n @index0~dyn^@index0,\n 0~int\n )~bool^greater_int64,\n _\u003e_(\n @index1~dyn^@index1,\n 0~int\n )~bool^greater_int64,\n _+_(\n @index0~dyn^@index0,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _?_:_(\n @index3~dyn^@index3,\n @index4~dyn^@index4,\n 0~int\n )~dyn^conditional,\n _?_:_(\n @index2~dyn^@index2,\n @index5~dyn^@index5,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index6~dyn^@index6\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "multiple_macros_1", - expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))", - value: { int64Value: "4" }, - }, - error: - "ERROR: multiple_macros_1:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .................................^\nERROR: multiple_macros_1:1:110: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .............................................................................................................^", - }, - { - original: { - name: "multiple_macros_2", - expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))", - value: { - listValue: { - values: [ - { boolValue: true }, - { boolValue: true }, - { boolValue: true }, - { boolValue: true }, - ], - }, - }, - }, - error: - "ERROR: multiple_macros_2:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .................................^\nERROR: multiple_macros_2:1:106: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .........................................................................................................^", - }, - { - original: { - name: "multiple_macros_3", - expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))", - value: { boolValue: false }, - }, - error: - "ERROR: multiple_macros_3:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | .................................^\nERROR: multiple_macros_3:1:121: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | ........................................................................................................................^\nERROR: multiple_macros_3:1:177: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | ................................................................................................................................................................................^", - }, - { - original: { - name: "nested_macros_1", - expr: "cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))", - value: { - listValue: { - values: [ - { - listValue: { - values: [ - { int64Value: "2" }, - { int64Value: "3" }, - { int64Value: "4" }, - ], - }, - }, - { - listValue: { - values: [ - { int64Value: "2" }, - { int64Value: "3" }, - { int64Value: "4" }, - ], - }, - }, - { - listValue: { - values: [ - { int64Value: "2" }, - { int64Value: "3" }, - { int64Value: "4" }, - ], - }, - }, - ], - }, - }, - }, - error: - "ERROR: nested_macros_1:1:52: argument is not an identifier\n | cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))\n | ...................................................^\nERROR: nested_macros_1:1:88: argument is not an identifier\n | cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))\n | .......................................................................................^", - }, - { - original: { - name: "nested_macros_2", - expr: "[1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))", - value: { - listValue: { - values: [ - { listValue: { values: [{ int64Value: "1" }] } }, - { listValue: { values: [{ int64Value: "2" }] } }, - ], - }, - }, - }, - error: - "ERROR: nested_macros_2:1:23: argument is not an identifier\n | [1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))\n | ......................^\nERROR: nested_macros_2:1:59: argument is not an identifier\n | [1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))\n | ..........................................................^", - }, - { - original: { - name: "adjacent_macros", - expr: "cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))", - value: { boolValue: true }, - }, - error: - "ERROR: adjacent_macros:1:51: argument is not an identifier\n | cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))\n | ..................................................^\nERROR: adjacent_macros:1:87: argument is not an identifier\n | cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))\n | ......................................................................................^", - }, - { - original: { - name: "macro_shadowed_variable_1", - expr: "cel.block([x - 1, cel.index(0) \u003e 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 \u003e 3) || cel.index(1))", - typeEnv: [ - { name: "x", ident: { type: { primitive: "INT64" } } }, - ], - bindings: { x: { value: { int64Value: "5" } } }, - value: { boolValue: true }, - }, - error: - "ERROR: macro_shadowed_variable_1:1:90: argument must be a simple name\n | cel.block([x - 1, cel.index(0) \u003e 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 \u003e 3) || cel.index(1))\n | .........................................................................................^", - }, - { - original: { - name: "macro_shadowed_variable_2", - expr: "['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])", - typeEnv: [ - { name: "x", ident: { type: { primitive: "INT64" } } }, - ], - bindings: { x: { value: { int64Value: "5" } } }, - value: { - listValue: { - values: [ - { - listValue: { - values: [ - { - listValue: { - values: [ - { stringValue: "foofoo" }, - { stringValue: "foofoo" }, - { stringValue: "foofoo" }, - { stringValue: "foofoo" }, - ], - }, - }, - { - listValue: { - values: [ - { stringValue: "foofoo" }, - { stringValue: "foofoo" }, - { stringValue: "foofoo" }, - { stringValue: "foofoo" }, - ], - }, - }, - ], - }, - }, - { - listValue: { - values: [ - { - listValue: { - values: [ - { stringValue: "barbar" }, - { stringValue: "barbar" }, - { stringValue: "barbar" }, - { stringValue: "barbar" }, - ], - }, - }, - { - listValue: { - values: [ - { stringValue: "barbar" }, - { stringValue: "barbar" }, - { stringValue: "barbar" }, - { stringValue: "barbar" }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - }, - error: - "ERROR: macro_shadowed_variable_2:1:31: argument is not an identifier\n | ['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])\n | ..............................^\nERROR: macro_shadowed_variable_2:1:134: argument is not an identifier\n | ['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])\n | .....................................................................................................................................^", - }, - { - original: { - name: "inclusion_list", - expr: "cel.block([[1, 2, 3], 1 in cel.index(0), 2 in cel.index(0), cel.index(1) \u0026\u0026 cel.index(2), [3, cel.index(0)], 3 in cel.index(4), cel.index(5) \u0026\u0026 cel.index(1)], cel.index(3) \u0026\u0026 cel.index(6))", - value: { boolValue: true }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 1^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 3^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n @in(\n 1~int,\n @index0~dyn^@index0\n )~bool^in_list|in_map,\n @in(\n 2~int,\n @index0~dyn^@index0\n )~bool^in_list|in_map,\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~bool^logical_and,\n [\n 3~int,\n @index0~dyn^@index0\n ]~list(dyn),\n @in(\n 3~int,\n @index4~dyn^@index4\n )~bool^in_list|in_map,\n _\u0026\u0026_(\n @index5~dyn^@index5,\n @index1~dyn^@index1\n )~bool^logical_and\n ]~list(dyn),\n _\u0026\u0026_(\n @index3~dyn^@index3,\n @index6~dyn^@index6\n )~bool^logical_and\n)~bool^cel_block_list", - type: "bool", - }, - { - original: { - name: "inclusion_map", - expr: 'cel.block([{true: false}, {"a": 1, 2: cel.index(0), 3: cel.index(0)}], 2 in cel.index(1))', - value: { boolValue: true }, - }, - ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n true^#*expr.Constant_BoolValue#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'cel.@block(\n [\n {\n true~bool:false~bool\n }~map(bool, bool),\n {\n "a"~string:1~int,\n 2~int:@index0~dyn^@index0,\n 3~int:@index0~dyn^@index0\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn)),\n @in(\n 2~int,\n @index1~dyn^@index1\n )~bool^in_list|in_map\n)~bool^cel_block_list', - type: "bool", - }, - { - original: { - name: "presence_test", - expr: 'cel.block([{"a": true}, has(cel.index(0).a), cel.index(0)["a"]], cel.index(1) \u0026\u0026 cel.index(2))', - value: { boolValue: true }, - }, - ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n "a"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.a~test-only~^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "a"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'cel.@block(\n [\n {\n "a"~string:true~bool\n }~map(string, bool),\n @index0~dyn^@index0.a~test-only~~bool,\n _[_](\n @index0~dyn^@index0,\n "a"~string\n )~dyn^index_map|optional_map_index_value\n ]~list(dyn),\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~bool^logical_and\n)~bool^cel_block_list', - type: "bool", - }, - { - original: { - name: "presence_test_2", - expr: 'cel.block([{"a": true}, has(cel.index(0).a)], cel.index(1) \u0026\u0026 cel.index(1))', - value: { boolValue: true }, - }, - ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n "a"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.a~test-only~^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'cel.@block(\n [\n {\n "a"~string:true~bool\n }~map(string, bool),\n @index0~dyn^@index0.a~test-only~~bool\n ]~list(dyn),\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~bool^logical_and\n)~bool^cel_block_list', - type: "bool", - }, - { - original: { - name: "presence_test_with_ternary", - expr: "cel.block([msg.oneof_type, has(cel.index(0).payload), cel.index(0).payload, cel.index(2).single_int64, cel.index(1) ? cel.index(3) : 0], cel.index(4))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "10" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~test-only~~bool,\n @index0~dyn^@index0.payload~dyn,\n @index2~dyn^@index2.single_int64~dyn,\n _?_:_(\n @index1~dyn^@index1,\n @index3~dyn^@index3,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index4~dyn^@index4\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "presence_test_with_ternary_2", - expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(0).payload), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "10" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index0~dyn^@index0.payload~test-only~~bool,\n _*_(\n @index2~dyn^@index2,\n 0~int\n )~int^multiply_int64,\n _?_:_(\n @index3~dyn^@index3,\n @index2~dyn^@index2,\n @index4~dyn^@index4\n )~dyn^conditional\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "presence_test_with_ternary_3", - expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(1).single_int64), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { int64Value: "10" }, - }, - ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64~test-only~^#*expr.Expr_SelectExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index1~dyn^@index1.single_int64~test-only~~bool,\n _*_(\n @index2~dyn^@index2,\n 0~int\n )~int^multiply_int64,\n _?_:_(\n @index3~dyn^@index3,\n @index2~dyn^@index2,\n @index4~dyn^@index4\n )~dyn^conditional\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list", - type: "dyn", - }, - { - original: { - name: "presence_test_with_ternary_nested", - expr: 'cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_string_string, has(msg.oneof_type), has(cel.index(0).payload), cel.index(3) \u0026\u0026 cel.index(4), has(cel.index(1).single_int64), cel.index(5) \u0026\u0026 cel.index(6), has(cel.index(1).map_string_string), has(cel.index(2).key), cel.index(8) \u0026\u0026 cel.index(9), cel.index(2).key, cel.index(11) == "A", cel.index(10) ? cel.index(12) : false], cel.index(7) ? cel.index(13) : false)', - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 5, - singleInt64: "3", - oneofType: { - payload: { - singleInt32: 8, - singleInt64: "10", - mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, - mapStringString: { key: "A" }, - }, - }, - }, - }, - }, - }, - value: { boolValue: true }, - }, - ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_string_string^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.oneof_type~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.key~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.key^#*expr.Expr_SelectExpr#,\n _==_(\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "A"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_string_string~dyn,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~test-only~~bool,\n @index0~dyn^@index0.payload~test-only~~bool,\n _\u0026\u0026_(\n @index3~dyn^@index3,\n @index4~dyn^@index4\n )~bool^logical_and,\n @index1~dyn^@index1.single_int64~test-only~~bool,\n _\u0026\u0026_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~bool^logical_and,\n @index1~dyn^@index1.map_string_string~test-only~~bool,\n @index2~dyn^@index2.key~test-only~~bool,\n _\u0026\u0026_(\n @index8~dyn^@index8,\n @index9~dyn^@index9\n )~bool^logical_and,\n @index2~dyn^@index2.key~dyn,\n _==_(\n @index11~dyn^@index11,\n "A"~string\n )~bool^equals,\n _?_:_(\n @index10~dyn^@index10,\n @index12~dyn^@index12,\n false~bool\n )~dyn^conditional\n ]~list(dyn),\n _?_:_(\n @index7~dyn^@index7,\n @index13~dyn^@index13,\n false~bool\n )~dyn^conditional\n)~dyn^cel_block_list', - type: "dyn", - }, - { - original: { - name: "optional_list", - expr: "cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))", - typeEnv: [ - { name: "opt_x", ident: { type: { primitive: "INT64" } } }, - ], - bindings: { opt_x: { value: { int64Value: "5" } } }, - value: { boolValue: true }, - }, - error: - "ERROR: optional_list:1:30: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | .............................^\nERROR: optional_list:1:45: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | ............................................^\nERROR: optional_list:1:77: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | ............................................................................^", - }, - { - original: { - name: "optional_map", - expr: 'cel.block([optional.of("hello"), {?"hello": cel.index(0)}, cel.index(1)["hello"], cel.index(2) + cel.index(2)], cel.index(3) == "hellohello")', - value: { boolValue: true }, - }, - error: - 'ERROR: optional_map:1:35: unsupported syntax \'?\'\n | cel.block([optional.of("hello"), {?"hello": cel.index(0)}, cel.index(1)["hello"], cel.index(2) + cel.index(2)], cel.index(3) == "hellohello")\n | ..................................^', - }, - { - original: { - name: "optional_map_chained", - expr: 'cel.block([{"key": "test"}, optional.of("test"), {?"key": cel.index(1)}, cel.index(2)[?"bogus"], cel.index(0)[?"bogus"], cel.index(3).or(cel.index(4)), cel.index(0)["key"], cel.index(5).orValue(cel.index(6))], cel.index(7))', - value: { stringValue: "test" }, - }, - error: - 'ERROR: optional_map_chained:1:51: unsupported syntax \'?\'\n | cel.block([{"key": "test"}, optional.of("test"), {?"key": cel.index(1)}, cel.index(2)[?"bogus"], cel.index(0)[?"bogus"], cel.index(3).or(cel.index(4)), cel.index(0)["key"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | ..................................................^\nERROR: optional_map_chained:1:86: unsupported syntax \'[?\'\n | cel.block([{"key": "test"}, optional.of("test"), {?"key": cel.index(1)}, cel.index(2)[?"bogus"], cel.index(0)[?"bogus"], cel.index(3).or(cel.index(4)), cel.index(0)["key"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | .....................................................................................^\nERROR: optional_map_chained:1:110: unsupported syntax \'[?\'\n | cel.block([{"key": "test"}, optional.of("test"), {?"key": cel.index(1)}, cel.index(2)[?"bogus"], cel.index(0)[?"bogus"], cel.index(3).or(cel.index(4)), cel.index(0)["key"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | .............................................................................................................^', - }, - { - original: { - name: "optional_message", - expr: "cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))", - container: "cel.expr.conformance.proto3", - value: { int64Value: "5" }, - }, - error: - "ERROR: optional_message:1:69: unsupported syntax '?'\n | cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))\n | ....................................................................^\nERROR: optional_message:1:98: unsupported syntax '?'\n | cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))\n | .................................................................................................^", - }, - { - original: { - name: "call", - expr: 'cel.block(["h" + "e", cel.index(0) + "l", cel.index(1) + "l", cel.index(2) + "o", cel.index(3) + " world"], cel.index(4).matches(cel.index(3)))', - value: { boolValue: true }, - }, - ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n _+_(\n "h"^#*expr.Constant_StringValue#,\n "e"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "l"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "l"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "o"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n " world"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.matches(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'cel.@block(\n [\n _+_(\n "h"~string,\n "e"~string\n )~string^add_string,\n _+_(\n @index0~dyn^@index0,\n "l"~string\n )~string^add_string,\n _+_(\n @index1~dyn^@index1,\n "l"~string\n )~string^add_string,\n _+_(\n @index2~dyn^@index2,\n "o"~string\n )~string^add_string,\n _+_(\n @index3~dyn^@index3,\n " world"~string\n )~string^add_string\n ]~list(string),\n @index4~dyn^@index4.matches(\n @index3~dyn^@index3\n )~bool^matches_string\n)~bool^cel_block_list', - type: "bool", - }, - ], - }, - ], - }, - { - name: "comparisons", - suites: [ - { - name: "eq_literal", - tests: [ - { - original: { - name: "eq_int", - expr: "1 == 1", - value: { boolValue: true }, - }, - ast: "_==_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n 1~int,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_int", - expr: "-1 == 1", - value: { boolValue: false }, - }, - ast: "_==_(\n -1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n -1~int,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int_uint", - expr: "dyn(1) == 1u", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_int_uint", - expr: "dyn(2) == 1u", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int_double", - expr: "dyn(1) == 1.0", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_int_double", - expr: "dyn(2) == 1.0", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint", - expr: "2u == 2u", - value: { boolValue: true }, - }, - ast: "_==_(\n 2u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n 2u~uint,\n 2u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_uint", - expr: "1u == 2u", - value: { boolValue: false }, - }, - ast: "_==_(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n 1u~uint,\n 2u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint_int", - expr: "dyn(1u) == 1", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_uint_int", - expr: "dyn(2u) == 1", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint_double", - expr: "dyn(1u) == 1.0", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_uint_double", - expr: "dyn(2u) == 1.0", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_double", - expr: "1.0 == 1.0e+0", - value: { boolValue: true }, - }, - ast: "_==_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n 1~double,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_double", - expr: "-1.0 == 1.0", - value: { boolValue: false }, - }, - ast: "_==_(\n -1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n -1~double,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_double_nan", - expr: "0.0/0.0 == 0.0/0.0", - value: { boolValue: false }, - }, - ast: "_==_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_int_double_nan", - expr: "dyn(1) == 0.0/0.0", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_uint_double_nan", - expr: "dyn(1u) == 0.0/0.0", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_double_int", - expr: "dyn(1.0) == 1", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_double_int", - expr: "dyn(2.0) == 1", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_double_uint", - expr: "dyn(1.0) == 1u", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_double_uint", - expr: "dyn(2.0) == 1u", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_string", - expr: "'' == \"\"", - value: { boolValue: true }, - }, - ast: '_==_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: '_==_(\n ""~string,\n ""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_string", - expr: "'a' == 'b'", - value: { boolValue: false }, - }, - ast: '_==_(\n "a"^#*expr.Constant_StringValue#,\n "b"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: '_==_(\n "a"~string,\n "b"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_raw_string", - expr: "'abc' == r'abc'", - value: { boolValue: true }, - }, - ast: '_==_(\n "abc"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "abc"~string,\n "abc"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_string_case", - expr: "'abc' == 'ABC'", - value: { boolValue: false }, - }, - ast: '_==_(\n "abc"^#*expr.Constant_StringValue#,\n "ABC"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "abc"~string,\n "ABC"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_string_unicode", - expr: "'ίσος' == 'ίσος'", - value: { boolValue: true }, - }, - ast: '_==_(\n "ίσος"^#*expr.Constant_StringValue#,\n "ίσος"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ίσος"~string,\n "ίσος"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_string_unicode_ascii", - expr: "'a' == 'à'", - value: { boolValue: false }, - }, - ast: '_==_(\n "a"^#*expr.Constant_StringValue#,\n "à"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: '_==_(\n "a"~string,\n "à"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "no_string_normalization", - description: "Should not normalize Unicode.", - expr: "'Am\\u00E9lie' == 'Ame\\u0301lie'", - value: { boolValue: false }, - }, - ast: '_==_(\n "Amélie"^#*expr.Constant_StringValue#,\n "Amélie"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "Amélie"~string,\n "Amélie"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_null", - expr: "null == null", - value: { boolValue: true }, - }, - ast: "_==_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n null~null,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_bool", - expr: "true == true", - value: { boolValue: true }, - }, - ast: "_==_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n true~bool,\n true~bool\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_bool", - expr: "false == true", - value: { boolValue: false }, - }, - ast: "_==_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n false~bool,\n true~bool\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_bytes", - description: "Test bytes literal equality with encoding", - expr: "b'ÿ' == b'\\303\\277'", - value: { boolValue: true }, - }, - ast: '_==_(\n b"ÿ"^#*expr.Constant_BytesValue#,\n b"ÿ"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: '_==_(\n b"ÿ"~bytes,\n b"ÿ"~bytes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_bytes", - expr: "b'abc' == b'abcd'", - value: { boolValue: false }, - }, - ast: '_==_(\n b"abc"^#*expr.Constant_BytesValue#,\n b"abcd"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n b"abc"~bytes,\n b"abcd"~bytes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_list_empty", - expr: "[] == []", - value: { boolValue: true }, - }, - ast: "_==_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n []~list(dyn),\n []~list(dyn)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_list_null", - expr: "[null] == [null]", - value: { boolValue: true }, - }, - ast: "_==_(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n [\n null~null\n ]~list(null),\n [\n null~null\n ]~list(null)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_list_null", - expr: "['1', '2', null] == ['1', '2', '3']", - value: { boolValue: false }, - }, - ast: '_==_(\n [\n "1"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n "1"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#,\n "3"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n [\n "1"~string,\n "2"~string,\n null~null\n ]~list(dyn),\n [\n "1"~string,\n "2"~string,\n "3"~string\n ]~list(string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_list_numbers", - expr: "[1, 2, 3] == [1, 2, 3]", - value: { boolValue: true }, - }, - ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_list_mixed_type_numbers", - expr: "[1.0, 2.0, 3] == [1u, 2, 3u]", - value: { boolValue: true }, - }, - ast: "_==_(\n [\n 1^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n [\n 1~double,\n 2~double,\n 3~int\n ]~list(dyn),\n [\n 1u~uint,\n 2~int,\n 3u~uint\n ]~list(dyn)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_list_mixed_type_numbers", - expr: "[1.0, 2.1] == [1u, 2]", - value: { boolValue: false }, - }, - ast: "_==_(\n [\n 1^#*expr.Constant_DoubleValue#,\n 2.1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n [\n 1~double,\n 2.1~double\n ]~list(double),\n [\n 1u~uint,\n 2~int\n ]~list(dyn)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_list_order", - expr: "[1, 2, 3] == [1, 3, 2]", - value: { boolValue: false }, - }, - ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n [\n 1~int,\n 3~int,\n 2~int\n ]~list(int)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_list_string_case", - expr: "['case'] == ['cAse']", - value: { boolValue: false }, - }, - ast: '_==_(\n [\n "case"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n "cAse"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n [\n "case"~string\n ]~list(string),\n [\n "cAse"~string\n ]~list(string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_list_length", - expr: "['one'] == [2, 3]", - disableCheck: true, - value: { boolValue: false }, - }, - ast: '_==_(\n [\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_==_' applied to '(list(string), list(int))'\n | ['one'] == [2, 3]\n | ........^", - }, - { - original: { - name: "not_eq_list_false_vs_types", - expr: "[1, 'dos', 3] == [1, 2, 4]", - value: { boolValue: false }, - }, - ast: '_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n "dos"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n [\n 1~int,\n "dos"~string,\n 3~int\n ]~list(dyn),\n [\n 1~int,\n 2~int,\n 4~int\n ]~list(int)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_map_empty", - expr: "{} == {}", - value: { boolValue: true }, - }, - ast: "_==_(\n {}^#*expr.Expr_StructExpr#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n {}~map(dyn, dyn),\n {}~map(dyn, dyn)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_map_null", - expr: "{'k': null} == {'k': null}", - value: { boolValue: true }, - }, - ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k"~string:null~null\n }~map(string, null),\n {\n "k"~string:null~null\n }~map(string, null)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_map_null", - expr: "{'k': 1, 'j': 2} == {'k': 1, 'j': null}", - value: { boolValue: false }, - }, - ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "j"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "j"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k"~string:1~int,\n "j"~string:2~int\n }~map(string, int),\n {\n "k"~string:1~int,\n "j"~string:null~null\n }~map(string, dyn)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_map_onekey", - expr: "{'k':'v'} == {\"k\":\"v\"}", - value: { boolValue: true }, - }, - ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k"~string:"v"~string\n }~map(string, string),\n {\n "k"~string:"v"~string\n }~map(string, string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_map_double_value", - expr: "{'k':1.0} == {'k':1e+0}", - value: { boolValue: true }, - }, - ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k"~string:1~double\n }~map(string, double),\n {\n "k"~string:1~double\n }~map(string, double)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_map_mixed_type_numbers", - expr: "{1: 1.0, 2u: 3u} == {1u: 1, 2: 3.0}", - value: { boolValue: true }, - }, - ast: "_==_(\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n {\n 1~int:1~double,\n 2u~uint:3u~uint\n }~map(dyn, dyn),\n {\n 1u~uint:1~int,\n 2~int:3~double\n }~map(dyn, dyn)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_map_value", - expr: "{'k':'v'} == {'k':'v1'}", - value: { boolValue: false }, - }, - ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k"~string:"v"~string\n }~map(string, string),\n {\n "k"~string:"v1"~string\n }~map(string, string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_map_extra_key", - expr: "{'k':'v','k1':'v1'} == {'k':'v'}", - value: { boolValue: false }, - }, - ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k1"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k"~string:"v"~string,\n "k1"~string:"v1"~string\n }~map(string, string),\n {\n "k"~string:"v"~string\n }~map(string, string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_map_key_order", - expr: "{'k1':'v1','k2':'v2'} == {'k2':'v2','k1':'v1'}", - value: { boolValue: true }, - }, - ast: '_==_(\n {\n "k1"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k2"^#*expr.Constant_StringValue#:"v2"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k2"^#*expr.Constant_StringValue#:"v2"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k1"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k1"~string:"v1"~string,\n "k2"~string:"v2"~string\n }~map(string, string),\n {\n "k2"~string:"v2"~string,\n "k1"~string:"v1"~string\n }~map(string, string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_map_key_casing", - expr: "{'key':'value'} == {'Key':'value'}", - value: { boolValue: false }, - }, - ast: '_==_(\n {\n "key"^#*expr.Constant_StringValue#:"value"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "Key"^#*expr.Constant_StringValue#:"value"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "key"~string:"value"~string\n }~map(string, string),\n {\n "Key"~string:"value"~string\n }~map(string, string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_map_false_vs_types", - expr: "{'k1': 1, 'k2': 'dos', 'k3': 3} == {'k1': 1, 'k2': 2, 'k3': 4}", - value: { boolValue: false }, - }, - ast: '_==_(\n {\n "k1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "k2"^#*expr.Constant_StringValue#:"dos"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k3"^#*expr.Constant_StringValue#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "k2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "k3"^#*expr.Constant_StringValue#:4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k1"~string:1~int,\n "k2"~string:"dos"~string,\n "k3"~string:3~int\n }~map(string, dyn),\n {\n "k1"~string:1~int,\n "k2"~string:2~int,\n "k3"~string:4~int\n }~map(string, int)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_mixed_types", - expr: "1.0 == 1", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_==_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_==_' applied to '(double, int)'\n | 1.0 == 1\n | ....^", - }, - { - original: { - name: "eq_list_elem_mixed_types", - expr: "[1] == [1.0]", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_==_' applied to '(list(int), list(double))'\n | [1] == [1.0]\n | ....^", - }, - { - original: { - name: "eq_map_value_mixed_types", - expr: "{'k':'v', 1:1} == {'k':'v', 1:'v1'}", - value: { boolValue: false }, - }, - ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n "k"~string:"v"~string,\n 1~int:1~int\n }~map(dyn, dyn),\n {\n "k"~string:"v"~string,\n 1~int:"v1"~string\n }~map(dyn, string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_dyn_json_null", - expr: "dyn(google.protobuf.Value{}) == null", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n google.protobuf.Value{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n google.protobuf.Value{}~dyn^google.protobuf.Value\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_bool_null", - expr: "dyn(false) == null", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n false~bool\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_bytes_null", - expr: "dyn(b'') == null", - value: { boolValue: false }, - }, - ast: '_==_(\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n dyn(\n b""~bytes\n )~dyn^to_dyn,\n null~null\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_dyn_double_null", - expr: "dyn(2.1) == null", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 2.1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 2.1~double\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_duration_null", - expr: "dyn(duration('0s')) == null", - value: { boolValue: false }, - }, - ast: '_==_(\n dyn(\n duration(\n "0s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n dyn(\n duration(\n "0s"~string\n )~duration^string_to_duration\n )~dyn^to_dyn,\n null~null\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_dyn_int_null", - expr: "dyn(1) == null", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_list_null", - expr: "dyn([]) == null", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n []~list(dyn)\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_map_null", - expr: "dyn({}) == null", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n {}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n {}~map(dyn, dyn)\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_proto2_msg_null", - expr: "dyn(TestAllTypes{}) == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_proto3_msg_null", - expr: "dyn(TestAllTypes{}) == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_string_null", - expr: "dyn('') == null", - value: { boolValue: false }, - }, - ast: '_==_(\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n dyn(\n ""~string\n )~dyn^to_dyn,\n null~null\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "not_eq_dyn_timestamp_null", - expr: "dyn(timestamp(0)) == null", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n timestamp(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n timestamp(\n 0~int\n )~timestamp^int64_to_timestamp\n )~dyn^to_dyn,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_list_elem_null", - expr: "[1, 2, null] == [1, null, 3]", - value: { boolValue: false }, - }, - ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n null^#*expr.Constant_NullValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n [\n 1~int,\n 2~int,\n null~null\n ]~list(dyn),\n [\n 1~int,\n null~null,\n 3~int\n ]~list(dyn)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_map_value_null", - expr: "{1:'hello', 2:'world'} == {1:'goodbye', 2:null}", - value: { boolValue: false }, - }, - ast: '_==_(\n {\n 1^#*expr.Constant_Int64Value#:"hello"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:"world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n {\n 1~int:"hello"~string,\n 2~int:"world"~string\n }~map(int, string),\n {\n 1~int:"goodbye"~string,\n 2~int:null~null\n }~map(int, dyn)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_dyn_int_uint", - expr: "dyn(1) == 1u", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_dyn_int_double", - expr: "dyn(1) == 1.0", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_dyn_uint_int", - expr: "dyn(1u) == 1", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_dyn_uint_double", - expr: "dyn(1u) == 1.0", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_dyn_double_int", - expr: "dyn(1.0) == 1", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_dyn_double_uint", - expr: "dyn(1.0) == 1u", - value: { boolValue: true }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_int_uint", - expr: "dyn(1) == 2u", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_int_double", - expr: "dyn(1) == 2.0", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_uint_int", - expr: "dyn(1u) == 2", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_uint_double", - expr: "dyn(1u) == 120", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 120^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 120~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_double_int", - expr: "dyn(1.0) == 2", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_eq_dyn_double_uint", - expr: "dyn(1.0) == 2u", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "eq_wrapper", - tests: [ - { - original: { - name: "eq_bool", - expr: "google.protobuf.BoolValue{value: true} == true", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue,\n true~bool\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_bool_empty", - expr: "google.protobuf.BoolValue{} == false", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue,\n false~bool\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_bool_not_null", - expr: "google.protobuf.BoolValue{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_bool_proto2_null", - expr: "TestAllTypes{}.single_bool_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bool_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_bool_wrapper~wrapper(bool),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_bool_proto3_null", - expr: "TestAllTypes{}.single_bool_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bool_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_bool_wrapper~wrapper(bool),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_bytes", - expr: "google.protobuf.BytesValue{value: b'set'} == b'set'", - value: { boolValue: true }, - }, - ast: '_==_(\n google.protobuf.BytesValue{\n value:b"set"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n b"set"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n google.protobuf.BytesValue{\n value:b"set"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue,\n b"set"~bytes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_bytes_empty", - expr: "google.protobuf.BytesValue{} == b''", - value: { boolValue: true }, - }, - ast: '_==_(\n google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue,\n b""~bytes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_bytes_not_null", - expr: "google.protobuf.BytesValue{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_bytes_proto2_null", - expr: "TestAllTypes{}.single_bytes_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bytes_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_bytes_wrapper~wrapper(bytes),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_bytes_proto3_null", - expr: "TestAllTypes{}.single_bytes_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bytes_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_bytes_wrapper~wrapper(bytes),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_double", - expr: "google.protobuf.DoubleValue{value: -1.175494e-40} == -1.175494e-40", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.DoubleValue{\n value:-1.175494e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n -1.175494e-40^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.DoubleValue{\n value:-1.175494e-40~double\n }~wrapper(double)^google.protobuf.DoubleValue,\n -1.175494e-40~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_double_empty", - expr: "google.protobuf.DoubleValue{} == 0.0", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue,\n 0~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_double_not_null", - expr: "google.protobuf.DoubleValue{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_double_proto2_null", - expr: "TestAllTypes{}.single_double_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_double_proto3_null", - expr: "TestAllTypes{}.single_double_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_float", - expr: "google.protobuf.FloatValue{value: -1.5} == -1.5", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.FloatValue{\n value:-1.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.FloatValue{\n value:-1.5~double\n }~wrapper(double)^google.protobuf.FloatValue,\n -1.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_float_empty", - expr: "google.protobuf.FloatValue{} == 0.0", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue,\n 0~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_float_not_null", - expr: "google.protobuf.FloatValue{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_float_proto2_null", - expr: "TestAllTypes{}.single_float_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_float_proto3_null", - expr: "TestAllTypes{}.single_float_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int32", - expr: "google.protobuf.Int32Value{value: 123} == 123", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.Int32Value{\n value:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.Int32Value{\n value:123~int\n }~wrapper(int)^google.protobuf.Int32Value,\n 123~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int32_empty", - expr: "google.protobuf.Int32Value{} == 0", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value,\n 0~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int32_not_null", - expr: "google.protobuf.Int32Value{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_int32_proto2_null", - expr: "TestAllTypes{}.single_int32_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int32_proto3_null", - expr: "TestAllTypes{}.single_int32_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int64", - expr: "google.protobuf.Int64Value{value: 2147483650} == 2147483650", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.Int64Value{\n value:2147483650^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2147483650^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.Int64Value{\n value:2147483650~int\n }~wrapper(int)^google.protobuf.Int64Value,\n 2147483650~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int64_empty", - expr: "google.protobuf.Int64Value{} == 0", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value,\n 0~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int64_not_null", - expr: "google.protobuf.Int64Value{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_int64_proto2_null", - expr: "TestAllTypes{}.single_int64_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_int64_proto3_null", - expr: "TestAllTypes{}.single_int64_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_string", - expr: "google.protobuf.StringValue{value: 'set'} == 'set'", - value: { boolValue: true }, - }, - ast: '_==_(\n google.protobuf.StringValue{\n value:"set"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "set"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n google.protobuf.StringValue{\n value:"set"~string\n }~wrapper(string)^google.protobuf.StringValue,\n "set"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_string_empty", - expr: "google.protobuf.StringValue{} == ''", - value: { boolValue: true }, - }, - ast: '_==_(\n google.protobuf.StringValue{}^#*expr.Expr_StructExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue,\n ""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_string_not_null", - expr: "google.protobuf.StringValue{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.StringValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_string_proto2_null", - expr: "TestAllTypes{}.single_string_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_string_wrapper~wrapper(string),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_string_proto3_null", - expr: "TestAllTypes{}.single_string_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_string_wrapper~wrapper(string),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint32", - expr: "google.protobuf.UInt32Value{value: 42u} == 42u", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.UInt32Value{\n value:42u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.UInt32Value{\n value:42u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n 42u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint32_empty", - expr: "google.protobuf.UInt32Value{} == 0u", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value,\n 0u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint32_not_null", - expr: "google.protobuf.UInt32Value{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_uint32_proto2_null", - expr: "TestAllTypes{}.single_uint32_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint32_proto3_null", - expr: "TestAllTypes{}.single_uint32_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_uint32_wrapper~wrapper(uint),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint64", - expr: "google.protobuf.UInt64Value{value: 4294967296u} == 4294967296u", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.UInt64Value{\n value:4294967296u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 4294967296u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.UInt64Value{\n value:4294967296u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value,\n 4294967296u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint64_empty", - expr: "google.protobuf.UInt64Value{} == 0u", - value: { boolValue: true }, - }, - ast: "_==_(\n google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value,\n 0u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint64_not_null", - expr: "google.protobuf.UInt64Value{} != null", - value: { boolValue: true }, - }, - ast: "_!=_(\n google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "eq_uint64_proto2_null", - expr: "TestAllTypes{}.single_uint64_wrapper == null", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_uint64_proto3_null", - expr: "TestAllTypes{}.single_uint64_wrapper == null", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_uint64_wrapper~wrapper(uint),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_proto2", - expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: '_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto3", - expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: '_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto2_missing_fields_neq", - expr: "TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: '_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto3_missing_fields_neq", - expr: "TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: '_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto_nan_equal", - description: - "For proto equality, fields with NaN value are treated as not equal.", - expr: "TestAllTypes{single_double: double('NaN')} == TestAllTypes{single_double: double('NaN')}", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: '_==_(\n TestAllTypes{\n single_double:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_double:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n "NaN"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n "NaN"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto_different_types", - description: - "At runtime, differently typed messages are treated as not equal.", - expr: "dyn(TestAllTypes{}) == dyn(NestedTestAllTypes{})", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n NestedTestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n dyn(\n cel.expr.conformance.proto2.NestedTestAllTypes{}~cel.expr.conformance.proto2.NestedTestAllTypes^cel.expr.conformance.proto2.NestedTestAllTypes\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "eq_proto2_any_unpack_equal", - description: "Any values should be unpacked and compared.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto2_any_unpack_not_equal", - description: "Any values should be unpacked and compared.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto2_any_unpack_bytewise_fallback_not_equal", - description: - "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto2_any_unpack_bytewise_fallback_equal", - description: - "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto3_any_unpack_equal", - description: "Any values should be unpacked and compared.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto3_any_unpack_not_equal", - description: "Any values should be unpacked and compared.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto3_any_unpack_bytewise_fallback_not_equal", - description: - "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_proto3_any_unpack_bytewise_fallback_equal", - description: - "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "ne_literal", - tests: [ - { - original: { - name: "ne_int", - expr: "24 != 42", - value: { boolValue: true }, - }, - ast: "_!=_(\n 24^#*expr.Constant_Int64Value#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_!=_(\n 24~int,\n 42~int\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_int", - expr: "1 != 1", - value: { boolValue: false }, - }, - ast: "_!=_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_!=_(\n 1~int,\n 1~int\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_int_double", - expr: "dyn(24) != 24.1", - value: { boolValue: true }, - }, - ast: "_!=_(\n dyn(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 24.1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 24~int\n )~dyn^to_dyn,\n 24.1~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_int_double", - expr: "dyn(1) != 1.0", - value: { boolValue: false }, - }, - ast: "_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_int_uint", - expr: "dyn(24) != 42u", - value: { boolValue: true }, - }, - ast: "_!=_(\n dyn(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 24~int\n )~dyn^to_dyn,\n 42u~uint\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_int_uint", - expr: "dyn(1) != 1u", - value: { boolValue: false }, - }, - ast: "_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_uint", - expr: "1u != 2u", - value: { boolValue: true }, - }, - ast: "_!=_(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_!=_(\n 1u~uint,\n 2u~uint\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_uint", - expr: "99u != 99u", - value: { boolValue: false }, - }, - ast: "_!=_(\n 99u^#*expr.Constant_Uint64Value#,\n 99u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_!=_(\n 99u~uint,\n 99u~uint\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_uint_double", - expr: "dyn(1u) != 2.0", - value: { boolValue: true }, - }, - ast: "_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_uint_double", - expr: "dyn(99u) != 99.0", - value: { boolValue: false }, - }, - ast: "_!=_(\n dyn(\n 99u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 99u~uint\n )~dyn^to_dyn,\n 99~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_double", - expr: "9.0e+3 != 9001.0", - value: { boolValue: true }, - }, - ast: "_!=_(\n 9000^#*expr.Constant_DoubleValue#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n 9000~double,\n 9001~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_double_nan", - expr: "0.0/0.0 != 0.0/0.0", - value: { boolValue: true }, - }, - ast: "_!=_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_int_double_nan", - expr: "dyn(1) != 0.0/0.0", - value: { boolValue: true }, - }, - ast: "_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_uint_double_nan", - expr: "dyn(1u) != 0.0/0.0", - value: { boolValue: true }, - }, - ast: "_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_double", - expr: "1.0 != 1e+0", - value: { boolValue: false }, - }, - ast: "_!=_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_!=_(\n 1~double,\n 1~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_double_int", - expr: "dyn(9000) != 9001.0", - value: { boolValue: true }, - }, - ast: "_!=_(\n dyn(\n 9000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 9000~int\n )~dyn^to_dyn,\n 9001~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_double_int", - expr: "dyn(1) != 1e+0", - value: { boolValue: false }, - }, - ast: "_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_double_uint", - expr: "dyn(9000u) != 9001.0", - value: { boolValue: true }, - }, - ast: "_!=_(\n dyn(\n 9000u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 9000u~uint\n )~dyn^to_dyn,\n 9001~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_double_uint", - expr: "dyn(1u) != 1e+0", - value: { boolValue: false }, - }, - ast: "_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_double_nan", - expr: "0.0/0.0 != 0.0/0.0", - value: { boolValue: true }, - }, - ast: "_!=_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_string", - expr: "'abc' != ''", - value: { boolValue: true }, - }, - ast: '_!=_(\n "abc"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n "abc"~string,\n ""~string\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "not_ne_string", - expr: "'abc' != 'abc'", - value: { boolValue: false }, - }, - ast: '_!=_(\n "abc"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n "abc"~string,\n "abc"~string\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_string_unicode", - expr: "'résumé' != 'resume'", - value: { boolValue: true }, - }, - ast: '_!=_(\n "résumé"^#*expr.Constant_StringValue#,\n "resume"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n "résumé"~string,\n "resume"~string\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "not_ne_string_unicode", - expr: "'ίδιο' != 'ίδιο'", - value: { boolValue: false }, - }, - ast: '_!=_(\n "ίδιο"^#*expr.Constant_StringValue#,\n "ίδιο"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n "ίδιο"~string,\n "ίδιο"~string\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_bytes", - expr: "b'\\x00\\xFF' != b'ÿ'", - value: { boolValue: true }, - }, - ast: '_!=_(\n b"\\x00\\xff"^#*expr.Constant_BytesValue#,\n b"ÿ"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n b"\\x00\\xff"~bytes,\n b"ÿ"~bytes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "not_ne_bytes", - expr: "b'\\303\\277' != b'ÿ'", - value: { boolValue: false }, - }, - ast: '_!=_(\n b"ÿ"^#*expr.Constant_BytesValue#,\n b"ÿ"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n b"ÿ"~bytes,\n b"ÿ"~bytes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_bool", - expr: "false != true", - value: { boolValue: true }, - }, - ast: "_!=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n false~bool,\n true~bool\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_bool", - expr: "true != true", - value: { boolValue: false }, - }, - ast: "_!=_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_!=_(\n true~bool,\n true~bool\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_null", - description: - "null can only be equal to null, or else it won't match", - expr: "null != null", - value: { boolValue: false }, - }, - ast: "_!=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_!=_(\n null~null,\n null~null\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_list_empty", - expr: "[] != [1]", - value: { boolValue: true }, - }, - ast: "_!=_(\n []^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n []~list(int),\n [\n 1~int\n ]~list(int)\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_list_empty", - expr: "[] != []", - value: { boolValue: false }, - }, - ast: "_!=_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n []~list(dyn),\n []~list(dyn)\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_list_bool", - expr: "[true, false, true] != [true, true, false]", - value: { boolValue: true }, - }, - ast: "_!=_(\n [\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#,\n [\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n [\n true~bool,\n false~bool,\n true~bool\n ]~list(bool),\n [\n true~bool,\n true~bool,\n false~bool\n ]~list(bool)\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_list_bool", - expr: "[false, true] != [false, true]", - value: { boolValue: false }, - }, - ast: "_!=_(\n [\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#,\n [\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n [\n false~bool,\n true~bool\n ]~list(bool),\n [\n false~bool,\n true~bool\n ]~list(bool)\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_list_of_list", - expr: "[[]] != [[]]", - value: { boolValue: false }, - }, - ast: "_!=_(\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n [\n []~list(dyn)\n ]~list(list(dyn)),\n [\n []~list(dyn)\n ]~list(list(dyn))\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_map_by_value", - expr: "{'k':'v'} != {'k':'v1'}", - value: { boolValue: true }, - }, - ast: '_!=_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n {\n "k"~string:"v"~string\n }~map(string, string),\n {\n "k"~string:"v1"~string\n }~map(string, string)\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_map_by_key", - expr: "{'k':true} != {'k1':true}", - value: { boolValue: true }, - }, - ast: '_!=_(\n {\n "k"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k1"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n {\n "k"~string:true~bool\n }~map(string, bool),\n {\n "k1"~string:true~bool\n }~map(string, bool)\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "not_ne_map_int_to_float", - expr: "{1:1.0} != {1:1.0}", - value: { boolValue: false }, - }, - ast: "_!=_(\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n {\n 1~int:1~double\n }~map(int, double),\n {\n 1~int:1~double\n }~map(int, double)\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "not_ne_map_key_order", - expr: "{'a':'b','c':'d'} != {'c':'d','a':'b'}", - value: { boolValue: false }, - }, - ast: '_!=_(\n {\n "a"^#*expr.Constant_StringValue#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "c"^#*expr.Constant_StringValue#:"d"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "c"^#*expr.Constant_StringValue#:"d"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "a"^#*expr.Constant_StringValue#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n {\n "a"~string:"b"~string,\n "c"~string:"d"~string\n }~map(string, string),\n {\n "c"~string:"d"~string,\n "a"~string:"b"~string\n }~map(string, string)\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_mixed_types", - expr: "2u != 2", - disableCheck: true, - value: { boolValue: false }, - }, - ast: "_!=_(\n 2u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:4: found no matching overload for '_!=_' applied to '(uint, int)'\n | 2u != 2\n | ...^", - }, - { - original: { - name: "ne_proto2", - expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: '_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_proto3", - expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: '_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_proto2_missing_fields_neq", - expr: "TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: '_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_proto3_missing_fields_neq", - expr: "TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: '_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_proto_nan_not_equal", - description: - "For proto equality, NaN field values are not considered equal.", - expr: "TestAllTypes{single_double: double('NaN')} != TestAllTypes{single_double: double('NaN')}", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: '_!=_(\n TestAllTypes{\n single_double:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_double:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n "NaN"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n "NaN"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_proto_different_types", - description: - "At runtime, comparing differently typed messages is false.", - expr: "dyn(TestAllTypes{}) != dyn(NestedTestAllTypes{})", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_!=_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n NestedTestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n dyn(\n cel.expr.conformance.proto2.NestedTestAllTypes{}~cel.expr.conformance.proto2.NestedTestAllTypes^cel.expr.conformance.proto2.NestedTestAllTypes\n )~dyn^to_dyn\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "ne_proto2_any_unpack", - description: "Any values should be unpacked and compared.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: '_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_proto2_any_unpack_bytewise_fallback", - description: - "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: '_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_proto3_any_unpack", - description: "Any values should be unpacked and compared.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: '_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "ne_proto3_any_unpack_bytewise_fallback", - description: - "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", - expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: '_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals', - type: "bool", - }, - ], - }, - { - name: "lt_literal", - tests: [ - { - original: { - name: "lt_int", - expr: "-1 \u003c 0", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n -1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_\u003c_(\n -1~int,\n 0~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "not_lt_int", - expr: "0 \u003c 0", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n 0^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_\u003c_(\n 0~int,\n 0~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "lt_uint", - expr: "0u \u003c 1u", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n 0u~uint,\n 1u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "not_lt_uint", - expr: "2u \u003c 2u", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n 2u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n 2u~uint,\n 2u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "lt_double", - expr: "1.0 \u003c 1.0000001", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n 1^#*expr.Constant_DoubleValue#,\n 1.0000001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n 1~double,\n 1.0000001~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "not_lt_double", - description: - "Following IEEE 754, negative zero compares equal to zero", - expr: "-0.0 \u003c 0.0", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n -0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n -0~double,\n 0~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "lt_string", - expr: "'a' \u003c 'b'", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n "a"^#*expr.Constant_StringValue#,\n "b"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n "a"~string,\n "b"~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "lt_string_empty_to_nonempty", - expr: "'' \u003c 'a'", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n ""^#*expr.Constant_StringValue#,\n "a"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n ""~string,\n "a"~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "lt_string_case", - expr: "'Abc' \u003c 'aBC'", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n "Abc"^#*expr.Constant_StringValue#,\n "aBC"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n "Abc"~string,\n "aBC"~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "lt_string_length", - expr: "'abc' \u003c 'abcd'", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n "abc"^#*expr.Constant_StringValue#,\n "abcd"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n "abc"~string,\n "abcd"~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "lt_string_diacritical_mark_sensitive", - description: - "Verifies that the we're not using a string comparison function that strips diacritical marks (á)", - expr: "'a' \u003c '\\u00E1'", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n "a"^#*expr.Constant_StringValue#,\n "á"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n "a"~string,\n "á"~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "not_lt_string_empty", - expr: "'' \u003c ''", - value: { boolValue: false }, - }, - ast: '_\u003c_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n ""~string,\n ""~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "not_lt_string_same", - expr: "'abc' \u003c 'abc'", - value: { boolValue: false }, - }, - ast: '_\u003c_(\n "abc"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n "abc"~string,\n "abc"~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "not_lt_string_case_length", - expr: "'a' \u003c 'AB'", - value: { boolValue: false }, - }, - ast: '_\u003c_(\n "a"^#*expr.Constant_StringValue#,\n "AB"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n "a"~string,\n "AB"~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "unicode_order_lexical", - description: - "Compare the actual code points of the string, instead of decomposing ế into 'e' plus accent modifiers.", - expr: "'f' \u003c '\\u1EBF'", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n "f"^#*expr.Constant_StringValue#,\n "ế"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n "f"~string,\n "ế"~string\n)~bool^less_string', - type: "bool", - }, - { - original: { - name: "lt_bytes", - expr: "b'a' \u003c b'b'", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n b"a"^#*expr.Constant_BytesValue#,\n b"b"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n b"a"~bytes,\n b"b"~bytes\n)~bool^less_bytes', - type: "bool", - }, - { - original: { - name: "not_lt_bytes_same", - expr: "b'abc' \u003c b'abc'", - value: { boolValue: false }, - }, - ast: '_\u003c_(\n b"abc"^#*expr.Constant_BytesValue#,\n b"abc"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n b"abc"~bytes,\n b"abc"~bytes\n)~bool^less_bytes', - type: "bool", - }, - { - original: { - name: "not_lt_bytes_width", - expr: "b'á' \u003c b'b'", - value: { boolValue: false }, - }, - ast: '_\u003c_(\n b"á"^#*expr.Constant_BytesValue#,\n b"b"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n b"á"~bytes,\n b"b"~bytes\n)~bool^less_bytes', - type: "bool", - }, - { - original: { - name: "lt_bool_false_first", - expr: "false \u003c true", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n false~bool,\n true~bool\n)~bool^less_bool", - type: "bool", - }, - { - original: { - name: "not_lt_bool_same", - expr: "true \u003c true", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n true~bool,\n true~bool\n)~bool^less_bool", - type: "bool", - }, - { - original: { - name: "not_lt_bool_true_first", - expr: "true \u003c false", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n true~bool,\n false~bool\n)~bool^less_bool", - type: "bool", - }, - { - original: { - name: "lt_list_unsupported", - expr: "[0] \u003c [1]", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "_\u003c_(\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003c_' applied to '(list(int), list(int))'\n | [0] \u003c [1]\n | ....^", - }, - { - original: { - name: "lt_map_unsupported", - expr: "{0:'a'} \u003c {1:'b'}", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003c_(\n {\n 0^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003c_' applied to '(map(int, string), map(int, string))'\n | {0:'a'} \u003c {1:'b'}\n | ........^", - }, - { - original: { - name: "lt_null_unsupported", - description: "Ensure _\u003c_ doesn't have a binding for null", - expr: "null \u003c null", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "_\u003c_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n null~null,\n null~null\n)~bool^less_duration|less_timestamp", - type: "bool", - }, - { - original: { - name: "lt_mixed_types_error", - expr: "'foo' \u003c 1024", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003c_(\n "foo"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003c_' applied to '(string, int)'\n | 'foo' \u003c 1024\n | ......^", - }, - { - original: { - name: "lt_dyn_int_uint", - expr: "dyn(1) \u003c 2u", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "lt_dyn_int_double", - expr: "dyn(1) \u003c 2.0", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "lt_dyn_uint_int", - expr: "dyn(1u) \u003c 2", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "lt_dyn_uint_double", - expr: "dyn(1u) \u003c 2.0", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "lt_dyn_double_int", - expr: "dyn(1.0) \u003c 2", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "lt_dyn_double_uint", - expr: "dyn(1.0) \u003c 2u", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_int_uint", - expr: "dyn(1) \u003c 1u", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_int_double", - expr: "dyn(1) \u003c 1.0", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_uint_int", - expr: "dyn(1u) \u003c 1", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_uint_double", - expr: "dyn(1u) \u003c 1.0", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_double_int", - expr: "dyn(1.0) \u003c 1", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_double_uint", - expr: "dyn(1.0) \u003c 1u", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "lt_dyn_int_big_uint", - expr: "dyn(1) \u003c 9223372036854775808u", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "lt_dyn_small_int_uint", - expr: "dyn(-1) \u003c 0u", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_int_big_lossy_double", - expr: "dyn(9223372036854775807) \u003c 9223372036854775808.0", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "lt_dyn_int_big_lossy_double", - expr: "dyn(9223372036854775807) \u003c 9223372036854777857.0", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854778e+18~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_int_small_double", - expr: "dyn(9223372036854775807) \u003c -9223372036854777857.0", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_int_small_lossy_double", - expr: "dyn(-9223372036854775808) \u003c -9223372036854775809.0", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_uint_small_int", - expr: "dyn(1u) \u003c -9223372036854775808", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_big_uint_int", - expr: "dyn(9223372036854775808u) \u003c 1", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_uint_small_double", - expr: "dyn(18446744073709551615u) \u003c -1.0", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "lt_dyn_uint_big_double", - expr: "dyn(18446744073709551615u) \u003c 18446744073709590000.0", - value: { boolValue: true }, - }, - ast: "_\u003c_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^less_double", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_big_double_uint", - expr: "dyn(18446744073709553665.0) \u003c 18446744073709551615u", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^less_uint64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_big_double_int", - expr: "dyn(9223372036854775808.0) \u003c 9223372036854775807", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^less_int64", - type: "bool", - }, - { - original: { - name: "not_lt_dyn_small_double_int", - expr: "dyn(-9223372036854775809.0) \u003c -9223372036854775808", - value: { boolValue: false }, - }, - ast: "_\u003c_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_int64", - type: "bool", - }, - ], - }, - { - name: "gt_literal", - tests: [ - { - original: { - name: "gt_int", - expr: "42 \u003e -42", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n 42^#*expr.Constant_Int64Value#,\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n 42~int,\n -42~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "not_gt_int", - expr: "0 \u003e 0", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n 0^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_\u003e_(\n 0~int,\n 0~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "gt_uint", - expr: "48u \u003e 46u", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n 48u^#*expr.Constant_Uint64Value#,\n 46u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n 48u~uint,\n 46u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "not_gt_uint", - expr: "0u \u003e 999u", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n 0u^#*expr.Constant_Uint64Value#,\n 999u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n 0u~uint,\n 999u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "gt_double", - expr: "1e+1 \u003e 1e+0", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n 10^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n 10~double,\n 1~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "not_gt_double", - expr: ".99 \u003e 9.9e-1", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n 0.99^#*expr.Constant_DoubleValue#,\n 0.99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n 0.99~double,\n 0.99~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "gt_string_case", - expr: "'abc' \u003e 'aBc'", - value: { boolValue: true }, - }, - ast: '_\u003e_(\n "abc"^#*expr.Constant_StringValue#,\n "aBc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n "abc"~string,\n "aBc"~string\n)~bool^greater_string', - type: "bool", - }, - { - original: { - name: "gt_string_to_empty", - expr: "'A' \u003e ''", - value: { boolValue: true }, - }, - ast: '_\u003e_(\n "A"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n "A"~string,\n ""~string\n)~bool^greater_string', - type: "bool", - }, - { - original: { - name: "not_gt_string_empty_to_empty", - expr: "'' \u003e ''", - value: { boolValue: false }, - }, - ast: '_\u003e_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n ""~string,\n ""~string\n)~bool^greater_string', - type: "bool", - }, - { - original: { - name: "gt_string_unicode", - expr: "'α' \u003e 'omega'", - value: { boolValue: true }, - }, - ast: '_\u003e_(\n "α"^#*expr.Constant_StringValue#,\n "omega"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n "α"~string,\n "omega"~string\n)~bool^greater_string', - type: "bool", - }, - { - original: { - name: "gt_bytes_one", - expr: "b'\u0001' \u003e b'\u0000'", - value: { boolValue: true }, - }, - ast: '_\u003e_(\n b"\\x01"^#*expr.Constant_BytesValue#,\n b"\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n b"\\x01"~bytes,\n b"\\x00"~bytes\n)~bool^greater_bytes', - type: "bool", - }, - { - original: { - name: "gt_bytes_one_to_empty", - expr: "b'\u0000' \u003e b''", - value: { boolValue: true }, - }, - ast: '_\u003e_(\n b"\\x00"^#*expr.Constant_BytesValue#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n b"\\x00"~bytes,\n b""~bytes\n)~bool^greater_bytes', - type: "bool", - }, - { - original: { - name: "not_gt_bytes_sorting", - expr: "b'\u0000\u0001' \u003e b'\u0001'", - value: { boolValue: false }, - }, - ast: '_\u003e_(\n b"\\x00\\x01"^#*expr.Constant_BytesValue#,\n b"\\x01"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n b"\\x00\\x01"~bytes,\n b"\\x01"~bytes\n)~bool^greater_bytes', - type: "bool", - }, - { - original: { - name: "gt_bool_true_false", - expr: "true \u003e false", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n true~bool,\n false~bool\n)~bool^greater_bool", - type: "bool", - }, - { - original: { - name: "not_gt_bool_false_true", - expr: "false \u003e true", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n false~bool,\n true~bool\n)~bool^greater_bool", - type: "bool", - }, - { - original: { - name: "not_gt_bool_same", - expr: "true \u003e true", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n true~bool,\n true~bool\n)~bool^greater_bool", - type: "bool", - }, - { - original: { - name: "gt_null_unsupported", - expr: "null \u003e null", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "_\u003e_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n null~null,\n null~null\n)~bool^greater_duration|greater_timestamp", - type: "bool", - }, - { - original: { - name: "gt_list_unsupported", - expr: "[1] \u003e [0]", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "_\u003e_(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003e_' applied to '(list(int), list(int))'\n | [1] \u003e [0]\n | ....^", - }, - { - original: { - name: "gt_map_unsupported", - expr: "{1:'b'} \u003e {0:'a'}", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003e_(\n {\n 1^#*expr.Constant_Int64Value#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 0^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003e_' applied to '(map(int, string), map(int, string))'\n | {1:'b'} \u003e {0:'a'}\n | ........^", - }, - { - original: { - name: "gt_mixed_types_error", - expr: "'foo' \u003e 1024", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003e_(\n "foo"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e_' applied to '(string, int)'\n | 'foo' \u003e 1024\n | ......^", - }, - { - original: { - name: "gt_dyn_int_uint", - expr: "dyn(2) \u003e 1u", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "gt_dyn_int_double", - expr: "dyn(2) \u003e 1.0", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "gt_dyn_uint_int", - expr: "dyn(2u) \u003e 1", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "gt_dyn_uint_double", - expr: "dyn(2u) \u003e 1.0", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "gt_dyn_double_int", - expr: "dyn(2.0) \u003e 1", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "gt_dyn_double_uint", - expr: "dyn(2.0) \u003e 1u", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_int_uint", - expr: "dyn(1) \u003e 1u", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_int_double", - expr: "dyn(1) \u003e 1.0", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_uint_int", - expr: "dyn(1u) \u003e 1", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_uint_double", - expr: "dyn(1u) \u003e 1.0", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_double_int", - expr: "dyn(1.0) \u003e 1", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_double_uint", - expr: "dyn(1.0) \u003e 1u", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_int_big_uint", - expr: "dyn(1) \u003e 9223372036854775808u", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_small_int_uint", - expr: "dyn(-1) \u003e 0u", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_int_big_double", - expr: "dyn(9223372036854775807) \u003e 9223372036854775808.0", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_int_small_lossy_double", - description: - "The conversion of the int to double is lossy and the numbers end up being equal", - expr: "dyn(-9223372036854775808) \u003e -9223372036854775809.0", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "gt_dyn_int_small_lossy_double_greater", - expr: "dyn(-9223372036854775808) \u003e -9223372036854777857.0", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "gt_dyn_uint_small_int", - expr: "dyn(1u) \u003e -1", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -1~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "gt_dyn_big_uint_int", - expr: "dyn(9223372036854775808u) \u003e 1", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "gt_dyn_uint_small_double", - expr: "dyn(9223372036854775807u) \u003e -1.0", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 9223372036854775807u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_uint_big_double", - expr: "dyn(18446744073709551615u) \u003e 18446744073709590000.0", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^greater_double", - type: "bool", - }, - { - original: { - name: "gt_dyn_big_double_uint", - expr: "dyn(18446744073709553665.0) \u003e 18446744073709551615u", - value: { boolValue: true }, - }, - ast: "_\u003e_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^greater_uint64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_big_double_int", - expr: "dyn(9223372036854775808.0) \u003e 9223372036854775807", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^greater_int64", - type: "bool", - }, - { - original: { - name: "not_gt_dyn_small_double_int", - expr: "dyn(-9223372036854775809.0) \u003e -9223372036854775808", - value: { boolValue: false }, - }, - ast: "_\u003e_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^greater_int64", - type: "bool", - }, - ], - }, - { - name: "lte_literal", - tests: [ - { - original: { - name: "lte_int_lt", - expr: "0 \u003c= 1", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 0~int,\n 1~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "lte_int_eq", - expr: "1 \u003c= 1", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 1~int,\n 1~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "not_lte_int_gt", - expr: "1 \u003c= -1", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n 1^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 1~int,\n -1~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "lte_uint_lt", - expr: "0u \u003c= 1u", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 0u~uint,\n 1u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "lte_uint_eq", - expr: "1u \u003c= 1u", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 1u~uint,\n 1u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "not_lte_uint_gt", - expr: "1u \u003c= 0u", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n 1u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 1u~uint,\n 0u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "lte_double_lt", - expr: "0.0 \u003c= 0.1e-31", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n 0^#*expr.Constant_DoubleValue#,\n 1e-32^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 0~double,\n 1e-32~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "lte_double_eq", - expr: "0.0 \u003c= 0e-1", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 0~double,\n 0~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "not_lte_double_gt", - expr: "1.0 \u003c= 0.99", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n 1^#*expr.Constant_DoubleValue#,\n 0.99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 1~double,\n 0.99~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "lte_string_empty", - expr: "'' \u003c= ''", - value: { boolValue: true }, - }, - ast: '_\u003c=_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n ""~string,\n ""~string\n)~bool^less_equals_string', - type: "bool", - }, - { - original: { - name: "lte_string_from_empty", - expr: "'' \u003c= 'a'", - value: { boolValue: true }, - }, - ast: '_\u003c=_(\n ""^#*expr.Constant_StringValue#,\n "a"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n ""~string,\n "a"~string\n)~bool^less_equals_string', - type: "bool", - }, - { - original: { - name: "not_lte_string_to_empty", - expr: "'a' \u003c= ''", - value: { boolValue: false }, - }, - ast: '_\u003c=_(\n "a"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n "a"~string,\n ""~string\n)~bool^less_equals_string', - type: "bool", - }, - { - original: { - name: "lte_string_lexicographical", - expr: "'aBc' \u003c= 'abc'", - value: { boolValue: true }, - }, - ast: '_\u003c=_(\n "aBc"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n "aBc"~string,\n "abc"~string\n)~bool^less_equals_string', - type: "bool", - }, - { - original: { - name: "lte_string_unicode_eq", - expr: "'α' \u003c= 'α'", - value: { boolValue: true }, - }, - ast: '_\u003c=_(\n "α"^#*expr.Constant_StringValue#,\n "α"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n "α"~string,\n "α"~string\n)~bool^less_equals_string', - type: "bool", - }, - { - original: { - name: "lte_string_unicode_lt", - expr: "'a' \u003c= 'α'", - value: { boolValue: true }, - }, - ast: '_\u003c=_(\n "a"^#*expr.Constant_StringValue#,\n "α"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n "a"~string,\n "α"~string\n)~bool^less_equals_string', - type: "bool", - }, - { - original: { - name: "not_lte_string_unicode", - expr: "'α' \u003c= 'a'", - value: { boolValue: false }, - }, - ast: '_\u003c=_(\n "α"^#*expr.Constant_StringValue#,\n "a"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n "α"~string,\n "a"~string\n)~bool^less_equals_string', - type: "bool", - }, - { - original: { - name: "lte_bytes_empty", - expr: "b'' \u003c= b'\u0000'", - value: { boolValue: true }, - }, - ast: '_\u003c=_(\n b""^#*expr.Constant_BytesValue#,\n b"\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n b""~bytes,\n b"\\x00"~bytes\n)~bool^less_equals_bytes', - type: "bool", - }, - { - original: { - name: "not_lte_bytes_length", - expr: "b'\u0001\u0000' \u003c= b'\u0001'", - value: { boolValue: false }, - }, - ast: '_\u003c=_(\n b"\\x01\\x00"^#*expr.Constant_BytesValue#,\n b"\\x01"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n b"\\x01\\x00"~bytes,\n b"\\x01"~bytes\n)~bool^less_equals_bytes', - type: "bool", - }, - { - original: { - name: "lte_bool_false_true", - expr: "false \u003c= true", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n false~bool,\n true~bool\n)~bool^less_equals_bool", - type: "bool", - }, - { - original: { - name: "lte_bool_false_false", - expr: "false \u003c= false", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n false~bool,\n false~bool\n)~bool^less_equals_bool", - type: "bool", - }, - { - original: { - name: "lte_bool_true_false", - expr: "true \u003c= false", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n true~bool,\n false~bool\n)~bool^less_equals_bool", - type: "bool", - }, - { - original: { - name: "lte_null_unsupported", - expr: "null \u003c= null", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "_\u003c=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n null~null,\n null~null\n)~bool^less_equals_duration|less_equals_timestamp", - type: "bool", - }, - { - original: { - name: "lte_list_unsupported", - expr: "[0] \u003c= [0]", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "_\u003c=_(\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003c=_' applied to '(list(int), list(int))'\n | [0] \u003c= [0]\n | ....^", - }, - { - original: { - name: "lte_map_unsupported", - expr: "{0:'a'} \u003c= {1:'b'}", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003c=_(\n {\n 0^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003c=_' applied to '(map(int, string), map(int, string))'\n | {0:'a'} \u003c= {1:'b'}\n | ........^", - }, - { - original: { - name: "lte_mixed_types_error", - expr: "'foo' \u003c= 1024", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003c=_(\n "foo"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003c=_' applied to '(string, int)'\n | 'foo' \u003c= 1024\n | ......^", - }, - { - original: { - name: "lte_dyn_int_uint", - expr: "dyn(1) \u003c= 2u", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "lte_dyn_int_double", - expr: "dyn(1) \u003c= 2.0", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "lte_dyn_uint_int", - expr: "dyn(1u) \u003c= 2", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "lte_dyn_uint_double", - expr: "dyn(1u) \u003c= 2.0", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "lte_dyn_double_int", - expr: "dyn(1.0) \u003c= 2", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "lte_dyn_double_uint", - expr: "dyn(1.0) \u003c= 2u", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_int_uint", - expr: "dyn(2) \u003c= 1u", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_int_double", - expr: "dyn(2) \u003c= 1.0", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_uint_int", - expr: "dyn(2u) \u003c= 1", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_uint_double", - expr: "dyn(2u) \u003c= 1.0", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_double_int", - expr: "dyn(2.0) \u003c= 1", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_double_uint", - expr: "dyn(2.0) \u003c= 1u", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "lte_dyn_int_big_uint", - expr: "dyn(1) \u003c= 9223372036854775808u", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "lte_dyn_small_int_uint", - expr: "dyn(-1) \u003c= 0u", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "lte_dyn_int_big_double", - expr: "dyn(9223372036854775807) \u003c= 9223372036854775808.0", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "lte_dyn_int_small_lossy_double", - description: - "The conversion of the int to double is lossy and the numbers end up being equal", - expr: "dyn(-9223372036854775808) \u003c= -9223372036854775809.0", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_int_small_lossy_double_less", - expr: "dyn(-9223372036854775808) \u003c= -9223372036854777857.0", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_uint_small_int", - expr: "dyn(1u) \u003c= -9223372036854775808", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_big_uint_int", - expr: "dyn(9223372036854775808u) \u003c= 1", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_uint_small_double", - expr: "dyn(18446744073709551615u) \u003c= -1.0", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "lte_dyn_uint_big_double", - expr: "dyn(18446744073709551615u) \u003c= 18446744073709590000.0", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^less_equals_double", - type: "bool", - }, - { - original: { - name: "not_lte_dyn_big_double_uint", - expr: "dyn(18446744073709553665.0) \u003c= 18446744073709551615u", - value: { boolValue: false }, - }, - ast: "_\u003c=_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^less_equals_uint64", - type: "bool", - }, - { - original: { - name: "lte_dyn_big_double_int", - expr: "dyn(9223372036854775808.0) \u003c= 9223372036854775807", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "lte_dyn_small_double_int", - expr: "dyn(-9223372036854775809.0) \u003c= -9223372036854775808", - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_equals_int64", - type: "bool", - }, - ], - }, - { - name: "gte_literal", - tests: [ - { - original: { - name: "gte_int_gt", - expr: "0 \u003e= -1", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n 0^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 0~int,\n -1~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "gte_int_eq", - expr: "999 \u003e= 999", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n 999^#*expr.Constant_Int64Value#,\n 999^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 999~int,\n 999~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "not_gte_int_lt", - expr: "999 \u003e= 1000", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n 999^#*expr.Constant_Int64Value#,\n 1000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 999~int,\n 1000~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "gte_uint_gt", - expr: "1u \u003e= 0u", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n 1u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 1u~uint,\n 0u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "gte_uint_eq", - expr: "0u \u003e= 0u", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n 0u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 0u~uint,\n 0u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "not_gte_uint_lt", - expr: "1u \u003e= 10u", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n 1u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 1u~uint,\n 10u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "gte_double_gt", - expr: "1e+1 \u003e= 1e+0", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n 10^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 10~double,\n 1~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "gte_double_eq", - expr: "9.80665 \u003e= 9.80665e+0", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n 9.80665^#*expr.Constant_DoubleValue#,\n 9.80665^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 9.80665~double,\n 9.80665~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "not_gte_double_lt", - expr: "0.9999 \u003e= 1.0", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n 0.9999^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n 0.9999~double,\n 1~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "gte_string_empty", - expr: "'' \u003e= ''", - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n ""~string,\n ""~string\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "gte_string_to_empty", - expr: "'a' \u003e= ''", - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n "a"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n "a"~string,\n ""~string\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "gte_string_empty_to_nonempty", - expr: "'' \u003e= 'a'", - value: { boolValue: false }, - }, - ast: '_\u003e=_(\n ""^#*expr.Constant_StringValue#,\n "a"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n ""~string,\n "a"~string\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "gte_string_length", - expr: "'abcd' \u003e= 'abc'", - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n "abcd"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n "abcd"~string,\n "abc"~string\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "not_gte_string_lexicographical", - expr: "'abc' \u003e= 'abd'", - value: { boolValue: false }, - }, - ast: '_\u003e=_(\n "abc"^#*expr.Constant_StringValue#,\n "abd"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n "abc"~string,\n "abd"~string\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "gte_string_unicode_eq", - expr: "'τ' \u003e= 'τ'", - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n "τ"^#*expr.Constant_StringValue#,\n "τ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n "τ"~string,\n "τ"~string\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "gte_string_unicode_gt", - expr: "'τ' \u003e= 't'", - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n "τ"^#*expr.Constant_StringValue#,\n "t"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n "τ"~string,\n "t"~string\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "not_get_string_unicode", - expr: "'t' \u003e= 'τ'", - value: { boolValue: false }, - }, - ast: '_\u003e=_(\n "t"^#*expr.Constant_StringValue#,\n "τ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n "t"~string,\n "τ"~string\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "gte_bytes_to_empty", - expr: "b'\u0000' \u003e= b''", - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n b"\\x00"^#*expr.Constant_BytesValue#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n b"\\x00"~bytes,\n b""~bytes\n)~bool^greater_equals_bytes', - type: "bool", - }, - { - original: { - name: "not_gte_bytes_empty_to_nonempty", - expr: "b'' \u003e= b'\u0000'", - value: { boolValue: false }, - }, - ast: '_\u003e=_(\n b""^#*expr.Constant_BytesValue#,\n b"\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n b""~bytes,\n b"\\x00"~bytes\n)~bool^greater_equals_bytes', - type: "bool", - }, - { - original: { - name: "gte_bytes_samelength", - expr: "b'\u0000\u0001' \u003e= b'\u0001\u0000'", - value: { boolValue: false }, - }, - ast: '_\u003e=_(\n b"\\x00\\x01"^#*expr.Constant_BytesValue#,\n b"\\x01\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n b"\\x00\\x01"~bytes,\n b"\\x01\\x00"~bytes\n)~bool^greater_equals_bytes', - type: "bool", - }, - { - original: { - name: "gte_bool_gt", - expr: "true \u003e= false", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n true~bool,\n false~bool\n)~bool^greater_equals_bool", - type: "bool", - }, - { - original: { - name: "gte_bool_eq", - expr: "true \u003e= true", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n true~bool,\n true~bool\n)~bool^greater_equals_bool", - type: "bool", - }, - { - original: { - name: "not_gte_bool_lt", - expr: "false \u003e= true", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n false~bool,\n true~bool\n)~bool^greater_equals_bool", - type: "bool", - }, - { - original: { - name: "gte_null_unsupported", - expr: "null \u003e= null", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "_\u003e=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n null~null,\n null~null\n)~bool^greater_equals_duration|greater_equals_timestamp", - type: "bool", - }, - { - original: { - name: "gte_list_unsupported", - expr: "['y'] \u003e= ['x']", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003e=_(\n [\n "y"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n "x"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e=_' applied to '(list(string), list(string))'\n | ['y'] \u003e= ['x']\n | ......^", - }, - { - original: { - name: "gte_map_unsupported", - expr: "{1:'b'} \u003e= {0:'a'}", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003e=_(\n {\n 1^#*expr.Constant_Int64Value#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 0^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003e=_' applied to '(map(int, string), map(int, string))'\n | {1:'b'} \u003e= {0:'a'}\n | ........^", - }, - { - original: { - name: "gte_mixed_types_error", - expr: "'foo' \u003e= 1.0", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_\u003e=_(\n "foo"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e=_' applied to '(string, double)'\n | 'foo' \u003e= 1.0\n | ......^", - }, - { - original: { - name: "gte_dyn_int_uint", - expr: "dyn(2) \u003e= 1u", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "gte_dyn_int_double", - expr: "dyn(2) \u003e= 1.0", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "gte_dyn_uint_int", - expr: "dyn(2u) \u003e= 1", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "gte_dyn_uint_double", - expr: "dyn(2u) \u003e= 1.0", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "gte_dyn_double_int", - expr: "dyn(2.0) \u003e= 1", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "gte_dyn_double_uint", - expr: "dyn(2.0) \u003e= 1u", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_int_uint", - expr: "dyn(0) \u003e= 1u", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 0~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_int_double", - expr: "dyn(0) \u003e= 1.0", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 0~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_uint_int", - expr: "dyn(0u) \u003e= 1", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 0u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_uint_double", - expr: "dyn(0u) \u003e= 1.0", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 0u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_double_int", - expr: "dyn(0.0) \u003e= 1", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 0~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_double_uint", - expr: "dyn(0.0) \u003e= 1u", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 0~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_int_big_uint", - expr: "dyn(1) \u003e= 9223372036854775808u", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_small_int_uint", - expr: "dyn(-1) \u003e= 0u", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "gte_dyn_int_big_lossy_double", - expr: "dyn(9223372036854775807) \u003e= 9223372036854775808.0", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_int_big_double", - expr: "dyn(9223372036854775807) \u003e= 9223372036854777857.0", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854778e+18~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "gte_dyn_int_small_lossy_double_equal", - description: - "The conversion of the int to double is lossy and the numbers end up being equal", - expr: "dyn(-9223372036854775808) \u003e= -9223372036854775809.0", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "gte_dyn_int_small_lossy_double_greater", - expr: "dyn(-9223372036854775808) \u003e= -9223372036854777857.0", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "gte_dyn_uint_small_int", - expr: "dyn(1u) \u003e= -1", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -1~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "gte_dyn_big_uint_int", - expr: "dyn(9223372036854775808u) \u003e= 1", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "gte_dyn_uint_small_double", - expr: "dyn(9223372036854775807u) \u003e= -1.0", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 9223372036854775807u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "not_gte_dyn_uint_big_double", - expr: "dyn(18446744073709551615u) \u003e= 18446744073709553665.0", - value: { boolValue: false }, - }, - ast: "_\u003e=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.8446744073709556e+19~double\n)~bool^greater_equals_double", - type: "bool", - }, - { - original: { - name: "gte_dyn_big_double_uint", - expr: "dyn(18446744073709553665.0) \u003e= 18446744073709551615u", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^greater_equals_uint64", - type: "bool", - }, - { - original: { - name: "gte_dyn_big_double_int", - expr: "dyn(9223372036854775808.0) \u003e= 9223372036854775807", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^greater_equals_int64", - type: "bool", - }, - { - original: { - name: "gte_dyn_small_double_int", - expr: "dyn(-9223372036854775809.0) \u003e= -9223372036854775808", - value: { boolValue: true }, - }, - ast: "_\u003e=_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003e=_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^greater_equals_int64", - type: "bool", - }, - ], - }, - { - name: "in_list_literal", - tests: [ - { - original: { - name: "elem_not_in_empty_list", - expr: "'empty' in []", - value: { boolValue: false }, - }, - ast: '@in(\n "empty"^#*expr.Constant_StringValue#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "empty"~string,\n []~list(string)\n)~bool^in_list', - type: "bool", - }, - { - original: { - name: "elem_in_list", - expr: "'elem' in ['elem', 'elemA', 'elemB']", - value: { boolValue: true }, - }, - ast: '@in(\n "elem"^#*expr.Constant_StringValue#,\n [\n "elem"^#*expr.Constant_StringValue#,\n "elemA"^#*expr.Constant_StringValue#,\n "elemB"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "elem"~string,\n [\n "elem"~string,\n "elemA"~string,\n "elemB"~string\n ]~list(string)\n)~bool^in_list', - type: "bool", - }, - { - original: { - name: "elem_not_in_list", - expr: "'not' in ['elem1', 'elem2', 'elem3']", - value: { boolValue: false }, - }, - ast: '@in(\n "not"^#*expr.Constant_StringValue#,\n [\n "elem1"^#*expr.Constant_StringValue#,\n "elem2"^#*expr.Constant_StringValue#,\n "elem3"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "not"~string,\n [\n "elem1"~string,\n "elem2"~string,\n "elem3"~string\n ]~list(string)\n)~bool^in_list', - type: "bool", - }, - { - original: { - name: "elem_in_mixed_type_list", - description: - "Set membership tests should succeed if the 'elem' exists in a mixed element type list.", - expr: "'elem' in [1, 'elem', 2]", - value: { boolValue: true }, - }, - ast: '@in(\n "elem"^#*expr.Constant_StringValue#,\n [\n 1^#*expr.Constant_Int64Value#,\n "elem"^#*expr.Constant_StringValue#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "elem"~string,\n [\n 1~int,\n "elem"~string,\n 2~int\n ]~list(dyn)\n)~bool^in_list', - type: "bool", - }, - { - original: { - name: "elem_in_mixed_type_list_cross_type", - description: - "Set membership tests should return false due to the introduction of heterogeneous-equality. Set membership via 'in' is equivalent to the macro exists() behavior.", - expr: "'elem' in [1u, 'str', 2, b'bytes']", - value: { boolValue: false }, - }, - ast: '@in(\n "elem"^#*expr.Constant_StringValue#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n "str"^#*expr.Constant_StringValue#,\n 2^#*expr.Constant_Int64Value#,\n b"bytes"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "elem"~string,\n [\n 1u~uint,\n "str"~string,\n 2~int,\n b"bytes"~bytes\n ]~list(dyn)\n)~bool^in_list', - type: "bool", - }, - ], - }, - { - name: "in_map_literal", - tests: [ - { - original: { - name: "key_not_in_empty_map", - expr: "'empty' in {}", - value: { boolValue: false }, - }, - ast: '@in(\n "empty"^#*expr.Constant_StringValue#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "empty"~string,\n {}~map(string, dyn)\n)~bool^in_map', - type: "bool", - }, - { - original: { - name: "key_in_map", - expr: "'key' in {'key':'1', 'other':'2'}", - value: { boolValue: true }, - }, - ast: '@in(\n "key"^#*expr.Constant_StringValue#,\n {\n "key"^#*expr.Constant_StringValue#:"1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "other"^#*expr.Constant_StringValue#:"2"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "key"~string,\n {\n "key"~string:"1"~string,\n "other"~string:"2"~string\n }~map(string, string)\n)~bool^in_map', - type: "bool", - }, - { - original: { - name: "key_not_in_map", - expr: "'key' in {'lock':1, 'gate':2}", - value: { boolValue: false }, - }, - ast: '@in(\n "key"^#*expr.Constant_StringValue#,\n {\n "lock"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "gate"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "key"~string,\n {\n "lock"~string:1~int,\n "gate"~string:2~int\n }~map(string, int)\n)~bool^in_map', - type: "bool", - }, - { - original: { - name: "key_in_mixed_key_type_map", - description: - "Map keys are of mixed type, but since the key is present the result is true.", - expr: "'key' in {3:3.0, 'key':2u}", - value: { boolValue: true }, - }, - ast: '@in(\n "key"^#*expr.Constant_StringValue#,\n {\n 3^#*expr.Constant_Int64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "key"^#*expr.Constant_StringValue#:2u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "key"~string,\n {\n 3~int:3~double,\n "key"~string:2u~uint\n }~map(dyn, dyn)\n)~bool^in_map', - type: "bool", - }, - { - original: { - name: "key_in_mixed_key_type_map_cross_type", - expr: "'key' in {1u:'str', 2:b'bytes'}", - value: { boolValue: false }, - }, - ast: '@in(\n "key"^#*expr.Constant_StringValue#,\n {\n 1u^#*expr.Constant_Uint64Value#:"str"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:b"bytes"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "key"~string,\n {\n 1u~uint:"str"~string,\n 2~int:b"bytes"~bytes\n }~map(dyn, dyn)\n)~bool^in_map', - type: "bool", - }, - ], - }, - { - name: "bound", - tests: [ - { - original: { - name: "bytes_gt_left_false", - expr: "x \u003e b'\u0000'", - typeEnv: [ - { name: "x", ident: { type: { primitive: "BYTES" } } }, - ], - bindings: { x: { value: { bytesValue: "AA==" } } }, - value: { boolValue: false }, - }, - ast: '_\u003e_(\n x^#*expr.Expr_IdentExpr#,\n b"\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n x~bytes^x,\n b"\\x00"~bytes\n)~bool^greater_bytes', - type: "bool", - }, - { - original: { - name: "int_lte_right_true", - expr: "123 \u003c= x", - typeEnv: [ - { name: "x", ident: { type: { primitive: "INT64" } } }, - ], - bindings: { x: { value: { int64Value: "124" } } }, - value: { boolValue: true }, - }, - ast: "_\u003c=_(\n 123^#*expr.Constant_Int64Value#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c=_(\n 123~int,\n x~int^x\n)~bool^less_equals_int64", - type: "bool", - }, - { - original: { - name: "bool_lt_right_true", - expr: "false \u003c x", - typeEnv: [ - { name: "x", ident: { type: { primitive: "BOOL" } } }, - ], - bindings: { x: { value: { boolValue: true } } }, - value: { boolValue: true }, - }, - ast: "_\u003c_(\n false^#*expr.Constant_BoolValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u003c_(\n false~bool,\n x~bool^x\n)~bool^less_bool", - type: "bool", - }, - { - original: { - name: "double_ne_left_false", - expr: "x != 9.8", - typeEnv: [ - { name: "x", ident: { type: { primitive: "DOUBLE" } } }, - ], - bindings: { x: { value: { doubleValue: 9.8 } } }, - value: { boolValue: false }, - }, - ast: "_!=_(\n x^#*expr.Expr_IdentExpr#,\n 9.8^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n x~double^x,\n 9.8~double\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "map_ne_right_false", - expr: "{'a':'b','c':'d'} != x", - typeEnv: [ - { - name: "x", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - x: { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "c" }, - value: { stringValue: "d" }, - }, - { - key: { stringValue: "a" }, - value: { stringValue: "b" }, - }, - ], - }, - }, - }, - }, - value: { boolValue: false }, - }, - ast: '_!=_(\n {\n "a"^#*expr.Constant_StringValue#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "c"^#*expr.Constant_StringValue#:"d"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n {\n "a"~string:"b"~string,\n "c"~string:"d"~string\n }~map(string, string),\n x~map(string, string)^x\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "null_eq_left_true", - description: - "A comparison _==_ against null only binds if the type is determined to be null or we skip the type checking", - expr: "x == null", - typeEnv: [{ name: "x", ident: { type: { null: null } } }], - bindings: { x: { value: { nullValue: null } } }, - value: { boolValue: true }, - }, - ast: "_==_(\n x^#*expr.Expr_IdentExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n x~null^x,\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "list_eq_right_false", - expr: "[1, 2] == x", - typeEnv: [ - { - name: "x", - ident: { - type: { listType: { elemType: { primitive: "INT64" } } }, - }, - }, - ], - bindings: { - x: { - value: { - listValue: { - values: [{ int64Value: "2" }, { int64Value: "1" }], - }, - }, - }, - }, - value: { boolValue: false }, - }, - ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n [\n 1~int,\n 2~int\n ]~list(int),\n x~list(int)^x\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "string_gte_right_true", - expr: "'abcd' \u003e= x", - typeEnv: [ - { name: "x", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { x: { value: { stringValue: "abc" } } }, - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n "abcd"^#*expr.Constant_StringValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n "abcd"~string,\n x~string^x\n)~bool^greater_equals_string', - type: "bool", - }, - { - original: { - name: "uint_eq_right_false", - expr: "999u == x", - typeEnv: [ - { name: "x", ident: { type: { primitive: "UINT64" } } }, - ], - bindings: { x: { value: { uint64Value: "1000" } } }, - value: { boolValue: false }, - }, - ast: "_==_(\n 999u^#*expr.Constant_Uint64Value#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_==_(\n 999u~uint,\n x~uint^x\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "null_lt_right_no_such_overload", - description: - "There is no _\u003c_ operation for null, even if both operands are null", - expr: "null \u003c x", - disableCheck: true, - bindings: { x: { value: { nullValue: null } } }, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "_\u003c_(\n null^#*expr.Constant_NullValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:8: undeclared reference to 'x' (in container '')\n | null \u003c x\n | .......^", - }, - ], - }, - ], - }, - { - name: "conversions", - suites: [ - { - name: "bytes", - tests: [ - { - original: { - name: "string_empty", - expr: "bytes('')", - value: { bytesValue: "" }, - }, - ast: 'bytes(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bytes(\n ""~string\n)~bytes^string_to_bytes', - type: "bytes", - }, - { - original: { - name: "string", - expr: "bytes('abc')", - value: { bytesValue: "YWJj" }, - }, - ast: 'bytes(\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bytes(\n "abc"~string\n)~bytes^string_to_bytes', - type: "bytes", - }, - { - original: { - name: "string_unicode", - expr: "bytes('ÿ')", - value: { bytesValue: "w78=" }, - }, - ast: 'bytes(\n "ÿ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bytes(\n "ÿ"~string\n)~bytes^string_to_bytes', - type: "bytes", - }, - { - original: { - name: "string_unicode_vs_literal", - expr: "bytes('\\377') == b'\\377'", - value: { boolValue: false }, - }, - ast: '_==_(\n bytes(\n "ÿ"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n b"\\xff"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n bytes(\n "ÿ"~string\n )~bytes^string_to_bytes,\n b"\\xff"~bytes\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "double", - tests: [ - { - original: { - name: "int_zero", - expr: "double(0)", - value: { doubleValue: 0 }, - }, - ast: "double(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "double(\n 0~int\n)~double^int64_to_double", - type: "double", - }, - { - original: { - name: "int_pos", - expr: "double(1000000000000)", - value: { doubleValue: 1000000000000 }, - }, - ast: "double(\n 1000000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "double(\n 1000000000000~int\n)~double^int64_to_double", - type: "double", - }, - { - original: { - name: "int_neg", - expr: "double(-1000000000000000)", - value: { doubleValue: -1000000000000000 }, - }, - ast: "double(\n -1000000000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "double(\n -1000000000000000~int\n)~double^int64_to_double", - type: "double", - }, - { - original: { - name: "int_min_exact", - description: "Smallest contiguous representable int (-2^53).", - expr: "double(-9007199254740992)", - value: { doubleValue: -9007199254740992 }, - }, - ast: "double(\n -9007199254740992^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "double(\n -9007199254740992~int\n)~double^int64_to_double", - type: "double", - }, - { - original: { - name: "int_max_exact", - description: "Largest contiguous representable int (2^53).", - expr: "double(9007199254740992)", - value: { doubleValue: 9007199254740992 }, - }, - ast: "double(\n 9007199254740992^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "double(\n 9007199254740992~int\n)~double^int64_to_double", - type: "double", - }, - { - original: { - name: "int_range", - description: "Largest signed 64-bit. Rounds to nearest double.", - expr: "double(9223372036854775807)", - value: { doubleValue: 9223372036854776000 }, - }, - ast: "double(\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "double(\n 9223372036854775807~int\n)~double^int64_to_double", - type: "double", - }, - { - original: { - name: "uint_zero", - expr: "double(0u)", - value: { doubleValue: 0 }, - }, - ast: "double(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "double(\n 0u~uint\n)~double^uint64_to_double", - type: "double", - }, - { - original: { - name: "uint_pos", - expr: "double(123u)", - value: { doubleValue: 123 }, - }, - ast: "double(\n 123u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "double(\n 123u~uint\n)~double^uint64_to_double", - type: "double", - }, - { - original: { - name: "uint_max_exact", - description: "Largest contiguous representable int (2^53).", - expr: "double(9007199254740992u)", - value: { doubleValue: 9007199254740992 }, - }, - ast: "double(\n 9007199254740992u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "double(\n 9007199254740992u~uint\n)~double^uint64_to_double", - type: "double", - }, - { - original: { - name: "uint_range", - description: "Largest unsigned 64-bit.", - expr: "double(18446744073709551615u)", - value: { doubleValue: 18446744073709552000 }, - }, - ast: "double(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "double(\n 18446744073709551615u~uint\n)~double^uint64_to_double", - type: "double", - }, - { - original: { - name: "string_zero", - expr: "double('0')", - value: { doubleValue: 0 }, - }, - ast: 'double(\n "0"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'double(\n "0"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_zero_dec", - expr: "double('0.0')", - value: { doubleValue: 0 }, - }, - ast: 'double(\n "0.0"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'double(\n "0.0"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_neg_zero", - expr: "double('-0.0')", - value: { doubleValue: 0 }, - }, - ast: 'double(\n "-0.0"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'double(\n "-0.0"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_no_dec", - expr: "double('123')", - value: { doubleValue: 123 }, - }, - ast: 'double(\n "123"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'double(\n "123"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_pos", - expr: "double('123.456')", - value: { doubleValue: 123.456 }, - }, - ast: 'double(\n "123.456"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'double(\n "123.456"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_neg", - expr: "double('-987.654')", - value: { doubleValue: -987.654 }, - }, - ast: 'double(\n "-987.654"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'double(\n "-987.654"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_exp_pos_pos", - expr: "double('6.02214e23')", - value: { doubleValue: 6.02214e23 }, - }, - ast: 'double(\n "6.02214e23"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'double(\n "6.02214e23"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_exp_pos_neg", - expr: "double('1.38e-23')", - value: { doubleValue: 1.38e-23 }, - }, - ast: 'double(\n "1.38e-23"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'double(\n "1.38e-23"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_exp_neg_pos", - expr: "double('-84.32e7')", - value: { doubleValue: -843200000 }, - }, - ast: 'double(\n "-84.32e7"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'double(\n "-84.32e7"~string\n)~double^string_to_double', - type: "double", - }, - { - original: { - name: "string_exp_neg_neg", - expr: "double('-5.43e-21')", - value: { doubleValue: -5.43e-21 }, - }, - ast: 'double(\n "-5.43e-21"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'double(\n "-5.43e-21"~string\n)~double^string_to_double', - type: "double", - }, - ], - }, - { - name: "dyn", - tests: [ - { - original: { - name: "dyn_heterogeneous_list", - description: "No need to disable type checking.", - expr: "type(dyn([1, 'one']))", - value: { typeValue: "list" }, - }, - ast: 'type(\n dyn(\n [\n 1^#*expr.Constant_Int64Value#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'type(\n dyn(\n [\n 1~int,\n "one"~string\n ]~list(dyn)\n )~dyn^to_dyn\n)~type(dyn)^type', - type: "type(dyn)", - }, - ], - }, - { - name: "int", - tests: [ - { - original: { - name: "uint", - expr: "int(42u)", - value: { int64Value: "42" }, - }, - ast: "int(\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n 42u~uint\n)~int^uint64_to_int64", - type: "int", - }, - { - original: { - name: "uint_zero", - expr: "int(0u)", - value: { int64Value: "0" }, - }, - ast: "int(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n 0u~uint\n)~int^uint64_to_int64", - type: "int", - }, - { - original: { - name: "uint_max_exact", - expr: "int(9223372036854775807u)", - value: { int64Value: "9223372036854775807" }, - }, - ast: "int(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n 9223372036854775807u~uint\n)~int^uint64_to_int64", - type: "int", - }, - { - original: { - name: "uint_range", - expr: "int(18446744073709551615u)", - evalError: { errors: [{ message: "range error" }] }, - }, - ast: "int(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n 18446744073709551615u~uint\n)~int^uint64_to_int64", - type: "int", - }, - { - original: { - name: "double_round_neg", - expr: "int(-123.456)", - value: { int64Value: "-123" }, - }, - ast: "int(\n -123.456^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n -123.456~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_truncate", - expr: "int(1.9)", - value: { int64Value: "1" }, - }, - ast: "int(\n 1.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n 1.9~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_truncate_neg", - expr: "int(-7.9)", - value: { int64Value: "-7" }, - }, - ast: "int(\n -7.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n -7.9~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_half_pos", - expr: "int(11.5)", - value: { int64Value: "11" }, - }, - ast: "int(\n 11.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n 11.5~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_half_neg", - expr: "int(-3.5)", - value: { int64Value: "-3" }, - }, - ast: "int(\n -3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n -3.5~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_big_exact", - description: - "Beyond exact range (2^53), but no loss of precision (2^55).", - expr: "int(double(36028797018963968))", - value: { int64Value: "36028797018963968" }, - }, - ast: "int(\n double(\n 36028797018963968^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n double(\n 36028797018963968~int\n )~double^int64_to_double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_big_precision", - description: - "Beyond exact range (2^53), but loses precision (2^55 + 1).", - expr: "int(double(36028797018963969))", - value: { int64Value: "36028797018963968" }, - }, - ast: "int(\n double(\n 36028797018963969^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n double(\n 36028797018963969~int\n )~double^int64_to_double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_int_max_range", - description: - "The double(2^63-1) cast produces a floating point value outside the int range", - expr: "int(9223372036854775807.0)", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "int(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n 9.223372036854776e+18~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_int_min_range", - description: - "The double(-2^63) cast produces a floating point value outside the int range", - expr: "int(-9223372036854775808.0)", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "int(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n -9.223372036854776e+18~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_range", - expr: "int(1e99)", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "int(\n 1e+99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n 1e+99~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "string", - expr: "int('987')", - value: { int64Value: "987" }, - }, - ast: 'int(\n "987"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'int(\n "987"~string\n)~int^string_to_int64', - type: "int", - }, - { - original: { - name: "timestamp", - expr: "int(timestamp('2004-09-16T23:59:59Z'))", - value: { int64Value: "1095379199" }, - }, - ast: 'int(\n timestamp(\n "2004-09-16T23:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'int(\n timestamp(\n "2004-09-16T23:59:59Z"~string\n )~timestamp^string_to_timestamp\n)~int^timestamp_to_int64', - type: "int", - }, - ], - }, - { - name: "string", - tests: [ - { - original: { - name: "int", - expr: "string(123)", - value: { stringValue: "123" }, - }, - ast: "string(\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "string(\n 123~int\n)~string^int64_to_string", - type: "string", - }, - { - original: { - name: "int_neg", - expr: "string(-456)", - value: { stringValue: "-456" }, - }, - ast: "string(\n -456^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "string(\n -456~int\n)~string^int64_to_string", - type: "string", - }, - { - original: { - name: "uint", - expr: "string(9876u)", - value: { stringValue: "9876" }, - }, - ast: "string(\n 9876u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "string(\n 9876u~uint\n)~string^uint64_to_string", - type: "string", - }, - { - original: { - name: "double", - expr: "string(123.456)", - value: { stringValue: "123.456" }, - }, - ast: "string(\n 123.456^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "string(\n 123.456~double\n)~string^double_to_string", - type: "string", - }, - { - original: { - name: "double_hard", - expr: "string(-4.5e-3)", - value: { stringValue: "-0.0045" }, - }, - ast: "string(\n -0.0045^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "string(\n -0.0045~double\n)~string^double_to_string", - type: "string", - }, - { - original: { - name: "bytes", - expr: "string(b'abc')", - value: { stringValue: "abc" }, - }, - ast: 'string(\n b"abc"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'string(\n b"abc"~bytes\n)~string^bytes_to_string', - type: "string", - }, - { - original: { - name: "bytes_unicode", - expr: "string(b'\\303\\277')", - value: { stringValue: "ÿ" }, - }, - ast: 'string(\n b"ÿ"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'string(\n b"ÿ"~bytes\n)~string^bytes_to_string', - type: "string", - }, - { - original: { - name: "bytes_invalid", - expr: "string(b'\\000\\xff')", - evalError: { errors: [{ message: "invalid UTF-8" }] }, - }, - ast: 'string(\n b"\\x00\\xff"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'string(\n b"\\x00\\xff"~bytes\n)~string^bytes_to_string', - type: "string", - }, - ], - }, - { - name: "type", - tests: [ - { - original: { - name: "bool", - expr: "type(true)", - value: { typeValue: "bool" }, - }, - ast: "type(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "type(\n true~bool\n)~type(bool)^type", - type: "type(bool)", - }, - { - original: { - name: "bool_denotation", - expr: "bool", - value: { typeValue: "bool" }, - }, - ast: "bool^#*expr.Expr_IdentExpr#", - checkedAst: "bool~type(bool)^bool", - type: "type(bool)", - }, - { - original: { - name: "dyn_no_denotation", - expr: "dyn", - disableCheck: true, - evalError: { errors: [{ message: "unknown variable" }] }, - }, - ast: "dyn^#*expr.Expr_IdentExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'dyn' (in container '')\n | dyn\n | ^", - }, - { - original: { - name: "int", - expr: "type(0)", - value: { typeValue: "int" }, - }, - ast: "type(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "type(\n 0~int\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "int_denotation", - expr: "int", - value: { typeValue: "int" }, - }, - ast: "int^#*expr.Expr_IdentExpr#", - checkedAst: "int~type(int)^int", - type: "type(int)", - }, - { - original: { - name: "eq_same", - expr: "type(true) == type(false)", - value: { boolValue: true }, - }, - ast: "_==_(\n type(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n type(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n type(\n true~bool\n )~type(bool)^type,\n type(\n false~bool\n )~type(bool)^type\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "uint", - expr: "type(64u)", - value: { typeValue: "uint" }, - }, - ast: "type(\n 64u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "type(\n 64u~uint\n)~type(uint)^type", - type: "type(uint)", - }, - { - original: { - name: "uint_denotation", - expr: "uint", - value: { typeValue: "uint" }, - }, - ast: "uint^#*expr.Expr_IdentExpr#", - checkedAst: "uint~type(uint)^uint", - type: "type(uint)", - }, - { - original: { - name: "double", - expr: "type(3.14)", - value: { typeValue: "double" }, - }, - ast: "type(\n 3.14^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "type(\n 3.14~double\n)~type(double)^type", - type: "type(double)", - }, - { - original: { - name: "double_denotation", - expr: "double", - value: { typeValue: "double" }, - }, - ast: "double^#*expr.Expr_IdentExpr#", - checkedAst: "double~type(double)^double", - type: "type(double)", - }, - { - original: { - name: "null_type", - expr: "type(null)", - value: { typeValue: "null_type" }, - }, - ast: "type(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "type(\n null~null\n)~type(null)^type", - type: "type(null)", - }, - { - original: { - name: "null_type_denotation", - expr: "null_type", - value: { typeValue: "null_type" }, - }, - ast: "null_type^#*expr.Expr_IdentExpr#", - checkedAst: "null_type~type(null)^null_type", - type: "type(null)", - }, - { - original: { - name: "string", - expr: "type('foo')", - value: { typeValue: "string" }, - }, - ast: 'type(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'type(\n "foo"~string\n)~type(string)^type', - type: "type(string)", - }, - { - original: { - name: "string_denotation", - expr: "string", - value: { typeValue: "string" }, - }, - ast: "string^#*expr.Expr_IdentExpr#", - checkedAst: "string~type(string)^string", - type: "type(string)", - }, - { - original: { - name: "bytes", - expr: "type(b'\\xff')", - value: { typeValue: "bytes" }, - }, - ast: 'type(\n b"\\xff"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'type(\n b"\\xff"~bytes\n)~type(bytes)^type', - type: "type(bytes)", - }, - { - original: { - name: "bytes_denotation", - expr: "bytes", - value: { typeValue: "bytes" }, - }, - ast: "bytes^#*expr.Expr_IdentExpr#", - checkedAst: "bytes~type(bytes)^bytes", - type: "type(bytes)", - }, - { - original: { - name: "list", - expr: "type([1, 2, 3])", - value: { typeValue: "list" }, - }, - ast: "type(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~type(list(int))^type", - type: "type(list(int))", - }, - { - original: { - name: "list_denotation", - expr: "list", - value: { typeValue: "list" }, - }, - ast: "list^#*expr.Expr_IdentExpr#", - checkedAst: "list~type(list(dyn))^list", - type: "type(list(dyn))", - }, - { - original: { - name: "lists_monomorphic", - expr: "type([1, 2, 3]) == type(['one', 'two', 'three'])", - value: { boolValue: true }, - }, - ast: '_==_(\n type(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n [\n "one"^#*expr.Constant_StringValue#,\n "two"^#*expr.Constant_StringValue#,\n "three"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n type(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n )~type(list(int))^type,\n type(\n [\n "one"~string,\n "two"~string,\n "three"~string\n ]~list(string)\n )~type(list(string))^type\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "map", - expr: "type({4: 16})", - value: { typeValue: "map" }, - }, - ast: "type(\n {\n 4^#*expr.Constant_Int64Value#:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n {\n 4~int:16~int\n }~map(int, int)\n)~type(map(int, int))^type", - type: "type(map(int, int))", - }, - { - original: { - name: "map_denotation", - expr: "map", - value: { typeValue: "map" }, - }, - ast: "map^#*expr.Expr_IdentExpr#", - checkedAst: "map~type(map(dyn, dyn))^map", - type: "type(map(dyn, dyn))", - }, - { - original: { - name: "map_monomorphic", - expr: "type({'one': 1}) == type({1: 'one'})", - value: { boolValue: true }, - }, - ast: '_==_(\n type(\n {\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n {\n 1^#*expr.Constant_Int64Value#:"one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n type(\n {\n "one"~string:1~int\n }~map(string, int)\n )~type(map(string, int))^type,\n type(\n {\n 1~int:"one"~string\n }~map(int, string)\n )~type(map(int, string))^type\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_diff", - expr: "type(7) == type(7u)", - value: { boolValue: false }, - }, - ast: "_==_(\n type(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n type(\n 7u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n type(\n 7~int\n )~type(int)^type,\n type(\n 7u~uint\n )~type(uint)^type\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "neq_same", - expr: "type(0.0) != type(-0.0)", - value: { boolValue: false }, - }, - ast: "_!=_(\n type(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n type(\n -0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n type(\n 0~double\n )~type(double)^type,\n type(\n -0~double\n )~type(double)^type\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "neq_diff", - expr: "type(0.0) != type(0)", - value: { boolValue: true }, - }, - ast: "_!=_(\n type(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n type(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n type(\n 0~double\n )~type(double)^type,\n type(\n 0~int\n )~type(int)^type\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "meta", - expr: "type(type(7)) == type(type(7u))", - value: { boolValue: true }, - }, - ast: "_==_(\n type(\n type(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n type(\n 7u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n type(\n type(\n 7~int\n )~type(int)^type\n )~type(type(int))^type,\n type(\n type(\n 7u~uint\n )~type(uint)^type\n )~type(type(uint))^type\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "type", - expr: "type(int)", - value: { typeValue: "type" }, - }, - ast: "type(\n int^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: "type(\n int~type(int)^int\n)~type(type(int))^type", - type: "type(type(int))", - }, - { - original: { - name: "type_denotation", - expr: "type", - value: { typeValue: "type" }, - }, - ast: "type^#*expr.Expr_IdentExpr#", - checkedAst: "type~type(type)^type", - type: "type(type)", - }, - { - original: { - name: "type_type", - expr: "type(type)", - value: { typeValue: "type" }, - }, - ast: "type(\n type^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n type~type(type)^type\n)~type(type(type))^type", - type: "type(type(type))", - }, - ], - }, - { - name: "uint", - tests: [ - { - original: { - name: "int", - expr: "uint(1729)", - value: { uint64Value: "1729" }, - }, - ast: "uint(\n 1729^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "uint(\n 1729~int\n)~uint^int64_to_uint64", - type: "uint", - }, - { - original: { - name: "int_max", - expr: "uint(9223372036854775807)", - value: { uint64Value: "9223372036854775807" }, - }, - ast: "uint(\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "uint(\n 9223372036854775807~int\n)~uint^int64_to_uint64", - type: "uint", - }, - { - original: { - name: "int_neg", - expr: "uint(-1)", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "uint(\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "uint(\n -1~int\n)~uint^int64_to_uint64", - type: "uint", - }, - { - original: { - name: "double", - expr: "uint(3.14159265)", - value: { uint64Value: "3" }, - }, - ast: "uint(\n 3.14159265^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "uint(\n 3.14159265~double\n)~uint^double_to_uint64", - type: "uint", - }, - { - original: { - name: "double_truncate", - expr: "uint(1.9)", - value: { uint64Value: "1" }, - }, - ast: "uint(\n 1.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "uint(\n 1.9~double\n)~uint^double_to_uint64", - type: "uint", - }, - { - original: { - name: "double_half", - expr: "uint(25.5)", - value: { uint64Value: "25" }, - }, - ast: "uint(\n 25.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "uint(\n 25.5~double\n)~uint^double_to_uint64", - type: "uint", - }, - { - original: { - name: "double_big_exact", - description: - "Beyond exact range (2^53), but no loss of precision (2^55).", - expr: "uint(double(36028797018963968u))", - value: { uint64Value: "36028797018963968" }, - }, - ast: "uint(\n double(\n 36028797018963968u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "uint(\n double(\n 36028797018963968u~uint\n )~double^uint64_to_double\n)~uint^double_to_uint64", - type: "uint", - }, - { - original: { - name: "double_big_precision", - description: - "Beyond exact range (2^53), but loses precision (2^55 + 1).", - expr: "uint(double(36028797018963969u))", - value: { uint64Value: "36028797018963968" }, - }, - ast: "uint(\n double(\n 36028797018963969u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "uint(\n double(\n 36028797018963969u~uint\n )~double^uint64_to_double\n)~uint^double_to_uint64", - type: "uint", - }, - { - original: { - name: "double_uint_max_range", - description: - "The exact conversion of uint max as a double does not round trip.", - expr: "int(18446744073709551615.0)", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "int(\n 1.8446744073709552e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n 1.8446744073709552e+19~double\n)~int^double_to_int64", - type: "int", - }, - { - original: { - name: "double_range_beyond_uint", - expr: "uint(6.022e23)", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "uint(\n 6.022e+23^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "uint(\n 6.022e+23~double\n)~uint^double_to_uint64", - type: "uint", - }, - { - original: { - name: "string", - expr: "uint('300')", - value: { uint64Value: "300" }, - }, - ast: 'uint(\n "300"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'uint(\n "300"~string\n)~uint^string_to_uint64', - type: "uint", - }, - ], - }, - { - name: "bool", - tests: [ - { - original: { - name: "string_1", - expr: "bool('1')", - value: { boolValue: true }, - }, - ast: 'bool(\n "1"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "1"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_t", - expr: "bool('t')", - value: { boolValue: true }, - }, - ast: 'bool(\n "t"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "t"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_true_lowercase", - expr: "bool('true')", - value: { boolValue: true }, - }, - ast: 'bool(\n "true"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "true"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_true_uppercase", - expr: "bool('TRUE')", - value: { boolValue: true }, - }, - ast: 'bool(\n "TRUE"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "TRUE"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_true_pascalcase", - expr: "bool('True')", - value: { boolValue: true }, - }, - ast: 'bool(\n "True"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "True"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_0", - expr: "bool('0')", - value: { boolValue: false }, - }, - ast: 'bool(\n "0"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "0"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_f", - expr: "bool('f')", - value: { boolValue: false }, - }, - ast: 'bool(\n "f"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "f"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_false_lowercase", - expr: "bool('false')", - value: { boolValue: false }, - }, - ast: 'bool(\n "false"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "false"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_false_uppercase", - expr: "bool('FALSE')", - value: { boolValue: false }, - }, - ast: 'bool(\n "FALSE"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "FALSE"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_false_pascalcase", - expr: "bool('False')", - value: { boolValue: false }, - }, - ast: 'bool(\n "False"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "False"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_true_badcase", - expr: "bool('TrUe')", - evalError: { errors: [{ message: "Type conversion error" }] }, - }, - ast: 'bool(\n "TrUe"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "TrUe"~string\n)~bool^string_to_bool', - type: "bool", - }, - { - original: { - name: "string_false_badcase", - expr: "bool('FaLsE')", - evalError: { errors: [{ message: "Type conversion error" }] }, - }, - ast: 'bool(\n "FaLsE"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bool(\n "FaLsE"~string\n)~bool^string_to_bool', - type: "bool", - }, - ], - }, - { - name: "identity", - tests: [ - { - original: { - name: "bool", - expr: "bool(true)", - value: { boolValue: true }, - }, - ast: "bool(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "bool(\n true~bool\n)~bool^bool_to_bool", - type: "bool", - }, - { - original: { - name: "int", - expr: "int(1)", - value: { int64Value: "1" }, - }, - ast: "int(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "int(\n 1~int\n)~int^int64_to_int64", - type: "int", - }, - { - original: { - name: "uint", - expr: "uint(1u)", - value: { uint64Value: "1" }, - }, - ast: "uint(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "uint(\n 1u~uint\n)~uint^uint64_to_uint64", - type: "uint", - }, - { - original: { - name: "double", - expr: "double(5.5)", - value: { doubleValue: 5.5 }, - }, - ast: "double(\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "double(\n 5.5~double\n)~double^double_to_double", - type: "double", - }, - { - original: { - name: "string", - expr: "string('hello')", - value: { stringValue: "hello" }, - }, - ast: 'string(\n "hello"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'string(\n "hello"~string\n)~string^string_to_string', - type: "string", - }, - { - original: { - name: "bytes", - expr: "bytes(b'abc')", - value: { bytesValue: "YWJj" }, - }, - ast: 'bytes(\n b"abc"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'bytes(\n b"abc"~bytes\n)~bytes^bytes_to_bytes', - type: "bytes", - }, - { - original: { - name: "duration", - expr: "duration(duration('100s')) == duration('100s')", - value: { boolValue: true }, - }, - ast: '_==_(\n duration(\n duration(\n "100s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n "100s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n duration(\n duration(\n "100s"~string\n )~duration^string_to_duration\n )~duration^duration_to_duration,\n duration(\n "100s"~string\n )~duration^string_to_duration\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "timestamp", - expr: "timestamp(timestamp(1000000000)) == timestamp(1000000000)", - value: { boolValue: true }, - }, - ast: "_==_(\n timestamp(\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n timestamp(\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp\n )~timestamp^timestamp_to_timestamp,\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp\n)~bool^equals", - type: "bool", - }, - ], - }, - ], - }, - { - name: "dynamic", - suites: [ - { - name: "int32", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Int32Value{value: -123}", - value: { int64Value: "-123" }, - }, - ast: "google.protobuf.Int32Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Int32Value{\n value:-123~int\n}~wrapper(int)^google.protobuf.Int32Value", - type: "wrapper(int)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Int32Value{value: -123}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.Int32Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:40: type 'wrapper(int)' does not support field selection\n | google.protobuf.Int32Value{value: -123}.value\n | .......................................^", - }, - { - original: { - name: "literal_zero", - expr: "google.protobuf.Int32Value{}", - value: { int64Value: "0" }, - }, - ast: "google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value", - type: "wrapper(int)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.Int32Value" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.Int32Value", - value: 2000000, - }, - }, - }, - }, - value: { int64Value: "2000000" }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(int)^x", - type: "wrapper(int)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_int32_wrapper: 432}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32Wrapper: 432, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:432^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:432~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_zero", - expr: "TestAllTypes{single_int32_wrapper: 0}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32Wrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_max", - expr: "TestAllTypes{single_int32_wrapper: 2147483647}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32Wrapper: 2147483647, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:2147483647^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:2147483647~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_min", - expr: "TestAllTypes{single_int32_wrapper: -2147483648}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32Wrapper: -2147483648, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:-2147483648^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:-2147483648~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_range", - expr: "TestAllTypes{single_int32_wrapper: 12345678900}", - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "range error" }] }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:12345678900^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:12345678900~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper", - container: "cel.expr.conformance.proto2", - value: { int64Value: "642" }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:642^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:642~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - { - original: { - name: "field_read_proto2_zero", - expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper", - container: "cel.expr.conformance.proto2", - value: { int64Value: "0" }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - { - original: { - name: "field_read_proto2_unset", - expr: "TestAllTypes{}.single_int32_wrapper", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_int32_wrapper: -975}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32Wrapper: -975, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:-975^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-975~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_zero", - expr: "TestAllTypes{single_int32_wrapper: 0}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32Wrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_max", - expr: "TestAllTypes{single_int32_wrapper: 2147483647}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32Wrapper: 2147483647, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:2147483647^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:2147483647~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_min", - expr: "TestAllTypes{single_int32_wrapper: -2147483648}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32Wrapper: -2147483648, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:-2147483648^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-2147483648~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_range", - expr: "TestAllTypes{single_int32_wrapper: -998877665544332211}", - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "range error" }] }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:-998877665544332211^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-998877665544332211~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper", - container: "cel.expr.conformance.proto3", - value: { int64Value: "642" }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:642^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:642~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - { - original: { - name: "field_read_proto3_zero", - expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper", - container: "cel.expr.conformance.proto3", - value: { int64Value: "0" }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - { - original: { - name: "field_read_proto3_unset", - expr: "TestAllTypes{}.single_int32_wrapper", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - ], - }, - { - name: "int64", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Int64Value{value: -123}", - value: { int64Value: "-123" }, - }, - ast: "google.protobuf.Int64Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Int64Value{\n value:-123~int\n}~wrapper(int)^google.protobuf.Int64Value", - type: "wrapper(int)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Int64Value{value: -123}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.Int64Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:40: type 'wrapper(int)' does not support field selection\n | google.protobuf.Int64Value{value: -123}.value\n | .......................................^", - }, - { - original: { - name: "literal_zero", - expr: "google.protobuf.Int64Value{}", - value: { int64Value: "0" }, - }, - ast: "google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value", - type: "wrapper(int)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.Int64Value" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.Int64Value", - value: "2000000", - }, - }, - }, - }, - value: { int64Value: "2000000" }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(int)^x", - type: "wrapper(int)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_int64_wrapper: 432}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt64Wrapper: "432", - }, - }, - }, - ast: "TestAllTypes{\n single_int64_wrapper:432^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:432~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_zero", - expr: "TestAllTypes{single_int64_wrapper: 0}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt64Wrapper: "0", - }, - }, - }, - ast: "TestAllTypes{\n single_int64_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_int64_wrapper: -975}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt64Wrapper: "-975", - }, - }, - }, - ast: "TestAllTypes{\n single_int64_wrapper:-975^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:-975~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_zero", - expr: "TestAllTypes{single_int64_wrapper: 0}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt64Wrapper: "0", - }, - }, - }, - ast: "TestAllTypes{\n single_int64_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - { - name: "uint32", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.UInt32Value{value: 123u}", - value: { uint64Value: "123" }, - }, - ast: "google.protobuf.UInt32Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.UInt32Value{\n value:123u~uint\n}~wrapper(uint)^google.protobuf.UInt32Value", - type: "wrapper(uint)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.UInt32Value{value: 123u}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.UInt32Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:41: type 'wrapper(uint)' does not support field selection\n | google.protobuf.UInt32Value{value: 123u}.value\n | ........................................^", - }, - { - original: { - name: "literal_zero", - expr: "google.protobuf.UInt32Value{}", - value: { uint64Value: "0" }, - }, - ast: "google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value", - type: "wrapper(uint)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.UInt32Value" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.UInt32Value", - value: 2000000, - }, - }, - }, - }, - value: { uint64Value: "2000000" }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(uint)^x", - type: "wrapper(uint)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_uint32_wrapper: 432u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint32Wrapper: 432, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:432u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:432u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_zero", - expr: "TestAllTypes{single_uint32_wrapper: 0u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint32Wrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_max", - expr: "TestAllTypes{single_uint32_wrapper: 4294967295u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint32Wrapper: 4294967295, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:4294967295u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:4294967295u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_range", - expr: "TestAllTypes{single_uint32_wrapper: 6111222333u}", - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "range error" }] }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:6111222333u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:6111222333u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_uint32_wrapper: 975u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint32Wrapper: 975, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:975u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:975u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_zero", - expr: "TestAllTypes{single_uint32_wrapper: 0u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint32Wrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_max", - expr: "TestAllTypes{single_uint32_wrapper: 4294967295u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint32Wrapper: 4294967295, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:4294967295u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:4294967295u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_range", - expr: "TestAllTypes{single_uint32_wrapper: 6111222333u}", - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "range error" }] }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:6111222333u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:6111222333u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_uint32_wrapper: 258u}.single_uint32_wrapper", - container: "cel.expr.conformance.proto2", - value: { uint64Value: "258" }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:258u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:258u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)", - type: "wrapper(uint)", - }, - { - original: { - name: "field_read_proto2_zero", - expr: "TestAllTypes{single_uint32_wrapper: 0u}.single_uint32_wrapper", - container: "cel.expr.conformance.proto2", - value: { uint64Value: "0" }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)", - type: "wrapper(uint)", - }, - { - original: { - name: "field_read_proto2_unset", - expr: "TestAllTypes{}.single_uint32_wrapper", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)", - type: "wrapper(uint)", - }, - ], - }, - { - name: "uint64", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.UInt64Value{value: 123u}", - value: { uint64Value: "123" }, - }, - ast: "google.protobuf.UInt64Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.UInt64Value{\n value:123u~uint\n}~wrapper(uint)^google.protobuf.UInt64Value", - type: "wrapper(uint)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.UInt64Value{value: 123u}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.UInt64Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:41: type 'wrapper(uint)' does not support field selection\n | google.protobuf.UInt64Value{value: 123u}.value\n | ........................................^", - }, - { - original: { - name: "literal_zero", - expr: "google.protobuf.UInt64Value{}", - value: { uint64Value: "0" }, - }, - ast: "google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value", - type: "wrapper(uint)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.UInt64Value" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.UInt64Value", - value: "2000000", - }, - }, - }, - }, - value: { uint64Value: "2000000" }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(uint)^x", - type: "wrapper(uint)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_uint64_wrapper: 432u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint64Wrapper: "432", - }, - }, - }, - ast: "TestAllTypes{\n single_uint64_wrapper:432u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:432u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_zero", - expr: "TestAllTypes{single_uint64_wrapper: 0u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint64Wrapper: "0", - }, - }, - }, - ast: "TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_uint64_wrapper: 975u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint64Wrapper: "975", - }, - }, - }, - ast: "TestAllTypes{\n single_uint64_wrapper:975u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:975u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_zero", - expr: "TestAllTypes{single_uint64_wrapper: 0u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint64Wrapper: "0", - }, - }, - }, - ast: "TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_uint64_wrapper: 5123123123u}.single_uint64_wrapper", - container: "cel.expr.conformance.proto2", - value: { uint64Value: "5123123123" }, - }, - ast: "TestAllTypes{\n single_uint64_wrapper:5123123123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:5123123123u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)", - type: "wrapper(uint)", - }, - { - original: { - name: "field_read_proto2_zero", - expr: "TestAllTypes{single_uint64_wrapper: 0u}.single_uint64_wrapper", - container: "cel.expr.conformance.proto2", - value: { uint64Value: "0" }, - }, - ast: "TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)", - type: "wrapper(uint)", - }, - { - original: { - name: "field_read_proto2_unset", - expr: "TestAllTypes{}.single_uint64_wrapper", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)", - type: "wrapper(uint)", - }, - ], - }, - { - name: "float", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.FloatValue{value: -1.5e3}", - value: { doubleValue: -1500 }, - }, - ast: "google.protobuf.FloatValue{\n value:-1500^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.FloatValue{\n value:-1500~double\n}~wrapper(double)^google.protobuf.FloatValue", - type: "wrapper(double)", - }, - { - original: { - name: "literal_not_double", - description: - "Use a number with no exact representation to make sure we actually narrow to a float.", - expr: "google.protobuf.FloatValue{value: 1.333} == 1.333", - value: { boolValue: false }, - }, - ast: "_==_(\n google.protobuf.FloatValue{\n value:1.333^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1.333^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.FloatValue{\n value:1.333~double\n }~wrapper(double)^google.protobuf.FloatValue,\n 1.333~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.FloatValue{value: 3.1416}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.FloatValue{\n value:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:42: type 'wrapper(double)' does not support field selection\n | google.protobuf.FloatValue{value: 3.1416}.value\n | .........................................^", - }, - { - original: { - name: "literal_zero", - expr: "google.protobuf.FloatValue{}", - value: { doubleValue: 0 }, - }, - ast: "google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue", - type: "wrapper(double)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.FloatValue" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.FloatValue", - value: -1250000, - }, - }, - }, - }, - value: { doubleValue: -1250000 }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(double)^x", - type: "wrapper(double)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_float_wrapper: 86.75}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFloatWrapper: 86.75, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:86.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:86.75~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_zero", - expr: "TestAllTypes{single_float_wrapper: 0.0}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFloatWrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_subnorm", - description: - "Subnormal single floats range from ~1e-38 to ~1e-45.", - expr: "TestAllTypes{single_float_wrapper: 1e-40}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFloatWrapper: 1e-40, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:1e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-40~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_round_to_zero", - description: - "Subnormal single floats range from ~1e-38 to ~1e-45.", - expr: "TestAllTypes{single_float_wrapper: 1e-50}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFloatWrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:1e-50^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-50~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_range", - description: "Single float max is about 3.4e38", - expr: "TestAllTypes{single_float_wrapper: 1.4e55}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFloatWrapper: "Infinity", - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:1.4e+55^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1.4e+55~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_float_wrapper: -12.375}.single_float_wrapper", - container: "cel.expr.conformance.proto2", - value: { doubleValue: -12.375 }, - }, - ast: "TestAllTypes{\n single_float_wrapper:-12.375^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:-12.375~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_read_proto2_zero", - expr: "TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper", - container: "cel.expr.conformance.proto2", - value: { doubleValue: 0 }, - }, - ast: "TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_read_proto2_unset", - expr: "TestAllTypes{}.single_float_wrapper", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_float_wrapper: -9.75}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleFloatWrapper: -9.75, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:-9.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.75~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_zero", - expr: "TestAllTypes{single_float_wrapper: 0.0}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleFloatWrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_subnorm", - description: - "Subnormal single floats range from ~1e-38 to ~1e-45.", - expr: "TestAllTypes{single_float_wrapper: 1e-40}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFloatWrapper: 1e-40, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:1e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-40~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_round_to_zero", - expr: "TestAllTypes{single_float_wrapper: -9.9e-100}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleFloatWrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:-9.9e-100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.9e-100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_range", - description: "Single float min is about -3.4e38", - expr: "TestAllTypes{single_float_wrapper: -9.9e100}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleFloatWrapper: "-Infinity", - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:-9.9e+100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.9e+100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_float_wrapper: 64.25}.single_float_wrapper", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 64.25 }, - }, - ast: "TestAllTypes{\n single_float_wrapper:64.25^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:64.25~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_read_proto3_zero", - expr: "TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 0 }, - }, - ast: "TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_read_proto3_unset", - expr: "TestAllTypes{}.single_float_wrapper", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - ], - }, - { - name: "double", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.DoubleValue{value: -1.5e3}", - value: { doubleValue: -1500 }, - }, - ast: "google.protobuf.DoubleValue{\n value:-1500^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.DoubleValue{\n value:-1500~double\n}~wrapper(double)^google.protobuf.DoubleValue", - type: "wrapper(double)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.DoubleValue{value: 3.1416}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.DoubleValue{\n value:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:43: type 'wrapper(double)' does not support field selection\n | google.protobuf.DoubleValue{value: 3.1416}.value\n | ..........................................^", - }, - { - original: { - name: "literal_zero", - expr: "google.protobuf.DoubleValue{}", - value: { doubleValue: 0 }, - }, - ast: "google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue", - type: "wrapper(double)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.DoubleValue" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.DoubleValue", - value: -1250000, - }, - }, - }, - }, - value: { doubleValue: -1250000 }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(double)^x", - type: "wrapper(double)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_double_wrapper: 86.75}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleDoubleWrapper: 86.75, - }, - }, - }, - ast: "TestAllTypes{\n single_double_wrapper:86.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:86.75~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_zero", - expr: "TestAllTypes{single_double_wrapper: 0.0}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleDoubleWrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_range", - expr: "TestAllTypes{single_double_wrapper: 1.4e55}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleDoubleWrapper: 1.4e55, - }, - }, - }, - ast: "TestAllTypes{\n single_double_wrapper:1.4e+55^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:1.4e+55~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_double_wrapper: -12.375}.single_double_wrapper", - container: "cel.expr.conformance.proto2", - value: { doubleValue: -12.375 }, - }, - ast: "TestAllTypes{\n single_double_wrapper:-12.375^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:-12.375~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_read_proto2_zero", - expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper", - container: "cel.expr.conformance.proto2", - value: { int64Value: "0" }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - { - original: { - name: "field_read_proto2_unset", - expr: "TestAllTypes{}.single_double_wrapper", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_double_wrapper: -9.75}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleDoubleWrapper: -9.75, - }, - }, - }, - ast: "TestAllTypes{\n single_double_wrapper:-9.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:-9.75~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_zero", - expr: "TestAllTypes{single_double_wrapper: 0.0}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleDoubleWrapper: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_range", - expr: "TestAllTypes{single_double_wrapper: -9.9e100}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleDoubleWrapper: -9.9e100, - }, - }, - }, - ast: "TestAllTypes{\n single_double_wrapper:-9.9e+100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:-9.9e+100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_double_wrapper: 64.25}.single_double_wrapper", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 64.25 }, - }, - ast: "TestAllTypes{\n single_double_wrapper:64.25^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:64.25~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_read_proto3_zero", - expr: "TestAllTypes{single_double_wrapper: 0.0}.single_double_wrapper", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 0 }, - }, - ast: "TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - { - original: { - name: "field_read_proto3_unset", - expr: "TestAllTypes{}.single_double_wrapper", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)", - type: "wrapper(double)", - }, - ], - }, - { - name: "bool", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.BoolValue{value: true}", - value: { boolValue: true }, - }, - ast: "google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.BoolValue{\n value:true~bool\n}~wrapper(bool)^google.protobuf.BoolValue", - type: "wrapper(bool)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.BoolValue{value: true}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:39: type 'wrapper(bool)' does not support field selection\n | google.protobuf.BoolValue{value: true}.value\n | ......................................^", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.BoolValue{}", - value: { boolValue: false }, - }, - ast: "google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue", - type: "wrapper(bool)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.BoolValue" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.BoolValue", - value: true, - }, - }, - }, - }, - value: { boolValue: true }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(bool)^x", - type: "wrapper(bool)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_bool_wrapper: true}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleBoolWrapper: true, - }, - }, - }, - ast: "TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_false", - expr: "TestAllTypes{single_bool_wrapper: false}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleBoolWrapper: false, - }, - }, - }, - ast: "TestAllTypes{\n single_bool_wrapper:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_bool_wrapper: true}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleBoolWrapper: true, - }, - }, - }, - ast: "TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_false", - expr: "TestAllTypes{single_bool_wrapper: false}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleBoolWrapper: false, - }, - }, - }, - ast: "TestAllTypes{\n single_bool_wrapper:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - { - name: "string", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.StringValue{value: 'foo'}", - value: { stringValue: "foo" }, - }, - ast: 'google.protobuf.StringValue{\n value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.StringValue{\n value:"foo"~string\n}~wrapper(string)^google.protobuf.StringValue', - type: "wrapper(string)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.StringValue{value: 'foo'}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: 'google.protobuf.StringValue{\n value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#', - error: - "ERROR: \u003cinput\u003e:1:42: type 'wrapper(string)' does not support field selection\n | google.protobuf.StringValue{value: 'foo'}.value\n | .........................................^", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.StringValue{}", - value: { stringValue: "" }, - }, - ast: "google.protobuf.StringValue{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue", - type: "wrapper(string)", - }, - { - original: { - name: "literal_unicode", - expr: "google.protobuf.StringValue{value: 'flambé'}", - value: { stringValue: "flambé" }, - }, - ast: 'google.protobuf.StringValue{\n value:"flambé"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.StringValue{\n value:"flambé"~string\n}~wrapper(string)^google.protobuf.StringValue', - type: "wrapper(string)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.StringValue" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.StringValue", - value: "bar", - }, - }, - }, - }, - value: { stringValue: "bar" }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(string)^x", - type: "wrapper(string)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_string_wrapper: 'baz'}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleStringWrapper: "baz", - }, - }, - }, - ast: 'TestAllTypes{\n single_string_wrapper:"baz"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:"baz"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_empty", - expr: "TestAllTypes{single_string_wrapper: ''}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleStringWrapper: "", - }, - }, - }, - ast: 'TestAllTypes{\n single_string_wrapper:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:""~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_string_wrapper: 'bletch'}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleStringWrapper: "bletch", - }, - }, - }, - ast: 'TestAllTypes{\n single_string_wrapper:"bletch"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:"bletch"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_empty", - expr: "TestAllTypes{single_string_wrapper: ''}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleStringWrapper: "", - }, - }, - }, - ast: 'TestAllTypes{\n single_string_wrapper:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:""~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - { - name: "bytes", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.BytesValue{value: b'foo\\123'}", - value: { bytesValue: "Zm9vUw==" }, - }, - ast: 'google.protobuf.BytesValue{\n value:b"fooS"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.BytesValue{\n value:b"fooS"~bytes\n}~wrapper(bytes)^google.protobuf.BytesValue', - type: "wrapper(bytes)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.BytesValue{value: b'foo'}.value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: 'google.protobuf.BytesValue{\n value:b"foo"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#', - error: - "ERROR: \u003cinput\u003e:1:42: type 'wrapper(bytes)' does not support field selection\n | google.protobuf.BytesValue{value: b'foo'}.value\n | .........................................^", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.BytesValue{}", - value: { bytesValue: "" }, - }, - ast: "google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue", - type: "wrapper(bytes)", - }, - { - original: { - name: "literal_unicode", - expr: "google.protobuf.BytesValue{value: b'flambé'}", - value: { bytesValue: "ZmxhbWLDqQ==" }, - }, - ast: 'google.protobuf.BytesValue{\n value:b"flambé"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.BytesValue{\n value:b"flambé"~bytes\n}~wrapper(bytes)^google.protobuf.BytesValue', - type: "wrapper(bytes)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.BytesValue" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.BytesValue", - value: "YmFy", - }, - }, - }, - }, - value: { bytesValue: "YmFy" }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~wrapper(bytes)^x", - type: "wrapper(bytes)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_bytes_wrapper: b'baz'}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleBytesWrapper: "YmF6", - }, - }, - }, - ast: 'TestAllTypes{\n single_bytes_wrapper:b"baz"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b"baz"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_empty", - expr: "TestAllTypes{single_bytes_wrapper: b''}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleBytesWrapper: "", - }, - }, - }, - ast: 'TestAllTypes{\n single_bytes_wrapper:b""^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b""~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_bytes_wrapper: b'bletch'}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleBytesWrapper: "YmxldGNo", - }, - }, - }, - ast: 'TestAllTypes{\n single_bytes_wrapper:b"bletch"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b"bletch"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_empty", - expr: "TestAllTypes{single_bytes_wrapper: b''}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleBytesWrapper: "", - }, - }, - }, - ast: 'TestAllTypes{\n single_bytes_wrapper:b""^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b""~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - { - name: "list", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.ListValue{values: [3.0, 'foo', null]}", - value: { - listValue: { - values: [ - { doubleValue: 3 }, - { stringValue: "foo" }, - { nullValue: null }, - ], - }, - }, - }, - ast: 'google.protobuf.ListValue{\n values:[\n 3^#*expr.Constant_DoubleValue#,\n "foo"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.ListValue{\n values:[\n 3~double,\n "foo"~string,\n null~null\n ]~list(dyn)\n}~list(dyn)^google.protobuf.ListValue', - type: "list(dyn)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.ListValue{values: [3.0, 'foo', null]}.values", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: 'google.protobuf.ListValue{\n values:[\n 3^#*expr.Constant_DoubleValue#,\n "foo"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.values^#*expr.Expr_SelectExpr#', - error: - "ERROR: \u003cinput\u003e:1:54: type 'list(dyn)' does not support field selection\n | google.protobuf.ListValue{values: [3.0, 'foo', null]}.values\n | .....................................................^", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.ListValue{values: []}", - value: { listValue: {} }, - }, - ast: "google.protobuf.ListValue{\n values:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.ListValue{\n values:[]~list(dyn)\n}~list(dyn)^google.protobuf.ListValue", - type: "list(dyn)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.ListValue" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/google.protobuf.ListValue", - value: ["bar", ["a", "b"]], - }, - }, - }, - }, - value: { - listValue: { - values: [ - { stringValue: "bar" }, - { - listValue: { - values: [{ stringValue: "a" }, { stringValue: "b" }], - }, - }, - ], - }, - }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~list(dyn)^x", - type: "list(dyn)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{list_value: [1.0, 'one']}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - listValue: [1, "one"], - }, - }, - }, - ast: 'TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n list_value:[\n 1~double,\n "one"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_empty", - expr: "TestAllTypes{list_value: []}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - listValue: [], - }, - }, - }, - ast: "TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{list_value: [1.0, 'one']}.list_value", - container: "cel.expr.conformance.proto2", - value: { - listValue: { - values: [{ doubleValue: 1 }, { stringValue: "one" }], - }, - }, - }, - ast: 'TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n list_value:[\n 1~double,\n "one"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)', - type: "list(dyn)", - }, - { - original: { - name: "field_read_proto2_empty", - expr: "TestAllTypes{list_value: []}.list_value", - container: "cel.expr.conformance.proto2", - value: { listValue: {} }, - }, - ast: "TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)", - type: "list(dyn)", - }, - { - original: { - name: "field_read_proto2_unset", - description: "Not a wrapper type, so doesn't convert to null.", - expr: "TestAllTypes{}.list_value", - container: "cel.expr.conformance.proto2", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)", - type: "list(dyn)", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{list_value: [1.0, 'one']}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - listValue: [1, "one"], - }, - }, - }, - ast: 'TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n list_value:[\n 1~double,\n "one"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_empty", - expr: "TestAllTypes{list_value: []}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - listValue: [], - }, - }, - }, - ast: "TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{list_value: [1.0, 'one']}.list_value", - container: "cel.expr.conformance.proto3", - value: { - listValue: { - values: [{ doubleValue: 1 }, { stringValue: "one" }], - }, - }, - }, - ast: 'TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n list_value:[\n 1~double,\n "one"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)', - type: "list(dyn)", - }, - { - original: { - name: "field_read_proto3_empty", - expr: "TestAllTypes{list_value: []}.list_value", - container: "cel.expr.conformance.proto3", - value: { listValue: {} }, - }, - ast: "TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)", - type: "list(dyn)", - }, - { - original: { - name: "field_read_proto3_unset", - description: "Not a wrapper type, so doesn't convert to null.", - expr: "TestAllTypes{}.list_value", - container: "cel.expr.conformance.proto3", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)", - type: "list(dyn)", - }, - ], - }, - { - name: "struct", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "uno" }, - value: { doubleValue: 1 }, - }, - { - key: { stringValue: "dos" }, - value: { doubleValue: 2 }, - }, - ], - }, - }, - }, - ast: 'google.protobuf.Struct{\n fields:{\n "uno"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "dos"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.Struct{\n fields:{\n "uno"~string:1~double,\n "dos"~string:2~double\n }~map(string, double)\n}~map(string, dyn)^google.protobuf.Struct', - type: "map(string, dyn)", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}.fields", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: 'google.protobuf.Struct{\n fields:{\n "uno"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "dos"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.fields^#*expr.Expr_SelectExpr#', - checkedAst: - 'google.protobuf.Struct{\n fields:{\n "uno"~string:1~double,\n "dos"~string:2~double\n }~map(string, double)\n}~map(string, dyn)^google.protobuf.Struct.fields~dyn', - type: "dyn", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.Struct{fields: {}}", - value: { mapValue: {} }, - }, - ast: "google.protobuf.Struct{\n fields:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Struct{\n fields:{}~map(string, dyn)\n}~map(string, dyn)^google.protobuf.Struct", - type: "map(string, dyn)", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { type: { messageType: "google.protobuf.Struct" } }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Struct", - value: { first: "Abraham", last: "Lincoln" }, - }, - }, - }, - }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "first" }, - value: { stringValue: "Abraham" }, - }, - { - key: { stringValue: "last" }, - value: { stringValue: "Lincoln" }, - }, - ], - }, - }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~map(string, dyn)^x", - type: "map(string, dyn)", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleStruct: { deux: 2, un: 1 }, - }, - }, - }, - ast: 'TestAllTypes{\n single_struct:{\n "un"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "deux"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n "un"~string:1~double,\n "deux"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_empty", - expr: "TestAllTypes{single_struct: {}}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleStruct: {}, - }, - }, - }, - ast: "TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_bad", - expr: "TestAllTypes{single_struct: {1: 'uno'}}", - disableCheck: true, - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "bad key type" }] }, - }, - ast: 'TestAllTypes{\n single_struct:{\n 1^#*expr.Constant_Int64Value#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - error: - "ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'map(int, string)'\n | TestAllTypes{single_struct: {1: 'uno'}}\n | ..........................^", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_struct: {'one': 1.0}}.single_struct", - container: "cel.expr.conformance.proto2", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "one" }, - value: { doubleValue: 1 }, - }, - ], - }, - }, - }, - ast: 'TestAllTypes{\n single_struct:{\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n "one"~string:1~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)', - type: "map(string, dyn)", - }, - { - original: { - name: "field_read_proto2_empty", - expr: "TestAllTypes{single_struct: {}}.single_struct", - container: "cel.expr.conformance.proto2", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)", - type: "map(string, dyn)", - }, - { - original: { - name: "field_read_proto2_unset", - description: "Not a wrapper type, so doesn't convert to null.", - expr: "TestAllTypes{}.single_struct", - container: "cel.expr.conformance.proto2", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)", - type: "map(string, dyn)", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleStruct: { deux: 2, un: 1 }, - }, - }, - }, - ast: 'TestAllTypes{\n single_struct:{\n "un"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "deux"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n "un"~string:1~double,\n "deux"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_empty", - expr: "TestAllTypes{single_struct: {}}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleStruct: {}, - }, - }, - }, - ast: "TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_bad", - expr: "TestAllTypes{single_struct: {1: 'uno'}}", - disableCheck: true, - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "bad key type" }] }, - }, - ast: 'TestAllTypes{\n single_struct:{\n 1^#*expr.Constant_Int64Value#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - error: - "ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'map(int, string)'\n | TestAllTypes{single_struct: {1: 'uno'}}\n | ..........................^", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_struct: {'one': 1.0}}.single_struct", - container: "cel.expr.conformance.proto3", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "one" }, - value: { doubleValue: 1 }, - }, - ], - }, - }, - }, - ast: 'TestAllTypes{\n single_struct:{\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n "one"~string:1~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)', - type: "map(string, dyn)", - }, - { - original: { - name: "field_read_proto3_empty", - expr: "TestAllTypes{single_struct: {}}.single_struct", - container: "cel.expr.conformance.proto3", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)", - type: "map(string, dyn)", - }, - { - original: { - name: "field_read_proto3_unset", - description: "Not a wrapper type, so doesn't convert to null.", - expr: "TestAllTypes{}.single_struct", - container: "cel.expr.conformance.proto3", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)", - type: "map(string, dyn)", - }, - ], - }, - { - name: "value_null", - tests: [ - { - original: { - name: "literal", - expr: "Value{null_value: NullValue.NULL_VALUE}", - container: "google.protobuf", - value: { nullValue: null }, - }, - ast: "Value{\n null_value:NullValue^#*expr.Expr_IdentExpr#.NULL_VALUE^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Value{\n null_value:google.protobuf.NullValue.NULL_VALUE~int^google.protobuf.NullValue.NULL_VALUE\n}~dyn^google.protobuf.Value", - type: "dyn", - }, - { - original: { - name: "literal_no_field_access", - expr: "Value{null_value: NullValue.NULL_VALUE}.null_value", - disableCheck: true, - container: "google.protobuf", - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "Value{\n null_value:NullValue^#*expr.Expr_IdentExpr#.NULL_VALUE^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.null_value^#*expr.Expr_SelectExpr#", - checkedAst: - "google.protobuf.Value{\n null_value:google.protobuf.NullValue.NULL_VALUE~int^google.protobuf.NullValue.NULL_VALUE\n}~dyn^google.protobuf.Value.null_value~dyn", - type: "dyn", - }, - { - original: { - name: "literal_unset", - expr: "google.protobuf.Value{}", - value: { nullValue: null }, - }, - ast: "google.protobuf.Value{}^#*expr.Expr_StructExpr#", - checkedAst: "google.protobuf.Value{}~dyn^google.protobuf.Value", - type: "dyn", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { type: { messageType: "google.protobuf.Value" } }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Value", - value: null, - }, - }, - }, - }, - value: { nullValue: null }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~dyn^x", - type: "dyn", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_value: null}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: null, - }, - }, - }, - ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_value: null}.single_value", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_read_proto2_unset", - expr: "TestAllTypes{}.single_value", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_value: null}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: null, - }, - }, - }, - ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_value: null}.single_value", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_read_proto3_unset", - expr: "TestAllTypes{}.single_value", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - ], - }, - { - name: "value_number", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Value{number_value: 12.5}", - value: { doubleValue: 12.5 }, - }, - ast: "google.protobuf.Value{\n number_value:12.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Value{\n number_value:12.5~double\n}~dyn^google.protobuf.Value", - type: "dyn", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Value{number_value: 12.5}.number_value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.Value{\n number_value:12.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.number_value^#*expr.Expr_SelectExpr#", - checkedAst: - "google.protobuf.Value{\n number_value:12.5~double\n}~dyn^google.protobuf.Value.number_value~dyn", - type: "dyn", - }, - { - original: { - name: "literal_zero", - expr: "google.protobuf.Value{number_value: 0.0}", - value: { doubleValue: 0 }, - }, - ast: "google.protobuf.Value{\n number_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Value{\n number_value:0~double\n}~dyn^google.protobuf.Value", - type: "dyn", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { type: { messageType: "google.protobuf.Value" } }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Value", - value: -26.375, - }, - }, - }, - }, - value: { doubleValue: -26.375 }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~dyn^x", - type: "dyn", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_value: 7e23}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: 7e23, - }, - }, - }, - ast: "TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_zero", - expr: "TestAllTypes{single_value: 0.0}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_value: 7e23}.single_value", - container: "cel.expr.conformance.proto2", - value: { doubleValue: 7e23 }, - }, - ast: "TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_read_proto2_zero", - expr: "TestAllTypes{single_value: 0.0}.single_value", - container: "cel.expr.conformance.proto2", - value: { doubleValue: 0 }, - }, - ast: "TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_value: 7e23}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: 7e23, - }, - }, - }, - ast: "TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_zero", - expr: "TestAllTypes{single_value: 0.0}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: 0, - }, - }, - }, - ast: "TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_value: 7e23}.single_value", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 7e23 }, - }, - ast: "TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_read_proto3_zero", - expr: "TestAllTypes{single_value: 0.0}.single_value", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 0 }, - }, - ast: "TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - ], - }, - { - name: "value_string", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Value{string_value: 'foo'}", - value: { stringValue: "foo" }, - }, - ast: 'google.protobuf.Value{\n string_value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.Value{\n string_value:"foo"~string\n}~dyn^google.protobuf.Value', - type: "dyn", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Value{string_value: 'foo'}.string_value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: 'google.protobuf.Value{\n string_value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.string_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'google.protobuf.Value{\n string_value:"foo"~string\n}~dyn^google.protobuf.Value.string_value~dyn', - type: "dyn", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.Value{string_value: ''}", - value: { stringValue: "" }, - }, - ast: 'google.protobuf.Value{\n string_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.Value{\n string_value:""~string\n}~dyn^google.protobuf.Value', - type: "dyn", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { type: { messageType: "google.protobuf.Value" } }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Value", - value: "bar", - }, - }, - }, - }, - value: { stringValue: "bar" }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~dyn^x", - type: "dyn", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_value: 'baz'}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: "baz", - }, - }, - }, - ast: 'TestAllTypes{\n single_value:"baz"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:"baz"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_empty", - expr: "TestAllTypes{single_value: ''}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: "", - }, - }, - }, - ast: 'TestAllTypes{\n single_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:""~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_value: 'bletch'}.single_value", - container: "cel.expr.conformance.proto2", - value: { stringValue: "bletch" }, - }, - ast: 'TestAllTypes{\n single_value:"bletch"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:"bletch"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "field_read_proto2_zero", - expr: "TestAllTypes{single_value: ''}.single_value", - container: "cel.expr.conformance.proto2", - value: { stringValue: "" }, - }, - ast: 'TestAllTypes{\n single_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:""~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_value: 'baz'}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: "baz", - }, - }, - }, - ast: 'TestAllTypes{\n single_value:"baz"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:"baz"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_empty", - expr: "TestAllTypes{single_value: ''}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: "", - }, - }, - }, - ast: 'TestAllTypes{\n single_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:""~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_value: 'bletch'}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "bletch" }, - }, - ast: 'TestAllTypes{\n single_value:"bletch"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:"bletch"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "field_read_proto3_zero", - expr: "TestAllTypes{single_value: ''}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "" }, - }, - ast: 'TestAllTypes{\n single_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:""~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - ], - }, - { - name: "value_bool", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Value{bool_value: true}", - value: { boolValue: true }, - }, - ast: "google.protobuf.Value{\n bool_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Value{\n bool_value:true~bool\n}~dyn^google.protobuf.Value", - type: "dyn", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Value{bool_value: true}.bool_value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.Value{\n bool_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.bool_value^#*expr.Expr_SelectExpr#", - checkedAst: - "google.protobuf.Value{\n bool_value:true~bool\n}~dyn^google.protobuf.Value.bool_value~dyn", - type: "dyn", - }, - { - original: { - name: "literal_false", - expr: "google.protobuf.Value{bool_value: false}", - value: { boolValue: false }, - }, - ast: "google.protobuf.Value{\n bool_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Value{\n bool_value:false~bool\n}~dyn^google.protobuf.Value", - type: "dyn", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { type: { messageType: "google.protobuf.Value" } }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Value", - value: true, - }, - }, - }, - }, - value: { boolValue: true }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~dyn^x", - type: "dyn", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_value: true}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: true, - }, - }, - }, - ast: "TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_false", - expr: "TestAllTypes{single_value: false}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: false, - }, - }, - }, - ast: "TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_value: true}.single_value", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_read_proto2_false", - expr: "TestAllTypes{single_value: false}.single_value", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_value: true}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: true, - }, - }, - }, - ast: "TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_false", - expr: "TestAllTypes{single_value: false}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: false, - }, - }, - }, - ast: "TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_value: true}.single_value", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_read_proto3_false", - expr: "TestAllTypes{single_value: false}.single_value", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - ], - }, - { - name: "value_struct", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}", - value: { - mapValue: { - entries: [ - { key: { stringValue: "a" }, value: { doubleValue: 1 } }, - { - key: { stringValue: "b" }, - value: { stringValue: "two" }, - }, - ], - }, - }, - }, - ast: 'google.protobuf.Value{\n struct_value:{\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "b"^#*expr.Constant_StringValue#:"two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.Value{\n struct_value:{\n "a"~string:1~double,\n "b"~string:"two"~string\n }~map(string, dyn)\n}~dyn^google.protobuf.Value', - type: "dyn", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}.struct_value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: 'google.protobuf.Value{\n struct_value:{\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "b"^#*expr.Constant_StringValue#:"two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.struct_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'google.protobuf.Value{\n struct_value:{\n "a"~string:1~double,\n "b"~string:"two"~string\n }~map(string, dyn)\n}~dyn^google.protobuf.Value.struct_value~dyn', - type: "dyn", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.Value{struct_value: {}}", - value: { mapValue: {} }, - }, - ast: "google.protobuf.Value{\n struct_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Value{\n struct_value:{}~map(string, dyn)\n}~dyn^google.protobuf.Value", - type: "dyn", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { type: { messageType: "google.protobuf.Value" } }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Value", - value: { x: null, y: false }, - }, - }, - }, - }, - value: { - mapValue: { - entries: [ - { key: { stringValue: "x" }, value: { nullValue: null } }, - { - key: { stringValue: "y" }, - value: { boolValue: false }, - }, - ], - }, - }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~dyn^x", - type: "dyn", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: { deux: 2, un: 1 }, - }, - }, - }, - ast: 'TestAllTypes{\n single_value:{\n "un"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "deux"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:{\n "un"~string:1~double,\n "deux"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_empty", - expr: "TestAllTypes{single_value: {}}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: {}, - }, - }, - }, - ast: "TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_value: {'i': true}}.single_value", - container: "cel.expr.conformance.proto2", - value: { - mapValue: { - entries: [ - { key: { stringValue: "i" }, value: { boolValue: true } }, - ], - }, - }, - }, - ast: 'TestAllTypes{\n single_value:{\n "i"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:{\n "i"~string:true~bool\n }~map(string, bool)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "field_read_proto2_empty", - expr: "TestAllTypes{single_value: {}}.single_value", - container: "cel.expr.conformance.proto2", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: { deux: 2, un: 1 }, - }, - }, - }, - ast: 'TestAllTypes{\n single_value:{\n "un"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "deux"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:{\n "un"~string:1~double,\n "deux"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_empty", - expr: "TestAllTypes{single_value: {}}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: {}, - }, - }, - }, - ast: "TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_value: {'i': true}}.single_value", - container: "cel.expr.conformance.proto3", - value: { - mapValue: { - entries: [ - { key: { stringValue: "i" }, value: { boolValue: true } }, - ], - }, - }, - }, - ast: 'TestAllTypes{\n single_value:{\n "i"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:{\n "i"~string:true~bool\n }~map(string, bool)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "field_read_proto3_empty", - expr: "TestAllTypes{single_value: {}}.single_value", - container: "cel.expr.conformance.proto3", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - ], - }, - { - name: "value_list", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Value{list_value: ['a', 3.0]}", - value: { - listValue: { - values: [{ stringValue: "a" }, { doubleValue: 3 }], - }, - }, - }, - ast: 'google.protobuf.Value{\n list_value:[\n "a"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.Value{\n list_value:[\n "a"~string,\n 3~double\n ]~list(dyn)\n}~dyn^google.protobuf.Value', - type: "dyn", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Value{list_value: []}.list_value", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: "google.protobuf.Value{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", - checkedAst: - "google.protobuf.Value{\n list_value:[]~list(dyn)\n}~dyn^google.protobuf.Value.list_value~dyn", - type: "dyn", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.Value{list_value: []}", - value: { listValue: {} }, - }, - ast: "google.protobuf.Value{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "google.protobuf.Value{\n list_value:[]~list(dyn)\n}~dyn^google.protobuf.Value", - type: "dyn", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { type: { messageType: "google.protobuf.Value" } }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Value", - value: [1, true, "hi"], - }, - }, - }, - }, - value: { - listValue: { - values: [ - { doubleValue: 1 }, - { boolValue: true }, - { stringValue: "hi" }, - ], - }, - }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~dyn^x", - type: "dyn", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_value: ['un', 1.0]}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: ["un", 1], - }, - }, - }, - ast: 'TestAllTypes{\n single_value:[\n "un"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:[\n "un"~string,\n 1~double\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_assign_proto2_empty", - expr: "TestAllTypes{single_value: []}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: [], - }, - }, - }, - ast: "TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_value: ['i', true]}.single_value", - container: "cel.expr.conformance.proto2", - value: { - listValue: { - values: [{ stringValue: "i" }, { boolValue: true }], - }, - }, - }, - ast: 'TestAllTypes{\n single_value:[\n "i"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:[\n "i"~string,\n true~bool\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "field_read_proto2_empty", - expr: "TestAllTypes{single_value: []}.single_value", - container: "cel.expr.conformance.proto2", - value: { listValue: {} }, - }, - ast: "TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_value: ['un', 1.0]}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: ["un", 1], - }, - }, - }, - ast: 'TestAllTypes{\n single_value:[\n "un"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:[\n "un"~string,\n 1~double\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_assign_proto3_empty", - expr: "TestAllTypes{single_value: []}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: [], - }, - }, - }, - ast: "TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_value: ['i', true]}.single_value", - container: "cel.expr.conformance.proto3", - value: { - listValue: { - values: [{ stringValue: "i" }, { boolValue: true }], - }, - }, - }, - ast: 'TestAllTypes{\n single_value:[\n "i"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:[\n "i"~string,\n true~bool\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "field_read_proto3_empty", - expr: "TestAllTypes{single_value: []}.single_value", - container: "cel.expr.conformance.proto3", - value: { listValue: {} }, - }, - ast: "TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - ], - }, - { - name: "any", - tests: [ - { - original: { - name: "literal", - expr: "google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32: 150, - }, - }, - }, - ast: 'google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\b\\x96\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\b\\x96\\x01"~bytes\n}~any^google.protobuf.Any', - type: "any", - }, - { - original: { - name: "literal_no_field_access", - expr: "google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}.type_url", - disableCheck: true, - evalError: { errors: [{ message: "no_matching_overload" }] }, - }, - ast: 'google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\b\\x96\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.type_url^#*expr.Expr_SelectExpr#', - checkedAst: - 'google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\b\\x96\\x01"~bytes\n}~any^google.protobuf.Any.type_url~dyn', - type: "dyn", - }, - { - original: { - name: "literal_empty", - expr: "google.protobuf.Any{}", - evalError: { errors: [{ message: "conversion" }] }, - }, - ast: "google.protobuf.Any{}^#*expr.Expr_StructExpr#", - checkedAst: "google.protobuf.Any{}~any^google.protobuf.Any", - type: "any", - }, - { - original: { - name: "var", - expr: "x", - typeEnv: [ - { - name: "x", - ident: { type: { messageType: "google.protobuf.Any" } }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Any", - value: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32: 150, - }, - }, - }, - }, - }, - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32: 150, - }, - }, - }, - ast: "x^#*expr.Expr_IdentExpr#", - checkedAst: "x~any^x", - type: "any", - }, - { - original: { - name: "field_assign_proto2", - expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleAny: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32: 150, - }, - }, - }, - }, - ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "field_read_proto2", - expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32: 150, - }, - }, - }, - ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "field_assign_proto3", - expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleAny: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 150, - }, - }, - }, - }, - ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "field_read_proto3", - expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 150, - }, - }, - }, - ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - ], - }, - { - name: "complex", - tests: [ - { - original: { - name: "any_list_map", - expr: "TestAllTypes{single_any: [{'almost': 'done'}]}.single_any", - container: "cel.expr.conformance.proto3", - value: { - listValue: { - values: [ - { - mapValue: { - entries: [ - { - key: { stringValue: "almost" }, - value: { stringValue: "done" }, - }, - ], - }, - }, - ], - }, - }, - }, - ast: 'TestAllTypes{\n single_any:[\n {\n "almost"^#*expr.Constant_StringValue#:"done"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_any:[\n {\n "almost"~string:"done"~string\n }~map(string, string)\n ]~list(map(string, string))\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any', - type: "any", - }, - ], - }, - ], - }, - { - name: "encoders_ext", - suites: [ - { - name: "encode", - tests: [ - { - original: { - name: "hello", - expr: "base64.encode(b'hello')", - value: { stringValue: "aGVsbG8=" }, - }, - ast: 'base64^#*expr.Expr_IdentExpr#.encode(\n b"hello"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'base64.encode(\n b"hello"~bytes\n)~string^base64_encode_bytes', - type: "string", - }, - ], - }, - { - name: "decode", - tests: [ - { - original: { - name: "hello", - expr: "base64.decode('aGVsbG8=')", - value: { bytesValue: "aGVsbG8=" }, - }, - ast: 'base64^#*expr.Expr_IdentExpr#.decode(\n "aGVsbG8="^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'base64.decode(\n "aGVsbG8="~string\n)~bytes^base64_decode_string', - type: "bytes", - }, - { - original: { - name: "hello_without_padding", - expr: "base64.decode('aGVsbG8')", - value: { bytesValue: "aGVsbG8=" }, - }, - ast: 'base64^#*expr.Expr_IdentExpr#.decode(\n "aGVsbG8"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'base64.decode(\n "aGVsbG8"~string\n)~bytes^base64_decode_string', - type: "bytes", - }, - ], - }, - { - name: "round_trip", - tests: [ - { - original: { - name: "hello", - expr: "base64.decode(base64.encode(b'Hello World!'))", - value: { bytesValue: "SGVsbG8gV29ybGQh" }, - }, - ast: 'base64^#*expr.Expr_IdentExpr#.decode(\n base64^#*expr.Expr_IdentExpr#.encode(\n b"Hello World!"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'base64.decode(\n base64.encode(\n b"Hello World!"~bytes\n )~string^base64_encode_bytes\n)~bytes^base64_decode_string', - type: "bytes", - }, - ], - }, - ], - }, - { - name: "enums", - suites: [ - { - name: "legacy_proto2", - tests: [ - { - original: { - name: "literal_global", - expr: "GlobalEnum.GAZ", - container: "cel.expr.conformance.proto2", - value: { int64Value: "2" }, - }, - ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ", - type: "int", - }, - { - original: { - name: "literal_nested", - expr: "TestAllTypes.NestedEnum.BAR", - container: "cel.expr.conformance.proto2", - value: { int64Value: "1" }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", - type: "int", - }, - { - original: { - name: "literal_zero", - expr: "GlobalEnum.GOO", - container: "cel.expr.conformance.proto2", - value: { int64Value: "0" }, - }, - ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO", - type: "int", - }, - { - original: { - name: "comparison", - expr: "GlobalEnum.GAR == 1", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "arithmetic", - expr: "TestAllTypes.NestedEnum.BAR + 3", - container: "cel.expr.conformance.proto2", - value: { int64Value: "4" }, - }, - ast: "_+_(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR,\n 3~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "type_global", - expr: "type(GlobalEnum.GOO)", - container: "cel.expr.conformance.proto2", - value: { typeValue: "int" }, - }, - ast: "type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "type_nested", - expr: "type(TestAllTypes.NestedEnum.BAZ)", - container: "cel.expr.conformance.proto2", - value: { typeValue: "int" }, - }, - ast: "type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "select_default", - expr: "TestAllTypes{}.standalone_enum", - container: "cel.expr.conformance.proto2", - value: { int64Value: "0" }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int", - type: "int", - }, - { - original: { - name: "field_type", - expr: "type(TestAllTypes{}.standalone_enum)", - container: "cel.expr.conformance.proto2", - value: { typeValue: "int" }, - }, - ast: "type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "assign_standalone_name", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - standaloneEnum: "BAZ", - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int", - expr: "TestAllTypes{standalone_enum: 1}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - standaloneEnum: "BAR", - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:1~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int_too_big", - expr: "TestAllTypes{standalone_enum: 5000000000}", - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "TestAllTypes{\n standalone_enum:5000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:5000000000~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int_too_neg", - expr: "TestAllTypes{standalone_enum: -7000000000}", - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "TestAllTypes{\n standalone_enum:-7000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:-7000000000~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "access_repeated_enum", - expr: "TestAllTypes{}.repeated_nested_enum", - container: "cel.expr.conformance.proto2", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)", - type: "list(int)", - }, - { - original: { - name: "assign_repeated_enum", - expr: "TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - repeatedNestedEnum: ["FOO", "BAR"], - }, - }, - }, - ast: "TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "list_enum_as_list_int", - expr: "0 in TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}.repeated_nested_enum", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "@in(\n 0^#*expr.Constant_Int64Value#,\n TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n 0~int,\n cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "enum_as_int", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "@in(\n TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int,\n [\n 0~int\n ]~list(int)\n)~bool^in_list", - type: "bool", - }, - ], - }, - { - name: "legacy_proto3", - tests: [ - { - original: { - name: "literal_global", - expr: "GlobalEnum.GAZ", - container: "cel.expr.conformance.proto3", - value: { int64Value: "2" }, - }, - ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ", - type: "int", - }, - { - original: { - name: "literal_nested", - expr: "TestAllTypes.NestedEnum.BAR", - container: "cel.expr.conformance.proto3", - value: { int64Value: "1" }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR", - type: "int", - }, - { - original: { - name: "literal_zero", - expr: "GlobalEnum.GOO", - container: "cel.expr.conformance.proto3", - value: { int64Value: "0" }, - }, - ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO", - type: "int", - }, - { - original: { - name: "comparison", - expr: "GlobalEnum.GAR == 1", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "arithmetic", - expr: "TestAllTypes.NestedEnum.BAR + 3", - container: "cel.expr.conformance.proto3", - value: { int64Value: "4" }, - }, - ast: "_+_(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR,\n 3~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "type_global", - expr: "type(GlobalEnum.GOO)", - container: "cel.expr.conformance.proto3", - value: { typeValue: "int" }, - }, - ast: "type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "type_nested", - expr: "type(TestAllTypes.NestedEnum.BAZ)", - container: "cel.expr.conformance.proto3", - value: { typeValue: "int" }, - }, - ast: "type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "select_default", - expr: "TestAllTypes{}.standalone_enum", - container: "cel.expr.conformance.proto3", - value: { int64Value: "0" }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int", - type: "int", - }, - { - original: { - name: "select", - expr: "x.standalone_enum", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - container: "cel.expr.conformance.proto3", - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: "BAZ", - }, - }, - }, - }, - value: { int64Value: "2" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", - type: "int", - }, - { - original: { - name: "select_big", - expr: "x.standalone_enum", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - container: "cel.expr.conformance.proto3", - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: 108, - }, - }, - }, - }, - value: { int64Value: "108" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", - type: "int", - }, - { - original: { - name: "select_neg", - expr: "x.standalone_enum", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - container: "cel.expr.conformance.proto3", - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: -3, - }, - }, - }, - }, - value: { int64Value: "-3" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", - type: "int", - }, - { - original: { - name: "field_type", - expr: "type(TestAllTypes{}.standalone_enum)", - container: "cel.expr.conformance.proto3", - value: { typeValue: "int" }, - }, - ast: "type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "assign_standalone_name", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: "BAZ", - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int", - expr: "TestAllTypes{standalone_enum: 1}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: "BAR", - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int_big", - expr: "TestAllTypes{standalone_enum: 99}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: 99, - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:99^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:99~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int_neg", - expr: "TestAllTypes{standalone_enum: -1}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: -1, - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:-1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int_too_big", - expr: "TestAllTypes{standalone_enum: 5000000000}", - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "TestAllTypes{\n standalone_enum:5000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:5000000000~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int_too_neg", - expr: "TestAllTypes{standalone_enum: -7000000000}", - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "TestAllTypes{\n standalone_enum:-7000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:-7000000000~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "access_repeated_enum", - expr: "TestAllTypes{}.repeated_nested_enum", - container: "cel.expr.conformance.proto2", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)", - type: "list(int)", - }, - { - original: { - name: "assign_repeated_enum", - expr: "TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - repeatedNestedEnum: ["FOO", "BAR"], - }, - }, - }, - ast: "TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "list_enum_as_list_int", - expr: "0 in TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}.repeated_nested_enum", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "@in(\n 0^#*expr.Constant_Int64Value#,\n TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n 0~int,\n cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "enum_as_int", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "@in(\n TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int,\n [\n 0~int\n ]~list(int)\n)~bool^in_list", - type: "bool", - }, - ], - }, - { - name: "strong_proto2", - tests: [ - { - original: { - name: "literal_global", - expr: "GlobalEnum.GAZ", - container: "cel.expr.conformance.proto2", - value: { - enumValue: { - type: "cel.expr.conformance.proto2.GlobalEnum", - value: 2, - }, - }, - }, - ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ", - type: "int", - }, - { - original: { - name: "literal_nested", - expr: "TestAllTypes.NestedEnum.BAR", - container: "cel.expr.conformance.proto2", - value: { - enumValue: { - type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", - value: 1, - }, - }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", - type: "int", - }, - { - original: { - name: "literal_zero", - expr: "GlobalEnum.GOO", - container: "cel.expr.conformance.proto2", - value: { - enumValue: { type: "cel.expr.conformance.proto2.GlobalEnum" }, - }, - }, - ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO", - type: "int", - }, - { - original: { - name: "comparison_true", - expr: "GlobalEnum.GAR == GlobalEnum.GAR", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "comparison_false", - expr: "GlobalEnum.GAR == GlobalEnum.GAZ", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "type_global", - expr: "type(GlobalEnum.GOO)", - container: "cel.expr.conformance.proto2", - value: { typeValue: "cel.expr.conformance.proto2.GlobalEnum" }, - }, - ast: "type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "type_nested", - expr: "type(TestAllTypes.NestedEnum.BAZ)", - container: "cel.expr.conformance.proto2", - value: { - typeValue: - "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", - }, - }, - ast: "type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "select_default", - expr: "TestAllTypes{}.standalone_enum", - container: "cel.expr.conformance.proto2", - value: { - enumValue: { - type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", - }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int", - type: "int", - }, - { - original: { - name: "field_type", - expr: "type(TestAllTypes{}.standalone_enum)", - container: "cel.expr.conformance.proto2", - value: { - typeValue: - "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", - }, - }, - ast: "type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "assign_standalone_name", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - standaloneEnum: "BAZ", - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - standaloneEnum: "BAR", - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - error: - "ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}\n | .....................................................^", - }, - { - original: { - name: "convert_symbol_to_int", - expr: "int(GlobalEnum.GAZ)", - container: "cel.expr.conformance.proto2", - value: { int64Value: "2" }, - }, - ast: "int(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ\n)~int^int64_to_int64", - type: "int", - }, - { - original: { - name: "convert_unnamed_to_int", - description: "Disable check - missing way to declare enums.", - expr: "int(x)", - disableCheck: true, - bindings: { - x: { - value: { - enumValue: { - type: "cel.expr.conformance.proto2.GlobalEnum", - value: 444, - }, - }, - }, - }, - value: { int64Value: "444" }, - }, - ast: "int(\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:5: undeclared reference to 'x' (in container '')\n | int(x)\n | ....^", - }, - { - original: { - name: "convert_int_inrange", - expr: "TestAllTypes.NestedEnum(2)", - container: "cel.expr.conformance.proto2", - value: { - enumValue: { - type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", - value: 2, - }, - }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(2)\n | .......................^", - }, - { - original: { - name: "convert_int_big", - expr: "TestAllTypes.NestedEnum(20000)", - container: "cel.expr.conformance.proto2", - value: { - enumValue: { - type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", - value: 20000, - }, - }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 20000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(20000)\n | .......................^", - }, - { - original: { - name: "convert_int_neg", - expr: "GlobalEnum(-33)", - container: "cel.expr.conformance.proto2", - value: { - enumValue: { - type: "cel.expr.conformance.proto2.GlobalEnum", - value: -33, - }, - }, - }, - ast: "GlobalEnum(\n -33^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:11: undeclared reference to 'GlobalEnum' (in container 'cel.expr.conformance.proto2')\n | GlobalEnum(-33)\n | ..........^", - }, - { - original: { - name: "convert_int_too_big", - expr: "TestAllTypes.NestedEnum(5000000000)", - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(5000000000)\n | .......................^", - }, - { - original: { - name: "convert_int_too_neg", - expr: "TestAllTypes.NestedEnum(-7000000000)", - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -7000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(-7000000000)\n | .......................^", - }, - { - original: { - name: "convert_string", - expr: "TestAllTypes.NestedEnum('BAZ')", - container: "cel.expr.conformance.proto2", - value: { - enumValue: { - type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", - value: 2, - }, - }, - }, - ast: 'TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n "BAZ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum('BAZ')\n | .......................^", - }, - { - original: { - name: "convert_string_bad", - expr: "TestAllTypes.NestedEnum('BLETCH')", - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "invalid" }] }, - }, - ast: 'TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n "BLETCH"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum('BLETCH')\n | .......................^", - }, - ], - }, - { - name: "strong_proto3", - tests: [ - { - original: { - name: "literal_global", - expr: "GlobalEnum.GAZ", - container: "cel.expr.conformance.proto3", - value: { - enumValue: { - type: "cel.expr.conformance.proto3.GlobalEnum", - value: 2, - }, - }, - }, - ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ", - type: "int", - }, - { - original: { - name: "literal_nested", - expr: "TestAllTypes.NestedEnum.BAR", - container: "cel.expr.conformance.proto3", - value: { - enumValue: { - type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - value: 1, - }, - }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR", - type: "int", - }, - { - original: { - name: "literal_zero", - expr: "GlobalEnum.GOO", - container: "cel.expr.conformance.proto3", - value: { - enumValue: { type: "cel.expr.conformance.proto3.GlobalEnum" }, - }, - }, - ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO", - type: "int", - }, - { - original: { - name: "comparison_true", - expr: "GlobalEnum.GAR == GlobalEnum.GAR", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "comparison_false", - expr: "GlobalEnum.GAR == GlobalEnum.GAZ", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "type_global", - expr: "type(GlobalEnum.GOO)", - container: "cel.expr.conformance.proto3", - value: { typeValue: "cel.expr.conformance.proto3.GlobalEnum" }, - }, - ast: "type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "type_nested", - expr: "type(TestAllTypes.NestedEnum.BAZ)", - container: "cel.expr.conformance.proto3", - value: { - typeValue: - "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - }, - }, - ast: "type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "select_default", - expr: "TestAllTypes{}.standalone_enum", - container: "cel.expr.conformance.proto3", - value: { - enumValue: { - type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int", - type: "int", - }, - { - original: { - name: "select", - expr: "x.standalone_enum", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - container: "cel.expr.conformance.proto3", - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: "BAZ", - }, - }, - }, - }, - value: { - enumValue: { - type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - value: 2, - }, - }, - }, - ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", - type: "int", - }, - { - original: { - name: "select_big", - expr: "x.standalone_enum", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - container: "cel.expr.conformance.proto3", - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: 108, - }, - }, - }, - }, - value: { - enumValue: { - type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - value: 108, - }, - }, - }, - ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", - type: "int", - }, - { - original: { - name: "select_neg", - expr: "x.standalone_enum", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - container: "cel.expr.conformance.proto3", - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: -3, - }, - }, - }, - }, - value: { - enumValue: { - type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - value: -3, - }, - }, - }, - ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", - type: "int", - }, - { - original: { - name: "field_type", - expr: "type(TestAllTypes{}.standalone_enum)", - container: "cel.expr.conformance.proto3", - value: { - typeValue: - "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - }, - }, - ast: "type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "type(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int\n)~type(int)^type", - type: "type(int)", - }, - { - original: { - name: "assign_standalone_name", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: "BAZ", - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "assign_standalone_int", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: "BAR", - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - error: - "ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}\n | .....................................................^", - }, - { - original: { - name: "assign_standalone_int_big", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: 99, - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 99^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - error: - "ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}\n | .....................................................^", - }, - { - original: { - name: "assign_standalone_int_neg", - expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: -1, - }, - }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - error: - "ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}\n | .....................................................^", - }, - { - original: { - name: "convert_symbol_to_int", - expr: "int(GlobalEnum.GAZ)", - container: "cel.expr.conformance.proto3", - value: { int64Value: "2" }, - }, - ast: "int(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ\n)~int^int64_to_int64", - type: "int", - }, - { - original: { - name: "convert_unnamed_to_int", - description: "Disable check - missing way to declare enums.", - expr: "int(x)", - disableCheck: true, - bindings: { - x: { - value: { - enumValue: { - type: "cel.expr.conformance.proto3.GlobalEnum", - value: 444, - }, - }, - }, - }, - value: { int64Value: "444" }, - }, - ast: "int(\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:5: undeclared reference to 'x' (in container '')\n | int(x)\n | ....^", - }, - { - original: { - name: "convert_unnamed_to_int_select", - expr: "int(x.standalone_enum)", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - standaloneEnum: -987, - }, - }, - }, - }, - value: { int64Value: "-987" }, - }, - ast: "int(\n x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int\n)~int^int64_to_int64", - type: "int", - }, - { - original: { - name: "convert_int_inrange", - expr: "TestAllTypes.NestedEnum(2)", - container: "cel.expr.conformance.proto3", - value: { - enumValue: { - type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - value: 2, - }, - }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(2)\n | .......................^", - }, - { - original: { - name: "convert_int_big", - expr: "TestAllTypes.NestedEnum(20000)", - container: "cel.expr.conformance.proto3", - value: { - enumValue: { - type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - value: 20000, - }, - }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 20000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(20000)\n | .......................^", - }, - { - original: { - name: "convert_int_neg", - expr: "GlobalEnum(-33)", - container: "cel.expr.conformance.proto3", - value: { - enumValue: { - type: "cel.expr.conformance.proto3.GlobalEnum", - value: -33, - }, - }, - }, - ast: "GlobalEnum(\n -33^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:11: undeclared reference to 'GlobalEnum' (in container 'cel.expr.conformance.proto3')\n | GlobalEnum(-33)\n | ..........^", - }, - { - original: { - name: "convert_int_too_big", - expr: "TestAllTypes.NestedEnum(5000000000)", - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(5000000000)\n | .......................^", - }, - { - original: { - name: "convert_int_too_neg", - expr: "TestAllTypes.NestedEnum(-7000000000)", - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "range" }] }, - }, - ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -7000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(-7000000000)\n | .......................^", - }, - { - original: { - name: "convert_string", - expr: "TestAllTypes.NestedEnum('BAZ')", - container: "cel.expr.conformance.proto3", - value: { - enumValue: { - type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", - value: 2, - }, - }, - }, - ast: 'TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n "BAZ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum('BAZ')\n | .......................^", - }, - { - original: { - name: "convert_string_bad", - expr: "TestAllTypes.NestedEnum('BLETCH')", - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "invalid" }] }, - }, - ast: 'TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n "BLETCH"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum('BLETCH')\n | .......................^", - }, - ], - }, - ], - }, - { - name: "fields", - suites: [ - { - name: "map_fields", - tests: [ - { - original: { - name: "map_key_int64", - expr: "{0:1,2:2,5:true}[5]", - value: { boolValue: true }, - }, - ast: "_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:true~bool\n }~map(int, dyn),\n 5~int\n)~dyn^index_map", - type: "dyn", - }, - { - original: { - name: "map_key_uint64", - expr: "{0u:1u,2u:'happy',5u:3u}[2u]", - value: { stringValue: "happy" }, - }, - ast: '_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:"happy"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n 0u~uint:1u~uint,\n 2u~uint:"happy"~string,\n 5u~uint:3u~uint\n }~map(uint, dyn),\n 2u~uint\n)~dyn^index_map', - type: "dyn", - }, - { - original: { - name: "map_key_string", - expr: "{'name':100u}['name']", - value: { uint64Value: "100" }, - }, - ast: '_[_](\n {\n "name"^#*expr.Constant_StringValue#:100u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "name"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n "name"~string:100u~uint\n }~map(string, uint),\n "name"~string\n)~uint^index_map', - type: "uint", - }, - { - original: { - name: "map_key_bool", - expr: "{true:5}[true]", - value: { int64Value: "5" }, - }, - ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n true~bool:5~int\n }~map(bool, int),\n true~bool\n)~int^index_map", - type: "int", - }, - { - original: { - name: "map_key_mixed_type", - expr: "{true:1,2:2,5u:3}[true]", - value: { int64Value: "1" }, - }, - ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n true~bool:1~int,\n 2~int:2~int,\n 5u~uint:3~int\n }~map(dyn, int),\n true~bool\n)~int^index_map", - type: "int", - }, - { - original: { - name: "map_key_mixed_numbers_double_key", - expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[3.0]", - value: { doubleValue: 3 }, - }, - ast: "_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 3~double\n)~double^index_map", - type: "double", - }, - { - original: { - name: "map_key_mixed_numbers_lossy_double_key", - expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[3.1]", - evalError: { errors: [{ message: "no such key" }] }, - }, - ast: "_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3.1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 3.1~double\n)~double^index_map", - type: "double", - }, - { - original: { - name: "map_key_mixed_numbers_uint_key", - expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[2u]", - value: { doubleValue: 2 }, - }, - ast: "_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 2u~uint\n)~double^index_map", - type: "double", - }, - { - original: { - name: "map_key_mixed_numbers_int_key", - expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[1]", - value: { doubleValue: 1 }, - }, - ast: "_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 1~int\n)~double^index_map", - type: "double", - }, - { - original: { - name: "map_field_access", - expr: "x.name", - typeEnv: [ - { - name: "x", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "INT64" }, - }, - }, - }, - }, - ], - bindings: { - x: { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "name" }, - value: { int64Value: "1024" }, - }, - ], - }, - }, - }, - }, - value: { int64Value: "1024" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#", - checkedAst: "x~map(string, int)^x.name~int", - type: "int", - }, - { - original: { - name: "map_no_such_key", - expr: "{0:1,2:2,5:3}[1]", - evalError: { errors: [{ message: "no such key" }] }, - }, - ast: "_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n)~int^index_map", - type: "int", - }, - { - original: { - name: "map_no_such_key_or_false", - expr: "dyn({0:1,2:2,5:3}[1]) || false", - evalError: { errors: [{ message: "no such key" }] }, - }, - ast: "_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "map_no_such_key_or_true", - expr: "dyn({0:1,2:2,5:3}[1]) || true", - value: { boolValue: true }, - }, - ast: "_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "map_no_such_key_and_false", - expr: "dyn({0:1,2:2,5:3}[1]) \u0026\u0026 false", - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "map_no_such_key_and_true", - expr: "dyn({0:1,2:2,5:3}[1]) \u0026\u0026 true", - evalError: { errors: [{ message: "no such key" }] }, - }, - ast: "_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "map_bad_key_type", - expr: "{0:1,2:2,5:3}[dyn(b'')]", - evalError: { errors: [{ message: "no such key" }] }, - }, - ast: '_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n)~int^index_map', - type: "int", - }, - { - original: { - name: "map_bad_key_type_or_false", - expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) || false", - evalError: { errors: [{ message: "no such key" }] }, - }, - ast: '_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or', - type: "bool", - }, - { - original: { - name: "map_bad_key_type_or_true", - expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) || true", - value: { boolValue: true }, - }, - ast: '_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or', - type: "bool", - }, - { - original: { - name: "map_bad_key_type_and_false", - expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) \u0026\u0026 false", - value: { boolValue: false }, - }, - ast: '_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and', - type: "bool", - }, - { - original: { - name: "map_bad_key_type_and_true", - expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) \u0026\u0026 true", - evalError: { errors: [{ message: "no such key" }] }, - }, - ast: '_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and', - type: "bool", - }, - { - original: { - name: "map_field_select_no_such_key", - expr: "x.name", - typeEnv: [ - { - name: "x", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - x: { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "holiday" }, - value: { stringValue: "field" }, - }, - ], - }, - }, - }, - }, - evalError: { errors: [{ message: "no such key: 'name'" }] }, - }, - ast: "x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#", - checkedAst: "x~map(string, string)^x.name~string", - type: "string", - }, - { - original: { - name: "map_field_select_no_such_key_or_false", - expr: "dyn(x.name) || false", - typeEnv: [ - { - name: "x", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - x: { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "holiday" }, - value: { stringValue: "field" }, - }, - ], - }, - }, - }, - }, - evalError: { errors: [{ message: "no such key: 'name'" }] }, - }, - ast: "_||_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "map_field_select_no_such_key_or_true", - expr: "dyn(x.name) || true", - typeEnv: [ - { - name: "x", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - x: { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "holiday" }, - value: { stringValue: "field" }, - }, - ], - }, - }, - }, - }, - value: { boolValue: true }, - }, - ast: "_||_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "map_field_select_no_such_key_and_false", - expr: "dyn(x.name) \u0026\u0026 false", - typeEnv: [ - { - name: "x", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - x: { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "holiday" }, - value: { stringValue: "field" }, - }, - ], - }, - }, - }, - }, - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "map_field_select_no_such_key_and_true", - expr: "dyn(x.name) \u0026\u0026 true", - typeEnv: [ - { - name: "x", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - x: { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "holiday" }, - value: { stringValue: "field" }, - }, - ], - }, - }, - }, - }, - evalError: { errors: [{ message: "no such key: 'name'" }] }, - }, - ast: "_\u0026\u0026_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "map_value_null", - expr: "{true:null}[true]", - value: { nullValue: null }, - }, - ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n true~bool:null~null\n }~map(bool, null),\n true~bool\n)~null^index_map", - type: "null", - }, - { - original: { - name: "map_value_bool", - expr: "{27:false}[27]", - value: { boolValue: false }, - }, - ast: "_[_](\n {\n 27^#*expr.Constant_Int64Value#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 27^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 27~int:false~bool\n }~map(int, bool),\n 27~int\n)~bool^index_map", - type: "bool", - }, - { - original: { - name: "map_value_string", - expr: "{'n':'x'}['n']", - value: { stringValue: "x" }, - }, - ast: '_[_](\n {\n "n"^#*expr.Constant_StringValue#:"x"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "n"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n "n"~string:"x"~string\n }~map(string, string),\n "n"~string\n)~string^index_map', - type: "string", - }, - { - original: { - name: "map_value_float", - expr: "{3:15.15}[3]", - value: { doubleValue: 15.15 }, - }, - ast: "_[_](\n {\n 3^#*expr.Constant_Int64Value#:15.15^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 3~int:15.15~double\n }~map(int, double),\n 3~int\n)~double^index_map", - type: "double", - }, - { - original: { - name: "map_value_uint64", - expr: "{0u:1u,2u:2u,5u:3u}[0u]", - value: { uint64Value: "1" }, - }, - ast: "_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:2u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 0u~uint:1u~uint,\n 2u~uint:2u~uint,\n 5u~uint:3u~uint\n }~map(uint, uint),\n 0u~uint\n)~uint^index_map", - type: "uint", - }, - { - original: { - name: "map_value_int64", - expr: "{true:1,false:2}[true]", - value: { int64Value: "1" }, - }, - ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n false^#*expr.Constant_BoolValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n true~bool:1~int,\n false~bool:2~int\n }~map(bool, int),\n true~bool\n)~int^index_map", - type: "int", - }, - { - original: { - name: "map_value_bytes", - expr: "{0:b''}[0]", - value: { bytesValue: "" }, - }, - ast: '_[_](\n {\n 0^#*expr.Constant_Int64Value#:b""^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n 0~int:b""~bytes\n }~map(int, bytes),\n 0~int\n)~bytes^index_map', - type: "bytes", - }, - { - original: { - name: "map_value_list", - expr: "{0u:[1]}[0u]", - value: { listValue: { values: [{ int64Value: "1" }] } }, - }, - ast: "_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 0u~uint:[\n 1~int\n ]~list(int)\n }~map(uint, list(int)),\n 0u~uint\n)~list(int)^index_map", - type: "list(int)", - }, - { - original: { - name: "map_value_map", - expr: "{'map': {'k': 'v'}}['map']", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "k" }, - value: { stringValue: "v" }, - }, - ], - }, - }, - }, - ast: '_[_](\n {\n "map"^#*expr.Constant_StringValue#:{\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "map"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n "map"~string:{\n "k"~string:"v"~string\n }~map(string, string)\n }~map(string, map(string, string)),\n "map"~string\n)~map(string, string)^index_map', - type: "map(string, string)", - }, - { - original: { - name: "map_value_mix_type", - expr: "{'map': {'k': 'v'}, 'list': [1]}['map']", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "k" }, - value: { stringValue: "v" }, - }, - ], - }, - }, - }, - ast: '_[_](\n {\n "map"^#*expr.Constant_StringValue#:{\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#,\n "list"^#*expr.Constant_StringValue#:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "map"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n "map"~string:{\n "k"~string:"v"~string\n }~map(string, string),\n "list"~string:[\n 1~int\n ]~list(int)\n }~map(string, dyn),\n "map"~string\n)~dyn^index_map', - type: "dyn", - }, - ], - }, - { - name: "map_has", - tests: [ - { - original: { - name: "has", - expr: "has({'a': 1, 'b': 2}.a)", - value: { boolValue: true }, - }, - ast: '{\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "b"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.a~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "a"~string:1~int,\n "b"~string:2~int\n}~map(string, int).a~test-only~~bool', - type: "bool", - }, - { - original: { - name: "has_not", - expr: "has({'a': 1, 'b': 2}.c)", - value: { boolValue: false }, - }, - ast: '{\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "b"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.c~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "a"~string:1~int,\n "b"~string:2~int\n}~map(string, int).c~test-only~~bool', - type: "bool", - }, - { - original: { - name: "has_empty", - expr: "has({}.a)", - value: { boolValue: false }, - }, - ast: "{}^#*expr.Expr_StructExpr#.a~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: "{}~map(dyn, dyn).a~test-only~~bool", - type: "bool", - }, - ], - }, - { - name: "quoted_map_fields", - tests: [ - { - original: { - name: "field_access_slash", - expr: "{'/api/v1': true, '/api/v2': false}.`/api/v1`", - value: { boolValue: true }, - }, - error: - "ERROR: field_access_slash:1:37: unsupported syntax: '`'\n | {'/api/v1': true, '/api/v2': false}.`/api/v1`\n | ....................................^", - }, - { - original: { - name: "field_access_dash", - expr: "{'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'", - value: { boolValue: true }, - }, - error: - "ERROR: field_access_dash:1:61: unsupported syntax: '`'\n | {'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'\n | ............................................................^", - }, - { - original: { - name: "field_access_dot", - expr: "{'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`", - value: { int64Value: "32" }, - }, - error: - "ERROR: field_access_dot:1:34: unsupported syntax: '`'\n | {'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`\n | .................................^", - }, - { - original: { - name: "has_field_slash", - expr: "has({'/api/v1': true, '/api/v2': false}.`/api/v3`)", - value: { boolValue: false }, - }, - error: - "ERROR: has_field_slash:1:41: unsupported syntax: '`'\n | has({'/api/v1': true, '/api/v2': false}.`/api/v3`)\n | ........................................^", - }, - { - original: { - name: "has_field_dash", - expr: "has({'content-type': 'application/json', 'content-length': 145}.`content-type`)", - value: { boolValue: true }, - }, - error: - "ERROR: has_field_dash:1:65: unsupported syntax: '`'\n | has({'content-type': 'application/json', 'content-length': 145}.`content-type`)\n | ................................................................^", - }, - { - original: { - name: "has_field_dot", - expr: "has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)", - value: { boolValue: true }, - }, - error: - "ERROR: has_field_dot:1:38: unsupported syntax: '`'\n | has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)\n | .....................................^", - }, - ], - }, - { - name: "qualified_identifier_resolution", - tests: [ - { - original: { - name: "qualified_ident", - expr: "a.b.c", - typeEnv: [ - { name: "a.b.c", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { "a.b.c": { value: { stringValue: "yeah" } } }, - value: { stringValue: "yeah" }, - }, - ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#", - checkedAst: "a.b.c~string^a.b.c", - type: "string", - }, - { - original: { - name: "map_field_select", - expr: "a.b.c", - typeEnv: [ - { - name: "a.b", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - "a.b": { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "c" }, - value: { stringValue: "yeah" }, - }, - ], - }, - }, - }, - }, - value: { stringValue: "yeah" }, - }, - ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#", - checkedAst: "a.b~map(string, string)^a.b.c~string", - type: "string", - }, - { - original: { - name: "qualified_identifier_resolution_unchecked", - description: - "namespace resolution should try to find the longest prefix for the evaluator.", - expr: "a.b.c", - disableCheck: true, - typeEnv: [ - { name: "a.b.c", ident: { type: { primitive: "STRING" } } }, - { - name: "a.b", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - "a.b": { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "c" }, - value: { stringValue: "oops" }, - }, - ], - }, - }, - }, - "a.b.c": { value: { stringValue: "yeah" } }, - }, - value: { stringValue: "yeah" }, - }, - ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#", - checkedAst: "a.b.c~string^a.b.c", - type: "string", - }, - { - original: { - name: "list_field_select_unsupported", - expr: "a.b.pancakes", - disableCheck: true, - typeEnv: [ - { - name: "a.b", - ident: { - type: { listType: { elemType: { primitive: "STRING" } } }, - }, - }, - ], - bindings: { - "a.b": { - value: { - listValue: { values: [{ stringValue: "pancakes" }] }, - }, - }, - }, - evalError: { - errors: [ - { - message: - "type 'list_type:\u003celem_type:\u003cprimitive:STRING \u003e \u003e ' does not support field selection", - }, - ], - }, - }, - ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.pancakes^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:4: type 'list(string)' does not support field selection\n | a.b.pancakes\n | ...^", - }, - { - original: { - name: "int64_field_select_unsupported", - expr: "a.pancakes", - disableCheck: true, - typeEnv: [ - { name: "a", ident: { type: { primitive: "INT64" } } }, - ], - bindings: { a: { value: { int64Value: "15" } } }, - evalError: { - errors: [ - { - message: - "type 'int64_type' does not support field selection", - }, - ], - }, - }, - ast: "a^#*expr.Expr_IdentExpr#.pancakes^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:2: type 'int' does not support field selection\n | a.pancakes\n | .^", - }, - { - original: { - name: "ident_with_longest_prefix_check", - description: - "namespace resolution should try to find the longest prefix for the checker.", - expr: "a.b.c", - typeEnv: [ - { name: "a.b.c", ident: { type: { primitive: "STRING" } } }, - { - name: "a.b", - ident: { - type: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "STRING" }, - }, - }, - }, - }, - ], - bindings: { - "a.b": { - value: { - mapValue: { - entries: [ - { - key: { stringValue: "c" }, - value: { stringValue: "oops" }, - }, - ], - }, - }, - }, - "a.b.c": { value: { stringValue: "yeah" } }, - }, - value: { stringValue: "yeah" }, - }, - ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#", - checkedAst: "a.b.c~string^a.b.c", - type: "string", - }, - { - original: { - name: "map_key_float", - description: "map should not support float as the key.", - expr: "{3.3:15.15, 1.0: 5}[1.0]", - disableCheck: true, - evalError: { errors: [{ message: "unsupported key type" }] }, - }, - ast: "_[_](\n {\n 3.3^#*expr.Constant_DoubleValue#:15.15^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_DoubleValue#:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 3.3~double:15.15~double,\n 1~double:5~int\n }~map(double, dyn),\n 1~double\n)~dyn^index_map", - type: "dyn", - }, - { - original: { - name: "map_key_null", - description: "map should not support null as the key.", - expr: "{null:false}[null]", - disableCheck: true, - evalError: { errors: [{ message: "unsupported key type" }] }, - }, - ast: "_[_](\n {\n null^#*expr.Constant_NullValue#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n null~null:false~bool\n }~map(null, bool),\n null~null\n)~bool^index_map", - type: "bool", - }, - { - original: { - name: "map_value_repeat_key", - description: "map should not support repeated key.", - expr: "{true:1,false:2,true:3}[true]", - evalError: { - errors: [{ message: "Failed with repeated key" }], - }, - }, - ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n false^#*expr.Constant_BoolValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n true~bool:1~int,\n false~bool:2~int,\n true~bool:3~int\n }~map(bool, int),\n true~bool\n)~int^index_map", - type: "int", - }, - { - original: { - name: "map_value_repeat_key_heterogeneous", - description: "map should not support repeated key.", - expr: "{0: 1, 0u: 2}[0.0]", - evalError: { - errors: [{ message: "Failed with repeated key" }], - }, - }, - ast: "_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 0u^#*expr.Constant_Uint64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n {\n 0~int:1~int,\n 0u~uint:2~int\n }~map(dyn, int),\n 0~double\n)~int^index_map", - type: "int", - }, - ], - }, - { - name: "in", - tests: [ - { - original: { - name: "empty", - expr: "7 in {}", - value: { boolValue: false }, - }, - ast: "@in(\n 7^#*expr.Constant_Int64Value#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: "@in(\n 7~int,\n {}~map(int, dyn)\n)~bool^in_map", - type: "bool", - }, - { - original: { - name: "singleton", - expr: "true in {true: 1}", - value: { boolValue: true }, - }, - ast: "@in(\n true^#*expr.Constant_BoolValue#,\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n true~bool,\n {\n true~bool:1~int\n }~map(bool, int)\n)~bool^in_map", - type: "bool", - }, - { - original: { - name: "present", - expr: "'George' in {'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}", - value: { boolValue: true }, - }, - ast: '@in(\n "George"^#*expr.Constant_StringValue#,\n {\n "John"^#*expr.Constant_StringValue#:"smart"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "Paul"^#*expr.Constant_StringValue#:"cute"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "George"^#*expr.Constant_StringValue#:"quiet"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "Ringo"^#*expr.Constant_StringValue#:"funny"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "George"~string,\n {\n "John"~string:"smart"~string,\n "Paul"~string:"cute"~string,\n "George"~string:"quiet"~string,\n "Ringo"~string:"funny"~string\n }~map(string, string)\n)~bool^in_map', - type: "bool", - }, - { - original: { - name: "absent", - expr: "'spider' in {'ant': 6, 'fly': 6, 'centipede': 100}", - value: { boolValue: false }, - }, - ast: '@in(\n "spider"^#*expr.Constant_StringValue#,\n {\n "ant"^#*expr.Constant_StringValue#:6^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "fly"^#*expr.Constant_StringValue#:6^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "centipede"^#*expr.Constant_StringValue#:100^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "spider"~string,\n {\n "ant"~string:6~int,\n "fly"~string:6~int,\n "centipede"~string:100~int\n }~map(string, int)\n)~bool^in_map', - type: "bool", - }, - { - original: { - name: "mixed_numbers_and_keys_present", - expr: "3.0 in {1: 1, 2: 2, 3u: 3} \u0026\u0026 2u in {1u: 1, 2: 2} \u0026\u0026 1 in {1u: 1, 2: 2}", - value: { boolValue: true }, - }, - ast: "_\u0026\u0026_(\n _\u0026\u0026_(\n @in(\n 3^#*expr.Constant_DoubleValue#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 2u^#*expr.Constant_Uint64Value#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 1^#*expr.Constant_Int64Value#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n _\u0026\u0026_(\n @in(\n 3~double,\n {\n 1~int:1~int,\n 2~int:2~int,\n 3u~uint:3~int\n }~map(dyn, int)\n )~bool^in_map,\n @in(\n 2u~uint,\n {\n 1u~uint:1~int,\n 2~int:2~int\n }~map(dyn, int)\n )~bool^in_map\n )~bool^logical_and,\n @in(\n 1~int,\n {\n 1u~uint:1~int,\n 2~int:2~int\n }~map(dyn, int)\n )~bool^in_map\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "mixed_numbers_and_keys_absent", - expr: "3.1 in {1: 1, 2: 2, 3u: 3}", - value: { boolValue: false }, - }, - ast: "@in(\n 3.1^#*expr.Constant_DoubleValue#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n 3.1~double,\n {\n 1~int:1~int,\n 2~int:2~int,\n 3u~uint:3~int\n }~map(dyn, int)\n)~bool^in_map", - type: "bool", - }, - ], - }, - ], - }, - { - name: "fp_math", - suites: [ - { - name: "fp_math", - tests: [ - { - original: { - name: "add_positive_positive", - expr: "4.25 + 15.25", - value: { doubleValue: 19.5 }, - }, - ast: "_+_(\n 4.25^#*expr.Constant_DoubleValue#,\n 15.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n 4.25~double,\n 15.25~double\n)~double^add_double", - type: "double", - }, - { - original: { - name: "add_positive_negative", - expr: "17.75 + (-7.75)", - value: { doubleValue: 10 }, - }, - ast: "_+_(\n 17.75^#*expr.Constant_DoubleValue#,\n -7.75^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n 17.75~double,\n -7.75~double\n)~double^add_double", - type: "double", - }, - { - original: { - name: "add_negative_negative", - expr: "-4.125 + (-2.125)", - value: { doubleValue: -6.25 }, - }, - ast: "_+_(\n -4.125^#*expr.Constant_DoubleValue#,\n -2.125^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n -4.125~double,\n -2.125~double\n)~double^add_double", - type: "double", - }, - { - original: { - name: "sub_positive_positive", - expr: "42.0 - 12.0", - value: { doubleValue: 30 }, - }, - ast: "_-_(\n 42^#*expr.Constant_DoubleValue#,\n 12^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_-_(\n 42~double,\n 12~double\n)~double^subtract_double", - type: "double", - }, - { - original: { - name: "sub_positive_negative", - expr: "42.875 - (-22.0)", - value: { doubleValue: 64.875 }, - }, - ast: "_-_(\n 42.875^#*expr.Constant_DoubleValue#,\n -22^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_-_(\n 42.875~double,\n -22~double\n)~double^subtract_double", - type: "double", - }, - { - original: { - name: "sub_negative_negative", - expr: "-4.875 - (-0.125)", - value: { doubleValue: -4.75 }, - }, - ast: "_-_(\n -4.875^#*expr.Constant_DoubleValue#,\n -0.125^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_-_(\n -4.875~double,\n -0.125~double\n)~double^subtract_double", - type: "double", - }, - { - original: { - name: "multiply_positive_positive", - expr: "42.5 * 0.2", - value: { doubleValue: 8.5 }, - }, - ast: "_*_(\n 42.5^#*expr.Constant_DoubleValue#,\n 0.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 42.5~double,\n 0.2~double\n)~double^multiply_double", - type: "double", - }, - { - original: { - name: "multiply_positive_negative", - expr: "40.75 * (-2.25)", - value: { doubleValue: -91.6875 }, - }, - ast: "_*_(\n 40.75^#*expr.Constant_DoubleValue#,\n -2.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 40.75~double,\n -2.25~double\n)~double^multiply_double", - type: "double", - }, - { - original: { - name: "multiply_negative_negative", - expr: "-3.0 * (-2.5)", - value: { doubleValue: 7.5 }, - }, - ast: "_*_(\n -3^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n -3~double,\n -2.5~double\n)~double^multiply_double", - type: "double", - }, - { - original: { - name: "divide_positive_positive", - expr: "0.0625 / 0.002", - value: { doubleValue: 31.25 }, - }, - ast: "_/_(\n 0.0625^#*expr.Constant_DoubleValue#,\n 0.002^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_/_(\n 0.0625~double,\n 0.002~double\n)~double^divide_double", - type: "double", - }, - { - original: { - name: "divide_positive_negative", - expr: "-2.0 / 2.0", - value: { doubleValue: -1 }, - }, - ast: "_/_(\n -2^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_/_(\n -2~double,\n 2~double\n)~double^divide_double", - type: "double", - }, - { - original: { - name: "divide_negative_negative", - expr: "-8.875 / (-0.0625)", - value: { doubleValue: 142 }, - }, - ast: "_/_(\n -8.875^#*expr.Constant_DoubleValue#,\n -0.0625^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_/_(\n -8.875~double,\n -0.0625~double\n)~double^divide_double", - type: "double", - }, - { - original: { - name: "mod_not_support", - expr: "47.5 % 5.5", - disableCheck: true, - evalError: { - errors: [ - { - message: - "found no matching overload for '_%_' applied to '(double, double)'", - }, - ], - }, - }, - ast: "_%_(\n 47.5^#*expr.Constant_DoubleValue#,\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:6: found no matching overload for '_%_' applied to '(double, double)'\n | 47.5 % 5.5\n | .....^", - }, - { - original: { - name: "negative", - expr: "-(4.5)", - value: { doubleValue: -4.5 }, - }, - ast: "-_(\n 4.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "-_(\n 4.5~double\n)~double^negate_double", - type: "double", - }, - { - original: { - name: "double_negative", - expr: "-(-1.25)", - value: { doubleValue: 1.25 }, - }, - ast: "-_(\n -1.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "-_(\n -1.25~double\n)~double^negate_double", - type: "double", - }, - { - original: { - name: "negative_zero", - expr: "-(0.0)", - value: { doubleValue: 0 }, - }, - ast: "-_(\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "-_(\n 0~double\n)~double^negate_double", - type: "double", - }, - { - original: { - name: "divide_zero", - expr: "15.75 / 0.0", - value: { doubleValue: "Infinity" }, - }, - ast: "_/_(\n 15.75^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_/_(\n 15.75~double,\n 0~double\n)~double^divide_double", - type: "double", - }, - { - original: { - name: "multiply_zero", - expr: "15.36 * 0.0", - value: { doubleValue: 0 }, - }, - ast: "_*_(\n 15.36^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 15.36~double,\n 0~double\n)~double^multiply_double", - type: "double", - }, - { - original: { - name: "add_left_identity", - expr: "0.0 + 1.75", - value: { doubleValue: 1.75 }, - }, - ast: "_+_(\n 0^#*expr.Constant_DoubleValue#,\n 1.75^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n 0~double,\n 1.75~double\n)~double^add_double", - type: "double", - }, - { - original: { - name: "add_right_identity", - expr: " 2.5 + 0.0", - value: { doubleValue: 2.5 }, - }, - ast: "_+_(\n 2.5^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n 2.5~double,\n 0~double\n)~double^add_double", - type: "double", - }, - { - original: { - name: "add_commutative", - expr: "7.5 + 1.5 == 1.5 + 7.5", - value: { boolValue: true }, - }, - ast: "_==_(\n _+_(\n 7.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 1.5^#*expr.Constant_DoubleValue#,\n 7.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _+_(\n 7.5~double,\n 1.5~double\n )~double^add_double,\n _+_(\n 1.5~double,\n 7.5~double\n )~double^add_double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "add_associative", - expr: "5.625 + (15.75 + 2.0) == (5.625 + 15.75) + 2.0", - value: { boolValue: true }, - }, - ast: "_==_(\n _+_(\n 5.625^#*expr.Constant_DoubleValue#,\n _+_(\n 15.75^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5.625^#*expr.Constant_DoubleValue#,\n 15.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _+_(\n 5.625~double,\n _+_(\n 15.75~double,\n 2~double\n )~double^add_double\n )~double^add_double,\n _+_(\n _+_(\n 5.625~double,\n 15.75~double\n )~double^add_double,\n 2~double\n )~double^add_double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "mul_left_identity", - expr: "1.0 * 45.25", - value: { doubleValue: 45.25 }, - }, - ast: "_*_(\n 1^#*expr.Constant_DoubleValue#,\n 45.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 1~double,\n 45.25~double\n)~double^multiply_double", - type: "double", - }, - { - original: { - name: "mul_right_identity", - expr: "-25.25 * 1.0", - value: { doubleValue: -25.25 }, - }, - ast: "_*_(\n -25.25^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n -25.25~double,\n 1~double\n)~double^multiply_double", - type: "double", - }, - { - original: { - name: "mul_commutative", - expr: "1.5 * 25.875 == 25.875 * 1.5", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n 25.875^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25.875^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 1.5~double,\n 25.875~double\n )~double^multiply_double,\n _*_(\n 25.875~double,\n 1.5~double\n )~double^multiply_double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "mul_associative", - expr: "1.5 * (23.625 * 0.75) == (1.5 * 23.625) * 0.75", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n _*_(\n 23.625^#*expr.Constant_DoubleValue#,\n 0.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n 23.625^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 1.5~double,\n _*_(\n 23.625~double,\n 0.75~double\n )~double^multiply_double\n )~double^multiply_double,\n _*_(\n _*_(\n 1.5~double,\n 23.625~double\n )~double^multiply_double,\n 0.75~double\n )~double^multiply_double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "add_mul_distribute", - expr: "5.75 * (1.5 + 2.5) == 5.75 * 1.5 + 5.75 * 2.5", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n _+_(\n 1.5^#*expr.Constant_DoubleValue#,\n 2.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n 2.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 5.75~double,\n _+_(\n 1.5~double,\n 2.5~double\n )~double^add_double\n )~double^multiply_double,\n _+_(\n _*_(\n 5.75~double,\n 1.5~double\n )~double^multiply_double,\n _*_(\n 5.75~double,\n 2.5~double\n )~double^multiply_double\n )~double^add_double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "fp_overflow_positive", - description: "DBL_MAX(2^1023) times two", - expr: "2.0 * 8.988466e+307 ", - value: { doubleValue: "Infinity" }, - }, - ast: "_*_(\n 2^#*expr.Constant_DoubleValue#,\n 8.988466e+307^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 2~double,\n 8.988466e+307~double\n)~double^multiply_double", - type: "double", - }, - { - original: { - name: "fp_overflow_negative", - description: "-DBL_MAX(-2^1023) times two", - expr: "2.0 * -8.988466e+307 ", - value: { doubleValue: "-Infinity" }, - }, - ast: "_*_(\n 2^#*expr.Constant_DoubleValue#,\n -8.988466e+307^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 2~double,\n -8.988466e+307~double\n)~double^multiply_double", - type: "double", - }, - { - original: { - name: "fp_underflow", - description: "DBL_MIN(2^-1074) divided by two", - expr: "1e-324 / 2.0", - value: { doubleValue: 0 }, - }, - ast: "_/_(\n 0^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_/_(\n 0~double,\n 2~double\n)~double^divide_double", - type: "double", - }, - ], - }, - ], - }, - { - name: "integer_math", - suites: [ - { - name: "int64_math", - tests: [ - { - original: { - name: "add_positive_positive", - expr: "40 + 2", - value: { int64Value: "42" }, - }, - ast: "_+_(\n 40^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n 40~int,\n 2~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "add_positive_negative", - expr: "42 + (-7)", - value: { int64Value: "35" }, - }, - ast: "_+_(\n 42^#*expr.Constant_Int64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n 42~int,\n -7~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "add_negative_negative", - expr: "-4 + (-2)", - value: { int64Value: "-6" }, - }, - ast: "_+_(\n -4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n -4~int,\n -2~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "sub_positive_positive", - expr: "42 - 12", - value: { int64Value: "30" }, - }, - ast: "_-_(\n 42^#*expr.Constant_Int64Value#,\n 12^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_-_(\n 42~int,\n 12~int\n)~int^subtract_int64", - type: "int", - }, - { - original: { - name: "sub_positive_negative", - expr: "42 - (-22)", - value: { int64Value: "64" }, - }, - ast: "_-_(\n 42^#*expr.Constant_Int64Value#,\n -22^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_-_(\n 42~int,\n -22~int\n)~int^subtract_int64", - type: "int", - }, - { - original: { - name: "sub_negative_negative", - expr: "-42 - (-12)", - value: { int64Value: "-30" }, - }, - ast: "_-_(\n -42^#*expr.Constant_Int64Value#,\n -12^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_-_(\n -42~int,\n -12~int\n)~int^subtract_int64", - type: "int", - }, - { - original: { - name: "multiply_positive_positive", - expr: "42 * 2", - value: { int64Value: "84" }, - }, - ast: "_*_(\n 42^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_*_(\n 42~int,\n 2~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "multiply_positive_negative", - expr: "40 * (-2)", - value: { int64Value: "-80" }, - }, - ast: "_*_(\n 40^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_*_(\n 40~int,\n -2~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "multiply_negative_negative", - expr: "-30 * (-2)", - value: { int64Value: "60" }, - }, - ast: "_*_(\n -30^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_*_(\n -30~int,\n -2~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "divide_positive_positive", - expr: "42 / 2", - value: { int64Value: "21" }, - }, - ast: "_/_(\n 42^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_/_(\n 42~int,\n 2~int\n)~int^divide_int64", - type: "int", - }, - { - original: { - name: "divide_positive_negative", - expr: "-20 / 2", - value: { int64Value: "-10" }, - }, - ast: "_/_(\n -20^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_/_(\n -20~int,\n 2~int\n)~int^divide_int64", - type: "int", - }, - { - original: { - name: "divide_negative_negative", - expr: "-80 / (-2)", - value: { int64Value: "40" }, - }, - ast: "_/_(\n -80^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_/_(\n -80~int,\n -2~int\n)~int^divide_int64", - type: "int", - }, - { - original: { - name: "mod_positive_positive", - expr: "47 % 5", - value: { int64Value: "2" }, - }, - ast: "_%_(\n 47^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_%_(\n 47~int,\n 5~int\n)~int^modulo_int64", - type: "int", - }, - { - original: { - name: "mod_positive_negative", - expr: "43 % (-5)", - value: { int64Value: "3" }, - }, - ast: "_%_(\n 43^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_%_(\n 43~int,\n -5~int\n)~int^modulo_int64", - type: "int", - }, - { - original: { - name: "mod_negative_negative", - expr: "-42 % (-5)", - value: { int64Value: "-2" }, - }, - ast: "_%_(\n -42^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_%_(\n -42~int,\n -5~int\n)~int^modulo_int64", - type: "int", - }, - { - original: { - name: "mod_negative_positive", - expr: "-3 % 5", - value: { int64Value: "-3" }, - }, - ast: "_%_(\n -3^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_%_(\n -3~int,\n 5~int\n)~int^modulo_int64", - type: "int", - }, - { - original: { - name: "unary_minus_pos", - expr: "-(42)", - value: { int64Value: "-42" }, - }, - ast: "-_(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "-_(\n 42~int\n)~int^negate_int64", - type: "int", - }, - { - original: { - name: "unary_minus_neg", - expr: "-(-42)", - value: { int64Value: "42" }, - }, - ast: "-_(\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "-_(\n -42~int\n)~int^negate_int64", - type: "int", - }, - { - original: { - name: "unary_minus_no_overload", - expr: "-(42u)", - disableCheck: true, - evalError: { errors: [{ message: "no_such_overload" }] }, - }, - ast: "-_(\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(uint)'\n | -(42u)\n | ^", - }, - { - original: { - name: "unary_minus_not_bool", - expr: "-false", - disableCheck: true, - evalError: { errors: [{ message: "no_such_overload" }] }, - }, - ast: "-_(\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(bool)'\n | -false\n | ^", - }, - { - original: { - name: "mod_zero", - expr: "34 % 0", - evalError: { errors: [{ message: "modulus by zero" }] }, - }, - ast: "_%_(\n 34^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_%_(\n 34~int,\n 0~int\n)~int^modulo_int64", - type: "int", - }, - { - original: { - name: "negative_zero", - expr: "-(0)", - value: { int64Value: "0" }, - }, - ast: "-_(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "-_(\n 0~int\n)~int^negate_int64", - type: "int", - }, - { - original: { - name: "double_negative", - expr: "-(-42)", - value: { int64Value: "42" }, - }, - ast: "-_(\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "-_(\n -42~int\n)~int^negate_int64", - type: "int", - }, - { - original: { - name: "divide_zero", - expr: "15 / 0", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "_/_(\n 15^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_/_(\n 15~int,\n 0~int\n)~int^divide_int64", - type: "int", - }, - { - original: { - name: "multiply_zero", - expr: "15 * 0", - value: { int64Value: "0" }, - }, - ast: "_*_(\n 15^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_*_(\n 15~int,\n 0~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "add_left_identity", - expr: "0 + 17", - value: { int64Value: "17" }, - }, - ast: "_+_(\n 0^#*expr.Constant_Int64Value#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n 0~int,\n 17~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "add_right_identity", - expr: " 29 + 0", - value: { int64Value: "29" }, - }, - ast: "_+_(\n 29^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n 29~int,\n 0~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "add_commutative", - expr: "75 + 15 == 15 + 75", - value: { boolValue: true }, - }, - ast: "_==_(\n _+_(\n 75^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 75^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _+_(\n 75~int,\n 15~int\n )~int^add_int64,\n _+_(\n 15~int,\n 75~int\n )~int^add_int64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "add_associative", - expr: "5 + (15 + 20) == (5 + 15) + 20", - value: { boolValue: true }, - }, - ast: "_==_(\n _+_(\n 5^#*expr.Constant_Int64Value#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _+_(\n 5~int,\n _+_(\n 15~int,\n 20~int\n )~int^add_int64\n )~int^add_int64,\n _+_(\n _+_(\n 5~int,\n 15~int\n )~int^add_int64,\n 20~int\n )~int^add_int64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "mul_left_identity", - expr: "1 * 45", - value: { int64Value: "45" }, - }, - ast: "_*_(\n 1^#*expr.Constant_Int64Value#,\n 45^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_*_(\n 1~int,\n 45~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "mul_right_identity", - expr: "-25 * 1", - value: { int64Value: "-25" }, - }, - ast: "_*_(\n -25^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_*_(\n -25~int,\n 1~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "mul_commutative", - expr: "15 * 25 == 25 * 15", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 15~int,\n 25~int\n )~int^multiply_int64,\n _*_(\n 25~int,\n 15~int\n )~int^multiply_int64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "mul_associative", - expr: "15 * (23 * 88) == (15 * 23) * 88", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n _*_(\n 23^#*expr.Constant_Int64Value#,\n 88^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n 23^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 88^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 15~int,\n _*_(\n 23~int,\n 88~int\n )~int^multiply_int64\n )~int^multiply_int64,\n _*_(\n _*_(\n 15~int,\n 23~int\n )~int^multiply_int64,\n 88~int\n )~int^multiply_int64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "add_mul_distribute", - expr: "5 * (15 + 25) == 5 * 15 + 5 * 25", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 5^#*expr.Constant_Int64Value#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 5~int,\n _+_(\n 15~int,\n 25~int\n )~int^add_int64\n )~int^multiply_int64,\n _+_(\n _*_(\n 5~int,\n 15~int\n )~int^multiply_int64,\n _*_(\n 5~int,\n 25~int\n )~int^multiply_int64\n )~int^add_int64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "int64_overflow_positive", - description: "LLONG_MAX plus one.", - expr: "9223372036854775807 + 1", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_+_(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n 9223372036854775807~int,\n 1~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "int64_overflow_negative", - description: "LLONG_MIN minus one.", - expr: "-9223372036854775808 - 1", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_-_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_-_(\n -9223372036854775808~int,\n 1~int\n)~int^subtract_int64", - type: "int", - }, - { - original: { - name: "int64_overflow_add_negative", - description: "negative overflow via addition", - expr: "-9223372036854775808 + (-1)", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_+_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n -9223372036854775808~int,\n -1~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "int64_overflow_sub_positive", - description: "positive overflow via subtraction", - expr: "1 - (-9223372036854775807)", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_-_(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_-_(\n 1~int,\n -9223372036854775807~int\n)~int^subtract_int64", - type: "int", - }, - { - original: { - name: "int64_min_negate", - description: "Negated LLONG_MIN is not representable.", - expr: "-(-9223372036854775808)", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "-_(\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "-_(\n -9223372036854775808~int\n)~int^negate_int64", - type: "int", - }, - { - original: { - name: "int64_min_negate_mul", - description: "Negate LLONG_MIN via multiplication", - expr: "(-9223372036854775808) * -1", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_*_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n -9223372036854775808~int,\n -1~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "int64_min_negate_div", - description: "Negate LLONG_MIN via division.", - expr: "(-9223372036854775808)/-1", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_/_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_/_(\n -9223372036854775808~int,\n -1~int\n)~int^divide_int64", - type: "int", - }, - { - original: { - name: "int64_overflow_mul_positive", - description: "Overflow via multiplication.", - expr: "5000000000 * 5000000000", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_*_(\n 5000000000^#*expr.Constant_Int64Value#,\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 5000000000~int,\n 5000000000~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "int64_overflow_mul_negative", - description: "Overflow via multiplication.", - expr: "(-5000000000) * 5000000000", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_*_(\n -5000000000^#*expr.Constant_Int64Value#,\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n -5000000000~int,\n 5000000000~int\n)~int^multiply_int64", - type: "int", - }, - { - original: { - name: "uint64_overflow_positive", - description: "ULLONG_MAX plus one.", - expr: "18446744073709551615u + 1u", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_+_(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^add_uint64", - type: "uint", - }, - { - original: { - name: "uint64_overflow_negative", - description: "zero minus one.", - expr: "0u - 1u", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_-_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_-_(\n 0u~uint,\n 1u~uint\n)~uint^subtract_uint64", - type: "uint", - }, - { - original: { - name: "uint64_overflow_mul_positive", - description: "Overflow via multiplication.", - expr: "5000000000u * 5000000000u", - evalError: { - errors: [{ message: "return error for overflow" }], - }, - }, - ast: "_*_(\n 5000000000u^#*expr.Constant_Uint64Value#,\n 5000000000u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 5000000000u~uint,\n 5000000000u~uint\n)~uint^multiply_uint64", - type: "uint", - }, - ], - }, - { - name: "uint64_math", - tests: [ - { - original: { - name: "add", - expr: "42u + 2u", - value: { uint64Value: "44" }, - }, - ast: "_+_(\n 42u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n 42u~uint,\n 2u~uint\n)~uint^add_uint64", - type: "uint", - }, - { - original: { - name: "sub", - expr: "42u - 12u", - value: { uint64Value: "30" }, - }, - ast: "_-_(\n 42u^#*expr.Constant_Uint64Value#,\n 12u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_-_(\n 42u~uint,\n 12u~uint\n)~uint^subtract_uint64", - type: "uint", - }, - { - original: { - name: "multiply", - expr: "40u * 2u", - value: { uint64Value: "80" }, - }, - ast: "_*_(\n 40u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 40u~uint,\n 2u~uint\n)~uint^multiply_uint64", - type: "uint", - }, - { - original: { - name: "divide", - expr: "60u / 2u", - value: { uint64Value: "30" }, - }, - ast: "_/_(\n 60u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_/_(\n 60u~uint,\n 2u~uint\n)~uint^divide_uint64", - type: "uint", - }, - { - original: { - name: "mod", - expr: "42u % 5u", - value: { uint64Value: "2" }, - }, - ast: "_%_(\n 42u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_%_(\n 42u~uint,\n 5u~uint\n)~uint^modulo_uint64", - type: "uint", - }, - { - original: { - name: "negative_no_overload", - expr: "-(5u)", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "-_(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(uint)'\n | -(5u)\n | ^", - }, - { - original: { - name: "mod_zero", - expr: "34u % 0u", - evalError: { errors: [{ message: "modulus by zero" }] }, - }, - ast: "_%_(\n 34u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_%_(\n 34u~uint,\n 0u~uint\n)~uint^modulo_uint64", - type: "uint", - }, - { - original: { - name: "divide_zero", - expr: "15u / 0u", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "_/_(\n 15u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_/_(\n 15u~uint,\n 0u~uint\n)~uint^divide_uint64", - type: "uint", - }, - { - original: { - name: "multiply_zero", - expr: "15u * 0u", - value: { uint64Value: "0" }, - }, - ast: "_*_(\n 15u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 15u~uint,\n 0u~uint\n)~uint^multiply_uint64", - type: "uint", - }, - { - original: { - name: "add_left_identity", - expr: "0u + 17u", - value: { uint64Value: "17" }, - }, - ast: "_+_(\n 0u^#*expr.Constant_Uint64Value#,\n 17u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n 0u~uint,\n 17u~uint\n)~uint^add_uint64", - type: "uint", - }, - { - original: { - name: "add_right_identity", - expr: " 29u + 0u", - value: { uint64Value: "29" }, - }, - ast: "_+_(\n 29u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_+_(\n 29u~uint,\n 0u~uint\n)~uint^add_uint64", - type: "uint", - }, - { - original: { - name: "add_commutative", - expr: "75u + 15u == 15u + 75u", - value: { boolValue: true }, - }, - ast: "_==_(\n _+_(\n 75u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 75u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _+_(\n 75u~uint,\n 15u~uint\n )~uint^add_uint64,\n _+_(\n 15u~uint,\n 75u~uint\n )~uint^add_uint64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "add_associative", - expr: "5u + (15u + 20u) == (5u + 15u) + 20u", - value: { boolValue: true }, - }, - ast: "_==_(\n _+_(\n 5u^#*expr.Constant_Uint64Value#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 20u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 20u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _+_(\n 5u~uint,\n _+_(\n 15u~uint,\n 20u~uint\n )~uint^add_uint64\n )~uint^add_uint64,\n _+_(\n _+_(\n 5u~uint,\n 15u~uint\n )~uint^add_uint64,\n 20u~uint\n )~uint^add_uint64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "mul_left_identity", - expr: "1u * 45u", - value: { uint64Value: "45" }, - }, - ast: "_*_(\n 1u^#*expr.Constant_Uint64Value#,\n 45u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 1u~uint,\n 45u~uint\n)~uint^multiply_uint64", - type: "uint", - }, - { - original: { - name: "mul_right_identity", - expr: "25u * 1u", - value: { uint64Value: "25" }, - }, - ast: "_*_(\n 25u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_*_(\n 25u~uint,\n 1u~uint\n)~uint^multiply_uint64", - type: "uint", - }, - { - original: { - name: "mul_commutative", - expr: "15u * 25u == 25u * 15u", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 15u~uint,\n 25u~uint\n )~uint^multiply_uint64,\n _*_(\n 25u~uint,\n 15u~uint\n )~uint^multiply_uint64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "mul_associative", - expr: "15u * (23u * 88u) == (15u * 23u) * 88u", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n _*_(\n 23u^#*expr.Constant_Uint64Value#,\n 88u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n 23u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 88u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 15u~uint,\n _*_(\n 23u~uint,\n 88u~uint\n )~uint^multiply_uint64\n )~uint^multiply_uint64,\n _*_(\n _*_(\n 15u~uint,\n 23u~uint\n )~uint^multiply_uint64,\n 88u~uint\n )~uint^multiply_uint64\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "add_mul_distribute", - expr: "5u * (15u + 25u) == 5u * 15u + 5u * 25u", - value: { boolValue: true }, - }, - ast: "_==_(\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _*_(\n 5u~uint,\n _+_(\n 15u~uint,\n 25u~uint\n )~uint^add_uint64\n )~uint^multiply_uint64,\n _+_(\n _*_(\n 5u~uint,\n 15u~uint\n )~uint^multiply_uint64,\n _*_(\n 5u~uint,\n 25u~uint\n )~uint^multiply_uint64\n )~uint^add_uint64\n)~bool^equals", - type: "bool", - }, - ], - }, - ], - }, - { - name: "lists", - suites: [ - { - name: "concatenation", - tests: [ - { - original: { - name: "list_append", - expr: "[0, 1, 2] + [3, 4, 5] == [0, 1, 2, 3, 4, 5]", - value: { boolValue: true }, - }, - ast: "_==_(\n _+_(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _+_(\n [\n 0~int,\n 1~int,\n 2~int\n ]~list(int),\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n )~list(int)^add_list,\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "list_not_commutative", - expr: "[0, 1, 2] + [3, 4, 5] == [3, 4, 5, 0, 1, 2]", - value: { boolValue: false }, - }, - ast: "_==_(\n _+_(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n _+_(\n [\n 0~int,\n 1~int,\n 2~int\n ]~list(int),\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n )~list(int)^add_list,\n [\n 3~int,\n 4~int,\n 5~int,\n 0~int,\n 1~int,\n 2~int\n ]~list(int)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "list_repeat", - expr: "[2] + [2]", - value: { - listValue: { - values: [{ int64Value: "2" }, { int64Value: "2" }], - }, - }, - }, - ast: "_+_(\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n [\n 2~int\n ]~list(int),\n [\n 2~int\n ]~list(int)\n)~list(int)^add_list", - type: "list(int)", - }, - { - original: { - name: "empty_empty", - expr: "[] + []", - value: { listValue: {} }, - }, - ast: "_+_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n []~list(dyn),\n []~list(dyn)\n)~list(dyn)^add_list", - type: "list(dyn)", - }, - { - original: { - name: "left_unit", - expr: "[] + [3, 4]", - value: { - listValue: { - values: [{ int64Value: "3" }, { int64Value: "4" }], - }, - }, - }, - ast: "_+_(\n []^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n []~list(int),\n [\n 3~int,\n 4~int\n ]~list(int)\n)~list(int)^add_list", - type: "list(int)", - }, - { - original: { - name: "right_unit", - expr: "[1, 2] + []", - value: { - listValue: { - values: [{ int64Value: "1" }, { int64Value: "2" }], - }, - }, - }, - ast: "_+_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n [\n 1~int,\n 2~int\n ]~list(int),\n []~list(int)\n)~list(int)^add_list", - type: "list(int)", - }, - ], - }, - { - name: "index", - tests: [ - { - original: { - name: "zero_based", - expr: "[7, 8, 9][0]", - value: { int64Value: "7" }, - }, - ast: "_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n 0~int\n)~int^index_list", - type: "int", - }, - { - original: { - name: "zero_based_double", - expr: "[7, 8, 9][dyn(0.0)]", - value: { int64Value: "7" }, - }, - ast: "_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0~double\n )~dyn^to_dyn\n)~int^index_list", - type: "int", - }, - { - original: { - name: "zero_based_double_error", - expr: "[7, 8, 9][dyn(0.1)]", - evalError: { errors: [{ message: "invalid_argument" }] }, - }, - ast: "_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0.1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0.1~double\n )~dyn^to_dyn\n)~int^index_list", - type: "int", - }, - { - original: { - name: "zero_based_uint", - expr: "[7, 8, 9][dyn(0u)]", - value: { int64Value: "7" }, - }, - ast: "_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0u~uint\n )~dyn^to_dyn\n)~int^index_list", - type: "int", - }, - { - original: { - name: "singleton", - expr: "['foo'][0]", - value: { stringValue: "foo" }, - }, - ast: '_[_](\n [\n "foo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n [\n "foo"~string\n ]~list(string),\n 0~int\n)~string^index_list', - type: "string", - }, - { - original: { - name: "middle", - expr: "[0, 1, 1, 2, 3, 5, 8, 13][4]", - value: { int64Value: "3" }, - }, - ast: "_[_](\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 13^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n 0~int,\n 1~int,\n 1~int,\n 2~int,\n 3~int,\n 5~int,\n 8~int,\n 13~int\n ]~list(int),\n 4~int\n)~int^index_list", - type: "int", - }, - { - original: { - name: "last", - expr: "['George', 'John', 'Paul', 'Ringo'][3]", - value: { stringValue: "Ringo" }, - }, - ast: '_[_](\n [\n "George"^#*expr.Constant_StringValue#,\n "John"^#*expr.Constant_StringValue#,\n "Paul"^#*expr.Constant_StringValue#,\n "Ringo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n [\n "George"~string,\n "John"~string,\n "Paul"~string,\n "Ringo"~string\n ]~list(string),\n 3~int\n)~string^index_list', - type: "string", - }, - { - original: { - name: "index_out_of_bounds", - expr: "[1, 2, 3][3]", - evalError: { errors: [{ message: "invalid_argument" }] }, - }, - ast: "_[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n)~int^index_list", - type: "int", - }, - { - original: { - name: "index_out_of_bounds_or_false", - expr: "dyn([1, 2, 3][3]) || false", - evalError: { errors: [{ message: "invalid_argument" }] }, - }, - ast: "_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "index_out_of_bounds_or_true", - expr: "dyn([1, 2, 3][3]) || true", - value: { boolValue: true }, - }, - ast: "_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "index_out_of_bounds_and_false", - expr: "dyn([1, 2, 3][3]) \u0026\u0026 false", - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "index_out_of_bounds_and_true", - expr: "dyn([1, 2, 3][3]) \u0026\u0026 true", - evalError: { errors: [{ message: "invalid_argument" }] }, - }, - ast: "_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "bad_index_type", - expr: "[1, 2, 3][dyn('')]", - evalError: { errors: [{ message: "invalid_argument" }] }, - }, - ast: '_[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n)~int^index_list', - type: "int", - }, - { - original: { - name: "bad_index_type_or_false", - expr: "dyn([1, 2, 3][dyn('')]) || false", - evalError: { errors: [{ message: "invalid_argument" }] }, - }, - ast: '_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or', - type: "bool", - }, - { - original: { - name: "bad_index_type_or_true", - expr: "dyn([1, 2, 3][dyn('')]) || true", - value: { boolValue: true }, - }, - ast: '_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or', - type: "bool", - }, - { - original: { - name: "bad_index_type_and_false", - expr: "dyn([1, 2, 3][dyn('')]) \u0026\u0026 false", - value: { boolValue: false }, - }, - ast: '_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and', - type: "bool", - }, - { - original: { - name: "bad_index_type_and_true", - expr: "dyn([1, 2, 3][dyn('')]) \u0026\u0026 true", - evalError: { errors: [{ message: "invalid_argument" }] }, - }, - ast: '_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and', - type: "bool", - }, - ], - }, - { - name: "in", - tests: [ - { - original: { - name: "empty", - expr: "7 in []", - value: { boolValue: false }, - }, - ast: "@in(\n 7^#*expr.Constant_Int64Value#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: "@in(\n 7~int,\n []~list(int)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "singleton", - expr: "4u in [4u]", - value: { boolValue: true }, - }, - ast: "@in(\n 4u^#*expr.Constant_Uint64Value#,\n [\n 4u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n 4u~uint,\n [\n 4u~uint\n ]~list(uint)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "first", - expr: "'alpha' in ['alpha', 'beta', 'gamma']", - value: { boolValue: true }, - }, - ast: '@in(\n "alpha"^#*expr.Constant_StringValue#,\n [\n "alpha"^#*expr.Constant_StringValue#,\n "beta"^#*expr.Constant_StringValue#,\n "gamma"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "alpha"~string,\n [\n "alpha"~string,\n "beta"~string,\n "gamma"~string\n ]~list(string)\n)~bool^in_list', - type: "bool", - }, - { - original: { - name: "middle", - expr: "3 in [5, 4, 3, 2, 1]", - value: { boolValue: true }, - }, - ast: "@in(\n 3^#*expr.Constant_Int64Value#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n 3~int,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "last", - expr: "20u in [4u, 6u, 8u, 12u, 20u]", - value: { boolValue: true }, - }, - ast: "@in(\n 20u^#*expr.Constant_Uint64Value#,\n [\n 4u^#*expr.Constant_Uint64Value#,\n 6u^#*expr.Constant_Uint64Value#,\n 8u^#*expr.Constant_Uint64Value#,\n 12u^#*expr.Constant_Uint64Value#,\n 20u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n 20u~uint,\n [\n 4u~uint,\n 6u~uint,\n 8u~uint,\n 12u~uint,\n 20u~uint\n ]~list(uint)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "double_in_ints", - expr: "dyn(3.0) in [5, 4, 3, 2, 1]", - value: { boolValue: true }, - }, - ast: "@in(\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n dyn(\n 3~double\n )~dyn^to_dyn,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "uint_in_ints", - expr: "dyn(3u) in [5, 4, 3, 2, 1]", - value: { boolValue: true }, - }, - ast: "@in(\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "int_in_doubles", - expr: "dyn(3) in [5.0, 4.0, 3.0, 2.0, 1.0]", - value: { boolValue: true }, - }, - ast: "@in(\n dyn(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_DoubleValue#,\n 4^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n dyn(\n 3~int\n )~dyn^to_dyn,\n [\n 5~double,\n 4~double,\n 3~double,\n 2~double,\n 1~double\n ]~list(double)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "uint_in_doubles", - expr: "dyn(3u) in [5.0, 4.0, 3.0, 2.0, 1.0]", - value: { boolValue: true }, - }, - ast: "@in(\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_DoubleValue#,\n 4^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n [\n 5~double,\n 4~double,\n 3~double,\n 2~double,\n 1~double\n ]~list(double)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "int_in_uints", - expr: "dyn(3) in [5u, 4u, 3u, 2u, 1u]", - value: { boolValue: true }, - }, - ast: "@in(\n dyn(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n dyn(\n 3~int\n )~dyn^to_dyn,\n [\n 5u~uint,\n 4u~uint,\n 3u~uint,\n 2u~uint,\n 1u~uint\n ]~list(uint)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "double_in_uints", - expr: "dyn(3.0) in [5u, 4u, 3u, 2u, 1u]", - value: { boolValue: true }, - }, - ast: "@in(\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n [\n 5u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "@in(\n dyn(\n 3~double\n )~dyn^to_dyn,\n [\n 5u~uint,\n 4u~uint,\n 3u~uint,\n 2u~uint,\n 1u~uint\n ]~list(uint)\n)~bool^in_list", - type: "bool", - }, - { - original: { - name: "missing", - expr: "'hawaiian' in ['meat', 'veggie', 'margarita', 'cheese']", - value: { boolValue: false }, - }, - ast: '@in(\n "hawaiian"^#*expr.Constant_StringValue#,\n [\n "meat"^#*expr.Constant_StringValue#,\n "veggie"^#*expr.Constant_StringValue#,\n "margarita"^#*expr.Constant_StringValue#,\n "cheese"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '@in(\n "hawaiian"~string,\n [\n "meat"~string,\n "veggie"~string,\n "margarita"~string,\n "cheese"~string\n ]~list(string)\n)~bool^in_list', - type: "bool", - }, - ], - }, - { - name: "size", - tests: [ - { - original: { - name: "list_empty", - expr: "size([])", - value: { int64Value: "0" }, - }, - ast: "size(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: "size(\n []~list(dyn)\n)~int^size_list", - type: "int", - }, - { - original: { - name: "list", - expr: "size([1, 2, 3])", - value: { int64Value: "3" }, - }, - ast: "size(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "size(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~int^size_list", - type: "int", - }, - { - original: { - name: "map_empty", - expr: "size({})", - value: { int64Value: "0" }, - }, - ast: "size(\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: "size(\n {}~map(dyn, dyn)\n)~int^size_map", - type: "int", - }, - { - original: { - name: "map", - expr: "size({1: 'one', 2: 'two', 3: 'three'})", - value: { int64Value: "3" }, - }, - ast: 'size(\n {\n 1^#*expr.Constant_Int64Value#:"one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:"two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:"three"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'size(\n {\n 1~int:"one"~string,\n 2~int:"two"~string,\n 3~int:"three"~string\n }~map(int, string)\n)~int^size_map', - type: "int", - }, - ], - }, - ], - }, - { - name: "logic", - suites: [ - { - name: "conditional", - tests: [ - { - original: { - name: "true_case", - expr: "true ? 1 : 2", - value: { int64Value: "1" }, - }, - ast: "_?_:_(\n true^#*expr.Constant_BoolValue#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n true~bool,\n 1~int,\n 2~int\n)~int^conditional", - type: "int", - }, - { - original: { - name: "false_case", - expr: "false ? 'foo' : 'bar'", - value: { stringValue: "bar" }, - }, - ast: '_?_:_(\n false^#*expr.Constant_BoolValue#,\n "foo"^#*expr.Constant_StringValue#,\n "bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_?_:_(\n false~bool,\n "foo"~string,\n "bar"~string\n)~string^conditional', - type: "string", - }, - { - original: { - name: "error_case", - expr: "2 / 0 \u003e 4 ? 'baz' : 'quux'", - evalError: { errors: [{ message: "division by zero" }] }, - }, - ast: '_?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "baz"^#*expr.Constant_StringValue#,\n "quux"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 4~int\n )~bool^greater_int64,\n "baz"~string,\n "quux"~string\n)~string^conditional', - type: "string", - }, - { - original: { - name: "mixed_type", - expr: "true ? 'cows' : 17", - disableCheck: true, - value: { stringValue: "cows" }, - }, - ast: '_?_:_(\n true^#*expr.Constant_BoolValue#,\n "cows"^#*expr.Constant_StringValue#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:6: found no matching overload for '_?_:_' applied to '(bool, string, int)'\n | true ? 'cows' : 17\n | .....^", - }, - { - original: { - name: "bad_type", - expr: "'cows' ? false : 17", - disableCheck: true, - evalError: { errors: [{ message: "no matching overload" }] }, - }, - ast: '_?_:_(\n "cows"^#*expr.Constant_StringValue#,\n false^#*expr.Constant_BoolValue#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:8: found no matching overload for '_?_:_' applied to '(string, bool, int)'\n | 'cows' ? false : 17\n | .......^", - }, - ], - }, - { - name: "AND", - tests: [ - { - original: { - name: "all_true", - expr: "true \u0026\u0026 true", - value: { boolValue: true }, - }, - ast: "_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n true~bool,\n true~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "all_false", - expr: "false \u0026\u0026 false", - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n false~bool,\n false~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "false_left", - expr: "false \u0026\u0026 true", - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n false~bool,\n true~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "false_right", - expr: "true \u0026\u0026 false", - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n true~bool,\n false~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "short_circuit_type_left", - expr: "false \u0026\u0026 32", - disableCheck: true, - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n 32^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:10: expected type 'bool' but found 'int'\n | false \u0026\u0026 32\n | .........^", - }, - { - original: { - name: "short_circuit_type_right", - expr: "'horses' \u0026\u0026 false", - disableCheck: true, - value: { boolValue: false }, - }, - ast: '_\u0026\u0026_(\n "horses"^#*expr.Constant_StringValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'horses' \u0026\u0026 false\n | ^", - }, - { - original: { - name: "short_circuit_error_left", - expr: "false \u0026\u0026 (2 / 0 \u003e 3 ? false : true)", - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n false~bool,\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "short_circuit_error_right", - expr: "(2 / 0 \u003e 3 ? false : true) \u0026\u0026 false", - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional,\n false~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "error_right", - expr: "true \u0026\u0026 1/0 != 0", - evalError: { errors: [{ message: "no matching overload" }] }, - }, - ast: "_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n true~bool,\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "error_left", - expr: "1/0 != 0 \u0026\u0026 true", - evalError: { errors: [{ message: "no matching overload" }] }, - }, - ast: "_\u0026\u0026_(\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals,\n true~bool\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "no_overload", - expr: "'less filling' \u0026\u0026 'tastes great'", - disableCheck: true, - evalError: { errors: [{ message: "no matching overload" }] }, - }, - ast: '_\u0026\u0026_(\n "less filling"^#*expr.Constant_StringValue#,\n "tastes great"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'less filling' \u0026\u0026 'tastes great'\n | ^\nERROR: \u003cinput\u003e:1:19: expected type 'bool' but found 'string'\n | 'less filling' \u0026\u0026 'tastes great'\n | ..................^", - }, - ], - }, - { - name: "OR", - tests: [ - { - original: { - name: "all_true", - expr: "true || true", - value: { boolValue: true }, - }, - ast: "_||_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_||_(\n true~bool,\n true~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "all_false", - expr: "false || false", - value: { boolValue: false }, - }, - ast: "_||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n false~bool,\n false~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "false_left", - expr: "false || true", - value: { boolValue: true }, - }, - ast: "_||_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n false~bool,\n true~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "false_right", - expr: "true || false", - value: { boolValue: true }, - }, - ast: "_||_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n true~bool,\n false~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "short_circuit_type_left", - expr: "true || 32", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n true^#*expr.Constant_BoolValue#,\n 32^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:9: expected type 'bool' but found 'int'\n | true || 32\n | ........^", - }, - { - original: { - name: "short_circuit_type_right", - expr: "'horses' || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: '_||_(\n "horses"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'horses' || true\n | ^", - }, - { - original: { - name: "short_circuit_error_left", - expr: "true || (2 / 0 \u003e 3 ? false : true)", - value: { boolValue: true }, - }, - ast: "_||_(\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n true~bool,\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "short_circuit_error_right", - expr: "(2 / 0 \u003e 3 ? false : true) || true", - value: { boolValue: true }, - }, - ast: "_||_(\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional,\n true~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "error_right", - expr: "false || 1/0 != 0", - evalError: { errors: [{ message: "no matching overload" }] }, - }, - ast: "_||_(\n false^#*expr.Constant_BoolValue#,\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n false~bool,\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "error_left", - expr: "1/0 != 0 || false", - evalError: { errors: [{ message: "no matching overload" }] }, - }, - ast: "_||_(\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals,\n false~bool\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "no_overload", - expr: "'less filling' || 'tastes great'", - disableCheck: true, - evalError: { errors: [{ message: "no matching overload" }] }, - }, - ast: '_||_(\n "less filling"^#*expr.Constant_StringValue#,\n "tastes great"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'less filling' || 'tastes great'\n | ^\nERROR: \u003cinput\u003e:1:19: expected type 'bool' but found 'string'\n | 'less filling' || 'tastes great'\n | ..................^", - }, - ], - }, - { - name: "NOT", - tests: [ - { - original: { - name: "not_true", - expr: "!true", - value: { boolValue: false }, - }, - ast: "!_(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "!_(\n true~bool\n)~bool^logical_not", - type: "bool", - }, - { - original: { - name: "not_false", - expr: "!false", - value: { boolValue: true }, - }, - ast: "!_(\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "!_(\n false~bool\n)~bool^logical_not", - type: "bool", - }, - { - original: { - name: "no_overload", - expr: "!0", - disableCheck: true, - evalError: { errors: [{ message: "no matching overload" }] }, - }, - ast: "!_(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: found no matching overload for '!_' applied to '(int)'\n | !0\n | ^", - }, - ], - }, - ], - }, - { - name: "macros", - suites: [ - { - name: "exists", - tests: [ - { - original: { - name: "list_elem_all_true", - expr: "[1, 2, 3].exists(e, e \u003e 0)", - value: { boolValue: true }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_elem_some_true", - expr: "[1, 2, 3].exists(e, e == 2)", - value: { boolValue: true }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_elem_none_true", - expr: "[1, 2, 3].exists(e, e \u003e 3)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 3~int\n )~bool^greater_int64\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_elem_type_shortcircuit", - description: "Exists filter is true for the last element.", - expr: "[1, 'foo', 3].exists(e, e != '1')", - value: { boolValue: true }, - }, - ast: '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n e^#*expr.Expr_IdentExpr#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n "foo"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _!=_(\n e~dyn^e,\n "1"~string\n )~bool^not_equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool', - type: "bool", - }, - { - original: { - name: "list_elem_type_exhaustive", - description: - "Exists filter is never true, but heterogenous equality ensure the result is false.", - expr: "[1, 'foo', 3].exists(e, e == '10')", - value: { boolValue: false }, - }, - ast: '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n "10"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n "foo"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~dyn^e,\n "10"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool', - type: "bool", - }, - { - original: { - name: "list_elem_exists_error", - expr: "[1, 2, 3].exists(e, e / 0 == 17)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n _/_(\n e~int^e,\n 0~int\n )~int^divide_int64,\n 17~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_empty", - expr: "[].exists(e, e == 2)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "map_key", - expr: "{'key1':1, 'key2':2}.exists(k, k == 'key2')", - value: { boolValue: true }, - }, - ast: '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"~string:1~int,\n "key2"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~string^k,\n "key2"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool', - type: "bool", - }, - { - original: { - name: "not_map_key", - expr: "!{'key1':1, 'key2':2}.exists(k, k == 'key3')", - value: { boolValue: true }, - }, - ast: '!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key3"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"~string:1~int,\n "key2"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~string^k,\n "key3"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n)~bool^logical_not', - type: "bool", - }, - { - original: { - name: "map_key_type_shortcircuit", - description: "Exists filter is true for the second key", - expr: "{'key':1, 1:21}.exists(k, k != 2)", - value: { boolValue: true }, - }, - ast: '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:21^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key"~string:1~int,\n 1~int:21~int\n }~map(dyn, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _!=_(\n k~dyn^k,\n 2~int\n )~bool^not_equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool', - type: "bool", - }, - { - original: { - name: "map_key_type_exhaustive", - description: - "Exists filter is never true, but heterogeneous equality ensures the result is false.", - expr: "!{'key':1, 1:42}.exists(k, k == 2)", - value: { boolValue: true }, - }, - ast: '!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n "key"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n "key"~string:1~int,\n 1~int:42~int\n }~map(dyn, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~dyn^k,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n)~bool^logical_not', - type: "bool", - }, - ], - }, - { - name: "all", - tests: [ - { - original: { - name: "list_elem_all_true", - expr: "[1, 2, 3].all(e, e \u003e 0)", - value: { boolValue: true }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_elem_some_true", - expr: "[1, 2, 3].all(e, e == 2)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_elem_none_true", - expr: "[1, 2, 3].all(e, e == 17)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 17~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_elem_type_shortcircuit", - expr: "[1, 'foo', 3].all(e, e == 1)", - value: { boolValue: false }, - }, - ast: '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n "foo"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~dyn^e,\n 1~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool', - type: "bool", - }, - { - original: { - name: "list_elem_type_exhaustive", - expr: "[1, 'foo', 3].all(e, e % 2 == 1)", - evalError: { errors: [{ message: "no_such_overload" }] }, - }, - ast: '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n "foo"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n _%_(\n e~dyn^e,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool', - type: "bool", - }, - { - original: { - name: "list_elem_error_shortcircuit", - expr: "[1, 2, 3].all(e, 6 / (2 - e) == 6)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n 6^#*expr.Constant_Int64Value#,\n _-_(\n 2^#*expr.Constant_Int64Value#,\n e^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n _/_(\n 6~int,\n _-_(\n 2~int,\n e~int^e\n )~int^subtract_int64\n )~int^divide_int64,\n 6~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_elem_error_exhaustive", - expr: "[1, 2, 3].all(e, e / 0 != 17)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n _/_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _!=_(\n _/_(\n e~int^e,\n 0~int\n )~int^divide_int64,\n 17~int\n )~bool^not_equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "list_empty", - expr: "[].all(e, e \u003e 0)", - value: { boolValue: true }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", - type: "bool", - }, - { - original: { - name: "map_key", - expr: "{'key1':1, 'key2':2}.all(k, k == 'key2')", - value: { boolValue: false }, - }, - ast: '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"~string:1~int,\n "key2"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n k~string^k,\n "key2"~string\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool', - type: "bool", - }, - ], - }, - { - name: "exists_one", - tests: [ - { - original: { - name: "list_empty", - expr: "[].exists_one(a, a == 7)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n a,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n a,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", - type: "bool", - }, - { - original: { - name: "list_one_true", - expr: "[7].exists_one(a, a == 7)", - value: { boolValue: true }, - }, - ast: "__comprehension__(\n // Variable\n a,\n // Target\n [\n 7^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n a,\n // Target\n [\n 7~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", - type: "bool", - }, - { - original: { - name: "list_one_false", - expr: "[8].exists_one(a, a == 7)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n a,\n // Target\n [\n 8^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n a,\n // Target\n [\n 8~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", - type: "bool", - }, - { - original: { - name: "list_none", - expr: "[1, 2, 3].exists_one(x, x \u003e 20)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n x,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n x^#*expr.Expr_IdentExpr#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n x,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n x~int^x,\n 20~int\n )~bool^greater_int64,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", - type: "bool", - }, - { - original: { - name: "list_one", - expr: "[6, 7, 8].exists_one(foo, foo % 5 == 2)", - value: { boolValue: true }, - }, - ast: "__comprehension__(\n // Variable\n foo,\n // Target\n [\n 6^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n foo,\n // Target\n [\n 6~int,\n 7~int,\n 8~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo~int^foo,\n 5~int\n )~int^modulo_int64,\n 2~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", - type: "bool", - }, - { - original: { - name: "list_many", - expr: "[0, 1, 2, 3, 4].exists_one(n, n % 2 == 1)", - value: { boolValue: false }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n~int^n,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", - type: "bool", - }, - { - original: { - name: "list_all", - expr: "['foal', 'foo', 'four'].exists_one(n, n.startsWith('fo'))", - value: { boolValue: false }, - }, - ast: '__comprehension__(\n // Variable\n n,\n // Target\n [\n "foal"^#*expr.Constant_StringValue#,\n "foo"^#*expr.Constant_StringValue#,\n "four"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n n^#*expr.Expr_IdentExpr#.startsWith(\n "fo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n n,\n // Target\n [\n "foal"~string,\n "foo"~string,\n "four"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n n~string^n.startsWith(\n "fo"~string\n )~bool^starts_with_string,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool', - type: "bool", - }, - { - original: { - name: "list_no_shortcircuit", - description: - "Errors invalidate everything, even if already false.", - expr: "[3, 2, 1, 0].exists_one(n, 12 / n \u003e 1)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int,\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12~int,\n n~int^n\n )~int^divide_int64,\n 1~int\n )~bool^greater_int64,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", - type: "bool", - }, - { - original: { - name: "map_one", - expr: "{6: 'six', 7: 'seven', 8: 'eight'}.exists_one(foo, foo % 5 == 2)", - value: { boolValue: true }, - }, - ast: '__comprehension__(\n // Variable\n foo,\n // Target\n {\n 6^#*expr.Constant_Int64Value#:"six"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:"seven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:"eight"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n foo,\n // Target\n {\n 6~int:"six"~string,\n 7~int:"seven"~string,\n 8~int:"eight"~string\n }~map(int, string),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo~int^foo,\n 5~int\n )~int^modulo_int64,\n 2~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool', - type: "bool", - }, - ], - }, - { - name: "map", - tests: [ - { - original: { - name: "list_empty", - expr: "[].map(n, n / 2)", - value: { listValue: {} }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n n~int^n,\n 2~int\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_one", - expr: "[3].map(n, n * n)", - value: { listValue: { values: [{ int64Value: "9" }] } }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _*_(\n n^#*expr.Expr_IdentExpr#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _*_(\n n~int^n,\n n~int^n\n )~int^multiply_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_many", - expr: "[2, 4, 6].map(n, n / 2)", - value: { - listValue: { - values: [ - { int64Value: "1" }, - { int64Value: "2" }, - { int64Value: "3" }, - ], - }, - }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int,\n 4~int,\n 6~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n n~int^n,\n 2~int\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_error", - expr: "[2, 1, 0].map(n, 4 / n)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n 4^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n 4~int,\n n~int^n\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "map_extract_keys", - expr: "{'John': 'smart'}.map(key, key) == ['John']", - value: { boolValue: true }, - }, - ast: '_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n "John"^#*expr.Constant_StringValue#:"smart"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n key^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n [\n "John"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n "John"~string:"smart"~string\n }~map(string, string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(string)^@result,\n [\n key~string^key\n ]~list(string)\n )~list(string)^add_list,\n // Result\n @result~list(string)^@result)~list(string),\n [\n "John"~string\n ]~list(string)\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "filter", - tests: [ - { - original: { - name: "list_empty", - expr: "[].filter(n, n % 2 == 0)", - value: { listValue: {} }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n~int^n,\n 2~int\n )~int^modulo_int64,\n 0~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_one_true", - expr: "[2].filter(n, n == 2)", - value: { listValue: { values: [{ int64Value: "2" }] } }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n n~int^n,\n 2~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_one_false", - expr: "[1].filter(n, n \u003e 3)", - value: { listValue: {} }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n n^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 1~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n n~int^n,\n 3~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_none", - expr: "[1, 2, 3].filter(e, e \u003e 3)", - value: { listValue: {} }, - }, - ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n e^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n e~int^e,\n 3~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n e~int^e\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_some", - expr: "[0, 1, 2, 3, 4].filter(x, x % 2 == 1)", - value: { - listValue: { - values: [{ int64Value: "1" }, { int64Value: "3" }], - }, - }, - }, - ast: "__comprehension__(\n // Variable\n x,\n // Target\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n x^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n x,\n // Target\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n x~int^x,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n x~int^x\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_all", - expr: "[1, 2, 3].filter(n, n \u003e 0)", - value: { - listValue: { - values: [ - { int64Value: "1" }, - { int64Value: "2" }, - { int64Value: "3" }, - ], - }, - }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n n^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n n~int^n,\n 0~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "list_no_shortcircuit", - expr: "[3, 2, 1, 0].filter(n, 12 / n \u003e 4)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int,\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12~int,\n n~int^n\n )~int^divide_int64,\n 4~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "map_filter_keys", - expr: "{'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}.filter(key, key == 'Ringo') == ['Ringo']", - value: { boolValue: true }, - }, - ast: '_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n "John"^#*expr.Constant_StringValue#:"smart"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "Paul"^#*expr.Constant_StringValue#:"cute"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "George"^#*expr.Constant_StringValue#:"quiet"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "Ringo"^#*expr.Constant_StringValue#:"funny"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n key^#*expr.Expr_IdentExpr#,\n "Ringo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n key^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n [\n "Ringo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n "John"~string:"smart"~string,\n "Paul"~string:"cute"~string,\n "George"~string:"quiet"~string,\n "Ringo"~string:"funny"~string\n }~map(string, string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n key~string^key,\n "Ringo"~string\n )~bool^equals,\n _+_(\n @result~list(string)^@result,\n [\n key~string^key\n ]~list(string)\n )~list(string)^add_list,\n @result~list(string)^@result\n )~list(string)^conditional,\n // Result\n @result~list(string)^@result)~list(string),\n [\n "Ringo"~string\n ]~list(string)\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "nested", - tests: [ - { - original: { - name: "filter_all", - expr: "['signer'].filter(signer, ['artifact'].all(artifact, true))", - value: { listValue: { values: [{ stringValue: "signer" }] } }, - }, - ast: '__comprehension__(\n // Variable\n signer,\n // Target\n [\n "signer"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n "artifact"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n signer^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n signer,\n // Target\n [\n "signer"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n "artifact"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n true~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool,\n _+_(\n @result~list(string)^@result,\n [\n signer~string^signer\n ]~list(string)\n )~list(string)^add_list,\n @result~list(string)^@result\n )~list(string)^conditional,\n // Result\n @result~list(string)^@result)~list(string)', - type: "list(string)", - }, - { - original: { - name: "all_all", - expr: "['signer'].all(signer, ['artifact'].all(artifact, true))", - value: { boolValue: true }, - }, - ast: '__comprehension__(\n // Variable\n signer,\n // Target\n [\n "signer"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n "artifact"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', - checkedAst: - '__comprehension__(\n // Variable\n signer,\n // Target\n [\n "signer"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n "artifact"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n true~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool', - type: "bool", - }, - ], - }, - ], - }, - { - name: "macros2", - suites: [ - { - name: "exists", - tests: [ - { - original: { - name: "list_elem_all_true", - expr: "[1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)", - value: { boolValue: true }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .......................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................................^", - }, - { - original: { - name: "list_elem_some_true", - expr: "[1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)", - value: { boolValue: true }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .......................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .................................^", - }, - { - original: { - name: "list_elem_none_true", - expr: "[1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)", - value: { boolValue: false }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | .......................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ................................^", - }, - { - original: { - name: "list_elem_type_shortcircuit", - expr: "[1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')", - value: { boolValue: true }, - }, - ast: '[\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:21: undeclared reference to 'exists' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ....................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ...........................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | .....................................^", - }, - { - original: { - name: "list_elem_type_exhaustive", - expr: "[1, 'foo', 3].exists(i, v, i == 3 || v == '10')", - value: { boolValue: false }, - }, - ast: '[\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n "10"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:21: undeclared reference to 'exists' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ....................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ...........................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | .....................................^", - }, - { - original: { - name: "list_elem_exists_error", - expr: "[1, 2, 3].exists(i, v, v / i == 17)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ...........................^", - }, - { - original: { - name: "list_empty", - expr: "[].exists(i, v, i == 0 || v == 2)", - value: { boolValue: false }, - }, - ast: "[]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:10: undeclared reference to 'exists' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | .........^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'i' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ..........^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'v' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | .............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'i' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ..........................^", - }, - { - original: { - name: "map_key", - expr: "{'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)", - value: { boolValue: true }, - }, - ast: '{\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:28: undeclared reference to 'exists' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ..................................^\nERROR: \u003cinput\u003e:1:50: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | .................................................^", - }, - { - original: { - name: "not_map_key", - expr: "!{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)", - value: { boolValue: true }, - }, - ast: '!_(\n {\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key3"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:29: undeclared reference to 'exists' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ............................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'k' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | .............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ................................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'k' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ...................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'v' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ..................................................^", - }, - { - original: { - name: "map_key_type_shortcircuit", - expr: "{'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)", - value: { boolValue: true }, - }, - ast: '{\n "key"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:21^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:23: undeclared reference to 'exists' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | ......................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'k' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'k' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .............................^\nERROR: \u003cinput\u003e:1:40: undeclared reference to 'v' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .......................................^", - }, - { - original: { - name: "map_key_type_exhaustive", - expr: "!{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)", - value: { boolValue: true }, - }, - ast: '!_(\n {\n "key"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 43^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'exists' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'k' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'k' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ..............................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'v' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ........................................^", - }, - ], - }, - { - name: "all", - tests: [ - { - original: { - name: "list_elem_all_true", - expr: "[1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)", - value: { boolValue: true }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ..............................^", - }, - { - original: { - name: "list_elem_some_true", - expr: "[1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)", - value: { boolValue: false }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ..............................^", - }, - { - original: { - name: "list_elem_none_true", - expr: "[1, 2, 3].all(i, v, i == 3 || v == 4)", - value: { boolValue: false }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ..............................^", - }, - { - original: { - name: "list_elem_type_shortcircuit", - expr: "[1, 'foo', 3].all(i, v, i == 0 || v == 1)", - value: { boolValue: false }, - }, - ast: '[\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ........................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ..................................^", - }, - { - original: { - name: "list_elem_type_exhaustive", - expr: "[0, 'foo', 3].all(i, v, v % 2 == i)", - value: { boolValue: false }, - }, - ast: '[\n 0^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | ........................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .................................^", - }, - { - original: { - name: "list_elem_type_error_exhaustive", - expr: "[0, 'foo', 5].all(i, v, v % 3 == i)", - evalError: { errors: [{ message: "no_such_overload" }] }, - }, - ast: '[\n 0^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 5^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | ........................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .................................^", - }, - { - original: { - name: "list_elem_error_shortcircuit", - expr: "[1, 2, 3].all(i, v, 6 / (2 - v) == i)", - value: { boolValue: false }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n 6^#*expr.Constant_Int64Value#,\n _-_(\n 2^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .............................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | ...................................^", - }, - { - original: { - name: "list_elem_error_exhaustive", - expr: "[1, 2, 3].all(i, v, v / i != 17)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _!=_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ........................^", - }, - { - original: { - name: "list_empty", - expr: "[].all(i, v, i \u003e -1 || v \u003e 0)", - value: { boolValue: true }, - }, - ast: "[]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:7: undeclared reference to 'all' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | ......^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'i' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .......^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'v' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | ..........^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'i' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .............^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .......................^", - }, - { - original: { - name: "map_key", - expr: "{'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)", - value: { boolValue: false }, - }, - ast: '{\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.all(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:25: undeclared reference to 'all' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ........................^\nERROR: \u003cinput\u003e:1:26: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | .........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...............................^\nERROR: \u003cinput\u003e:1:47: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ..............................................^", - }, - ], - }, - { - name: "existsOne", - tests: [ - { - original: { - name: "list_empty", - expr: "[].existsOne(i, v, i == 3 || v == 7)", - value: { boolValue: false }, - }, - ast: "[]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:13: undeclared reference to 'existsOne' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ............^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'i' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'v' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'i' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ...................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | .............................^", - }, - { - original: { - name: "list_one_true", - expr: "[7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)", - value: { boolValue: true }, - }, - ast: "[\n 7^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'existsOne' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............................^", - }, - { - original: { - name: "list_one_false", - expr: "[8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)", - value: { boolValue: false }, - }, - ast: "[\n 8^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'existsOne' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............................^", - }, - { - original: { - name: "list_none", - expr: "[1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)", - value: { boolValue: false }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:20: undeclared reference to 'existsOne' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ...................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'i' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ..........................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'v' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ...................................^", - }, - { - original: { - name: "list_one", - expr: "[5, 7, 8].existsOne(i, v, v % 5 == i)", - value: { boolValue: true }, - }, - ast: "[\n 5^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:20: undeclared reference to 'existsOne' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ...................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ..........................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'i' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ...................................^", - }, - { - original: { - name: "list_many", - expr: "[0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)", - value: { boolValue: false }, - }, - ast: "[\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:26: undeclared reference to 'existsOne' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .........................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'i' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | ................................^\nERROR: \u003cinput\u003e:1:42: undeclared reference to 'i' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .........................................^", - }, - { - original: { - name: "list_all", - expr: "['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))", - value: { boolValue: false }, - }, - ast: '[\n "foal"^#*expr.Constant_StringValue#,\n "foo"^#*expr.Constant_StringValue#,\n "four"^#*expr.Constant_StringValue#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#.startsWith(\n "fo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:34: undeclared reference to 'existsOne' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | .................................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ..................................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | .....................................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'i' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ........................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'v' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ..................................................^", - }, - { - original: { - name: "list_no_shortcircuit", - expr: "[3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "[\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:23: undeclared reference to 'existsOne' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | ......................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .............................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .................................^", - }, - { - original: { - name: "map_one", - expr: "{6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')", - value: { boolValue: true }, - }, - ast: '{\n 6^#*expr.Constant_Int64Value#:"six"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:"seven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:"eight"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.existsOne(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n _%_(\n k^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n "seven"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:45: undeclared reference to 'existsOne' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ............................................^\nERROR: \u003cinput\u003e:1:46: undeclared reference to 'k' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | .............................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ................................................^\nERROR: \u003cinput\u003e:1:52: undeclared reference to 'k' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ...................................................^\nERROR: \u003cinput\u003e:1:66: undeclared reference to 'v' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | .................................................................^", - }, - ], - }, - { - name: "transformList", - tests: [ - { - original: { - name: "empty", - expr: "[].transformList(i, v, i / v)", - value: { listValue: {} }, - }, - ast: "[]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'transformList' (in container '')\n | [].transformList(i, v, i / v)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i / v)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i / v)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i / v)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i / v)\n | ...........................^", - }, - { - original: { - name: "empty_filter", - expr: "[].transformList(i, v, i \u003e v, i / v)", - value: { listValue: {} }, - }, - ast: "[]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n _/_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'transformList' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ..................................^", - }, - { - original: { - name: "one", - expr: "[3].transformList(i, v, v * v + i)", - value: { listValue: { values: [{ int64Value: "9" }] } }, - }, - ast: "[\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n _*_(\n v^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'transformList' (in container '')\n | [3].transformList(i, v, v * v + i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ................................^", - }, - { - original: { - name: "one_filter", - expr: "[3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)", - value: { listValue: { values: [{ int64Value: "9" }] } }, - }, - ast: "[\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n v^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'transformList' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ........................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................................^\nERROR: \u003cinput\u003e:1:43: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..........................................^\nERROR: \u003cinput\u003e:1:47: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..............................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................................................^", - }, - { - original: { - name: "many", - expr: "[2, 4, 6].transformList(i, v, v / 2 + i)", - value: { - listValue: { - values: [ - { int64Value: "1" }, - { int64Value: "3" }, - { int64Value: "5" }, - ], - }, - }, - }, - ast: "[\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ..............................^\nERROR: \u003cinput\u003e:1:39: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ......................................^", - }, - { - original: { - name: "many_filter", - expr: "[2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)", - value: { - listValue: { - values: [{ int64Value: "1" }, { int64Value: "5" }], - }, - }, - }, - ast: "[\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ..............................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ................................................^\nERROR: \u003cinput\u003e:1:57: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................................................^", - }, - { - original: { - name: "error", - expr: "[2, 1, 0].transformList(i, v, v / i)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "[\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ..................................^", - }, - { - original: { - name: "error_filter", - expr: "[2, 1, 0].transformList(i, v, v / i \u003e 0, v)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: "[\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ..................................^\nERROR: \u003cinput\u003e:1:42: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | .........................................^", - }, - ], - }, - { - name: "transformMap", - tests: [ - { - original: { - name: "empty", - expr: "{}.transformMap(k, v, k + v)", - value: { mapValue: {} }, - }, - ast: "{}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:16: undeclared reference to 'transformMap' (in container '')\n | {}.transformMap(k, v, k + v)\n | ...............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k + v)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k + v)\n | ...................^\nERROR: \u003cinput\u003e:1:23: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k + v)\n | ......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k + v)\n | ..........................^", - }, - { - original: { - name: "empty_filter", - expr: "{}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)", - value: { mapValue: {} }, - }, - ast: '{}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "foo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n "bar"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:16: undeclared reference to 'transformMap' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...................^\nERROR: \u003cinput\u003e:1:23: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ......................^\nERROR: \u003cinput\u003e:1:37: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ....................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................^\nERROR: \u003cinput\u003e:1:53: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ....................................................^", - }, - { - original: { - name: "one", - expr: "{'foo': 'bar'}.transformMap(k, v, k + v)", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "foo" }, - value: { stringValue: "foobar" }, - }, - ], - }, - }, - }, - ast: '{\n "foo"^#*expr.Constant_StringValue#:"bar"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:28: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ..................................^\nERROR: \u003cinput\u003e:1:39: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ......................................^", - }, - { - original: { - name: "one_filter", - expr: "{'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "foo" }, - value: { stringValue: "foobar" }, - }, - ], - }, - }, - }, - ast: '{\n "foo"^#*expr.Constant_StringValue#:"bar"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "foo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n "bar"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:28: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ..................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:65: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................................^", - }, - { - original: { - name: "many", - expr: "{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "foo" }, - value: { stringValue: "foobar" }, - }, - { - key: { stringValue: "baz" }, - value: { stringValue: "bazbux" }, - }, - { - key: { stringValue: "hello" }, - value: { stringValue: "helloworld" }, - }, - ], - }, - }, - }, - ast: '{\n "foo"^#*expr.Constant_StringValue#:"bar"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "baz"^#*expr.Constant_StringValue#:"bux"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "hello"^#*expr.Constant_StringValue#:"world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:60: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ...........................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:64: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ...............................................................^\nERROR: \u003cinput\u003e:1:67: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ..................................................................^\nERROR: \u003cinput\u003e:1:71: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ......................................................................^", - }, - { - original: { - name: "many_filter", - expr: "{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "foo" }, - value: { stringValue: "foobar" }, - }, - { - key: { stringValue: "hello" }, - value: { stringValue: "helloworld" }, - }, - ], - }, - }, - }, - ast: '{\n "foo"^#*expr.Constant_StringValue#:"bar"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "baz"^#*expr.Constant_StringValue#:"bux"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "hello"^#*expr.Constant_StringValue#:"world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n "baz"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n "bux"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:60: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ...........................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:64: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ...............................................................^\nERROR: \u003cinput\u003e:1:67: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ..................................................................^\nERROR: \u003cinput\u003e:1:81: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ................................................................................^\nERROR: \u003cinput\u003e:1:93: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ............................................................................................^\nERROR: \u003cinput\u003e:1:97: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ................................................................................................^", - }, - { - original: { - name: "error", - expr: "{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: '{\n "foo"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "bar"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "baz"^#*expr.Constant_StringValue#:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n 4^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:44: undeclared reference to 'transformMap' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ...........................................^\nERROR: \u003cinput\u003e:1:45: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ............................................^\nERROR: \u003cinput\u003e:1:48: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ...............................................^\nERROR: \u003cinput\u003e:1:55: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ......................................................^", - }, - { - original: { - name: "error_filter", - expr: "{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)", - evalError: { errors: [{ message: "divide by zero" }] }, - }, - ast: '{\n "foo"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "bar"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "baz"^#*expr.Constant_StringValue#:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "baz"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n _/_(\n 4^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:44: undeclared reference to 'transformMap' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ...........................................^\nERROR: \u003cinput\u003e:1:45: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ............................................^\nERROR: \u003cinput\u003e:1:48: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ...............................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ..................................................^\nERROR: \u003cinput\u003e:1:69: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ....................................................................^\nERROR: \u003cinput\u003e:1:77: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ............................................................................^", - }, - ], - }, - ], - }, - { - name: "math_ext", - suites: [ - { - name: "greatest_int_result", - tests: [ - { - original: { - name: "unary_negative", - expr: "math.greatest(-5)", - value: { int64Value: "-5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@max(\n -5~int\n)~int^math_@max_int", - type: "int", - }, - { - original: { - name: "unary_positive", - expr: "math.greatest(5)", - value: { int64Value: "5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@max(\n 5~int\n)~int^math_@max_int", - type: "int", - }, - { - original: { - name: "binary_same_args", - expr: "math.greatest(1, 1)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1~int,\n 1~int\n)~int^math_@max_int_int", - type: "int", - }, - { - original: { - name: "binary_with_decimal", - expr: "math.greatest(1, 1.0) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n 1~int,\n 1~double\n )~dyn^math_@max_int_double,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_with_uint", - expr: "math.greatest(1, 1u) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n 1~int,\n 1u~uint\n )~dyn^math_@max_int_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_first_arg_greater", - expr: "math.greatest(3, -3)", - value: { int64Value: "3" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 3^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 3~int,\n -3~int\n)~int^math_@max_int_int", - type: "int", - }, - { - original: { - name: "binary_second_arg_greater", - expr: "math.greatest(-7, 5)", - value: { int64Value: "5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -7^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n -7~int,\n 5~int\n)~int^math_@max_int_int", - type: "int", - }, - { - original: { - name: "binary_first_arg_int_max", - expr: "math.greatest(9223372036854775807, 1)", - value: { int64Value: "9223372036854775807" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 9223372036854775807~int,\n 1~int\n)~int^math_@max_int_int", - type: "int", - }, - { - original: { - name: "binary_second_arg_int_max", - expr: "math.greatest(1, 9223372036854775807)", - value: { int64Value: "9223372036854775807" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1~int,\n 9223372036854775807~int\n)~int^math_@max_int_int", - type: "int", - }, - { - original: { - name: "binary_first_arg_int_min", - expr: "math.greatest(-9223372036854775808, 1)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n -9223372036854775808~int,\n 1~int\n)~int^math_@max_int_int", - type: "int", - }, - { - original: { - name: "binary_second_arg_int_min", - expr: "math.greatest(1, -9223372036854775808)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1~int,\n -9223372036854775808~int\n)~int^math_@max_int_int", - type: "int", - }, - { - original: { - name: "ternary_same_args", - expr: "math.greatest(1, 1, 1) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1~int,\n 1~int,\n 1~int\n ]~list(int)\n )~int^math_@max_list_int,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_decimal", - expr: "math.greatest(1, 1.0, 1.0) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1~int,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_uint", - expr: "math.greatest(1, 1u, 1u) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1~int,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_first_arg_greatest", - expr: "math.greatest(10, 1, 3) == 10", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 10~int,\n 1~int,\n 3~int\n ]~list(int)\n )~int^math_@max_list_int,\n 10~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_third_arg_greatest", - expr: "math.greatest(1, 3, 10) == 10", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1~int,\n 3~int,\n 10~int\n ]~list(int)\n )~int^math_@max_list_int,\n 10~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_negatives", - expr: "math.greatest(-1, -2, -3) == -1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n -1~int,\n -2~int,\n -3~int\n ]~list(int)\n )~int^math_@max_list_int,\n -1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_int_max", - expr: "math.greatest(9223372036854775807, 1, 5) == 9223372036854775807", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 9223372036854775807~int,\n 1~int,\n 5~int\n ]~list(int)\n )~int^math_@max_list_int,\n 9223372036854775807~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_int_min", - expr: "math.greatest(-9223372036854775807, -1, -5) == -1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -9223372036854775807^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n -9223372036854775807~int,\n -1~int,\n -5~int\n ]~list(int)\n )~int^math_@max_list_int,\n -1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed", - expr: "math.greatest(5.4, 10, 3u, -5.0, 9223372036854775807) == 9223372036854775807", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 9223372036854775807~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 9223372036854775807~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_array", - expr: "math.greatest([5.4, 10, 3u, -5.0, 3.5]) == 10", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_dyn_array", - expr: "math.greatest([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10~int\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10~int\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "greatest_double_result", - tests: [ - { - original: { - name: "unary_negative", - expr: "math.greatest(-5.0)", - value: { doubleValue: -5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@max(\n -5~double\n)~double^math_@max_double", - type: "double", - }, - { - original: { - name: "unary_positive", - expr: "math.greatest(5.0)", - value: { doubleValue: 5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@max(\n 5~double\n)~double^math_@max_double", - type: "double", - }, - { - original: { - name: "binary_same_args", - expr: "math.greatest(1.0, 1.0)", - value: { doubleValue: 1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1~double,\n 1~double\n)~double^math_@max_double_double", - type: "double", - }, - { - original: { - name: "binary_with_int", - expr: "math.greatest(1.0, 1) == 1.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n 1~double,\n 1~int\n )~dyn^math_@max_double_int,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_with_uint", - expr: "math.greatest(1.0, 1u) == 1.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n 1~double,\n 1u~uint\n )~dyn^math_@max_double_uint,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_first_arg_greater", - expr: "math.greatest(5.0, -7.0)", - value: { doubleValue: 5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_DoubleValue#,\n -7^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 5~double,\n -7~double\n)~double^math_@max_double_double", - type: "double", - }, - { - original: { - name: "binary_second_arg_greater", - expr: "math.greatest(-3.0, 3.0)", - value: { doubleValue: 3 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -3^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n -3~double,\n 3~double\n)~double^math_@max_double_double", - type: "double", - }, - { - original: { - name: "binary_first_arg_double_max", - expr: "math.greatest(1.797693e308, 1)", - value: { doubleValue: 1.797693e308 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1.797693e+308~double,\n 1~int\n)~dyn^math_@max_double_int", - type: "dyn", - }, - { - original: { - name: "binary_second_arg_double_max", - expr: "math.greatest(1, 1.797693e308)", - value: { doubleValue: 1.797693e308 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1~int,\n 1.797693e+308~double\n)~dyn^math_@max_int_double", - type: "dyn", - }, - { - original: { - name: "binary_first_arg_double_min", - expr: "math.greatest(-1.797693e308, 1.5)", - value: { doubleValue: 1.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n -1.797693e+308~double,\n 1.5~double\n)~double^math_@max_double_double", - type: "double", - }, - { - original: { - name: "binary_second_arg_double_min", - expr: "math.greatest(1.5, -1.797693e308)", - value: { doubleValue: 1.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1.5^#*expr.Constant_DoubleValue#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1.5~double,\n -1.797693e+308~double\n)~double^math_@max_double_double", - type: "double", - }, - { - original: { - name: "ternary_same_args", - expr: "math.greatest(1.0, 1.0, 1.0) == 1.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1~double,\n 1~double,\n 1~double\n ]~list(double)\n )~double^math_@max_list_double,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_int", - expr: "math.greatest(1.0, 1, 1) == 1.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1~double,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_uint", - expr: "math.greatest(1.0, 1u, 1u) == 1.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1~double,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_first_arg_greatest", - expr: "math.greatest(10.5, 1.5, 3.5) == 10.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 10.5~double,\n 1.5~double,\n 3.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n 10.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_third_arg_greatest", - expr: "math.greatest(1.5, 3.5, 10.5) == 10.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1.5~double,\n 3.5~double,\n 10.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n 10.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_negatives", - expr: "math.greatest(-1.5, -2.5, -3.5) == -1.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1.5^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#,\n -3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n -1.5~double,\n -2.5~double,\n -3.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n -1.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_double_max", - expr: "math.greatest(1.797693e308, 1, 5) == 1.797693e308", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1.797693e+308~double,\n 1~int,\n 5~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1.797693e+308~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_double_min", - expr: "math.greatest(-1.797693e308, -1, -5) == -1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n -1.797693e+308~double,\n -1~int,\n -5~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n -1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed", - expr: "math.greatest(5.4, 10, 3u, -5.0, 1.797693e308) == 1.797693e308", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 1.797693e+308~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1.797693e+308~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_array", - expr: "math.greatest([5.4, 10.5, 3u, -5.0, 3.5]) == 10.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 5.4~double,\n 10.5~double,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_dyn_array", - expr: "math.greatest([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10.5~double\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10.5~double\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "greatest_uint_result", - tests: [ - { - original: { - name: "unary", - expr: "math.greatest(5u)", - value: { uint64Value: "5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@max(\n 5u~uint\n)~uint^math_@max_uint", - type: "uint", - }, - { - original: { - name: "binary_same_args", - expr: "math.greatest(1u, 1u)", - value: { uint64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1u~uint,\n 1u~uint\n)~uint^math_@max_uint_uint", - type: "uint", - }, - { - original: { - name: "binary_with_decimal", - expr: "math.greatest(1u, 1.0) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n 1u~uint,\n 1~double\n )~dyn^math_@max_uint_double,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_with_int", - expr: "math.greatest(1u, 1) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n 1u~uint,\n 1~int\n )~dyn^math_@max_uint_int,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_first_arg_greater", - expr: "math.greatest(5u, -7)", - value: { uint64Value: "5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5u^#*expr.Constant_Uint64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 5u~uint,\n -7~int\n)~dyn^math_@max_uint_int", - type: "dyn", - }, - { - original: { - name: "binary_second_arg_greater", - expr: "math.greatest(-3, 3u)", - value: { uint64Value: "3" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -3^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n -3~int,\n 3u~uint\n)~dyn^math_@max_int_uint", - type: "dyn", - }, - { - original: { - name: "binary_first_arg_uint_max", - expr: "math.greatest(18446744073709551615u, 1u)", - value: { uint64Value: "18446744073709551615" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^math_@max_uint_uint", - type: "uint", - }, - { - original: { - name: "binary_second_arg_uint_max", - expr: "math.greatest(1u, 18446744073709551615u)", - value: { uint64Value: "18446744073709551615" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@max(\n 1u~uint,\n 18446744073709551615u~uint\n)~uint^math_@max_uint_uint", - type: "uint", - }, - { - original: { - name: "ternary_same_args", - expr: "math.greatest(1u, 1u, 1u) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1u~uint,\n 1u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_decimal", - expr: "math.greatest(1u, 1.0, 1.0) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1u~uint,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_int", - expr: "math.greatest(1u, 1, 1) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1u~uint,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_first_arg_greatest", - expr: "math.greatest(10u, 1u, 3u) == 10u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 10u~uint,\n 1u~uint,\n 3u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 10u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_third_arg_greatest", - expr: "math.greatest(1u, 3u, 10u) == 10u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 1u~uint,\n 3u~uint,\n 10u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 10u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_int_max", - expr: "math.greatest(18446744073709551615u, 1u, 5u) == 18446744073709551615u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 18446744073709551615u~uint,\n 1u~uint,\n 5u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 18446744073709551615u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed", - expr: "math.greatest(5.4, 10, 3u, -5.0, 18446744073709551615u) == 18446744073709551615u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 18446744073709551615u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 18446744073709551615u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_array", - expr: "math.greatest([5.4, 10u, 3u, -5.0, 3.5]) == 10u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n 5.4~double,\n 10u~uint,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_dyn_array", - expr: "math.greatest([dyn(5.4), dyn(10u), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10u~uint\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10u~uint\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "least_int_result", - tests: [ - { - original: { - name: "unary_negative", - expr: "math.least(-5)", - value: { int64Value: "-5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@min(\n -5~int\n)~int^math_@min_int", - type: "int", - }, - { - original: { - name: "unary_positive", - expr: "math.least(5)", - value: { int64Value: "5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@min(\n 5~int\n)~int^math_@min_int", - type: "int", - }, - { - original: { - name: "binary_same_args", - expr: "math.least(1, 1)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1~int,\n 1~int\n)~int^math_@min_int_int", - type: "int", - }, - { - original: { - name: "binary_with_decimal", - expr: "math.least(1, 1.0) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n 1~int,\n 1~double\n )~dyn^math_@min_int_double,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_with_uint", - expr: "math.least(1, 1u) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n 1~int,\n 1u~uint\n )~dyn^math_@min_int_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_first_arg_least", - expr: "math.least(-3, 3)", - value: { int64Value: "-3" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n -3^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n -3~int,\n 3~int\n)~int^math_@min_int_int", - type: "int", - }, - { - original: { - name: "binary_second_arg_least", - expr: "math.least(5, -7)", - value: { int64Value: "-7" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 5^#*expr.Constant_Int64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 5~int,\n -7~int\n)~int^math_@min_int_int", - type: "int", - }, - { - original: { - name: "binary_first_arg_int_max", - expr: "math.least(9223372036854775807, 1)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 9223372036854775807~int,\n 1~int\n)~int^math_@min_int_int", - type: "int", - }, - { - original: { - name: "binary_second_arg_int_max", - expr: "math.least(1, 9223372036854775807)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1~int,\n 9223372036854775807~int\n)~int^math_@min_int_int", - type: "int", - }, - { - original: { - name: "binary_first_arg_int_min", - expr: "math.least(-9223372036854775808, 1)", - value: { int64Value: "-9223372036854775808" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n -9223372036854775808~int,\n 1~int\n)~int^math_@min_int_int", - type: "int", - }, - { - original: { - name: "binary_second_arg_int_min", - expr: "math.least(1, -9223372036854775808)", - value: { int64Value: "-9223372036854775808" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1~int,\n -9223372036854775808~int\n)~int^math_@min_int_int", - type: "int", - }, - { - original: { - name: "ternary_same_args", - expr: "math.least(1, 1, 1) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1~int,\n 1~int,\n 1~int\n ]~list(int)\n )~int^math_@min_list_int,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_decimal", - expr: "math.least(1, 1.0, 1.0) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1~int,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_uint", - expr: "math.least(1, 1u, 1u) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1~int,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_first_arg_least", - expr: "math.least(0, 1, 3) == 0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 0~int,\n 1~int,\n 3~int\n ]~list(int)\n )~int^math_@min_list_int,\n 0~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_third_arg_least", - expr: "math.least(1, 3, 0) == 0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1~int,\n 3~int,\n 0~int\n ]~list(int)\n )~int^math_@min_list_int,\n 0~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_negatives", - expr: "math.least(-1, -2, -3) == -3", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n -1~int,\n -2~int,\n -3~int\n ]~list(int)\n )~int^math_@min_list_int,\n -3~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_int_max", - expr: "math.least(9223372036854775807, 1, 5) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 9223372036854775807~int,\n 1~int,\n 5~int\n ]~list(int)\n )~int^math_@min_list_int,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_int_min", - expr: "math.least(-9223372036854775808, -1, -5) == -9223372036854775808", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n -9223372036854775808~int,\n -1~int,\n -5~int\n ]~list(int)\n )~int^math_@min_list_int,\n -9223372036854775808~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed", - expr: "math.least(5.4, 10, 3u, -5.0, 9223372036854775807) == -5.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 9223372036854775807~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_array", - expr: "math.least([5.4, 10, 3u, -5.0, 3.5]) == -5.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_dyn_array", - expr: "math.least([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10~int\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "least_double_result", - tests: [ - { - original: { - name: "unary_negative", - expr: "math.least(-5.5)", - value: { doubleValue: -5.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n -5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n -5.5~double\n)~double^math_@min_double", - type: "double", - }, - { - original: { - name: "unary_positive", - expr: "math.least(5.5)", - value: { doubleValue: 5.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@min(\n 5.5~double\n)~double^math_@min_double", - type: "double", - }, - { - original: { - name: "binary_same_args", - expr: "math.least(1.5, 1.5)", - value: { doubleValue: 1.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1.5~double,\n 1.5~double\n)~double^math_@min_double_double", - type: "double", - }, - { - original: { - name: "binary_with_int", - expr: "math.least(1.0, 1) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n 1~double,\n 1~int\n )~dyn^math_@min_double_int,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_with_uint", - expr: "math.least(1, 1u) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n 1~int,\n 1u~uint\n )~dyn^math_@min_int_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_first_arg_least", - expr: "math.least(-3.5, 3.5)", - value: { doubleValue: -3.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n -3.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n -3.5~double,\n 3.5~double\n)~double^math_@min_double_double", - type: "double", - }, - { - original: { - name: "binary_second_arg_least", - expr: "math.least(5.5, -7.5)", - value: { doubleValue: -7.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 5.5^#*expr.Constant_DoubleValue#,\n -7.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 5.5~double,\n -7.5~double\n)~double^math_@min_double_double", - type: "double", - }, - { - original: { - name: "binary_first_arg_double_max", - expr: "math.least(1.797693e308, 1.5)", - value: { doubleValue: 1.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1.797693e+308~double,\n 1.5~double\n)~double^math_@min_double_double", - type: "double", - }, - { - original: { - name: "binary_second_arg_double_max", - expr: "math.least(1.5, 1.797693e308)", - value: { doubleValue: 1.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1.5~double,\n 1.797693e+308~double\n)~double^math_@min_double_double", - type: "double", - }, - { - original: { - name: "binary_first_arg_double_min", - expr: "math.least(-1.797693e308, 1.5)", - value: { doubleValue: -1.797693e308 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n -1.797693e+308~double,\n 1.5~double\n)~double^math_@min_double_double", - type: "double", - }, - { - original: { - name: "binary_second_arg_double_min", - expr: "math.least(1.5, -1.797693e308)", - value: { doubleValue: -1.797693e308 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1.5~double,\n -1.797693e+308~double\n)~double^math_@min_double_double", - type: "double", - }, - { - original: { - name: "ternary_same_args", - expr: "math.least(1.5, 1.5, 1.5) == 1.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1.5~double,\n 1.5~double,\n 1.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 1.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_int", - expr: "math.least(1.0, 1, 1) == 1.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1~double,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_uint", - expr: "math.least(1.0, 1u, 1u) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1~double,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_first_arg_least", - expr: "math.least(0.5, 1.5, 3.5) == 0.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 0.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 0.5~double,\n 1.5~double,\n 3.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 0.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_third_arg_least", - expr: "math.least(1.5, 3.5, 0.5) == 0.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#,\n 0.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1.5~double,\n 3.5~double,\n 0.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 0.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_negatives", - expr: "math.least(-1.5, -2.5, -3.5) == -3.5", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1.5^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#,\n -3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n -1.5~double,\n -2.5~double,\n -3.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n -3.5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_double_max", - expr: "math.least(1.797693e308, 1, 5) == 1", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1.797693e+308~double,\n 1~int,\n 5~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_double_min", - expr: "math.least(-1.797693e308, -1, -5) == -1.797693e308", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n -1.797693e+308~double,\n -1~int,\n -5~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -1.797693e+308~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed", - expr: "math.least(5.4, 10, 3u, -5.0, 1.797693e308) == -5.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 1.797693e+308~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_array", - expr: "math.least([5.4, 10.5, 3u, -5.0, 3.5]) == -5.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 5.4~double,\n 10.5~double,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_dyn_array", - expr: "math.least([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10.5~double\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "least_uint_result", - tests: [ - { - original: { - name: "unary", - expr: "math.least(5u)", - value: { uint64Value: "5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.@min(\n 5u~uint\n)~uint^math_@min_uint", - type: "uint", - }, - { - original: { - name: "binary_same_args", - expr: "math.least(1u, 1u)", - value: { uint64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1u~uint,\n 1u~uint\n)~uint^math_@min_uint_uint", - type: "uint", - }, - { - original: { - name: "binary_with_decimal", - expr: "math.least(1u, 1.0) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n 1u~uint,\n 1~double\n )~dyn^math_@min_uint_double,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_with_int", - expr: "math.least(1u, 1) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n 1u~uint,\n 1~int\n )~dyn^math_@min_uint_int,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "binary_first_arg_least", - expr: "math.least(1u, 3u)", - value: { uint64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1u~uint,\n 3u~uint\n)~uint^math_@min_uint_uint", - type: "uint", - }, - { - original: { - name: "binary_second_arg_least", - expr: "math.least(5u, 2u)", - value: { uint64Value: "2" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 5u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 5u~uint,\n 2u~uint\n)~uint^math_@min_uint_uint", - type: "uint", - }, - { - original: { - name: "binary_first_arg_uint_max", - expr: "math.least(18446744073709551615u, 1u)", - value: { uint64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^math_@min_uint_uint", - type: "uint", - }, - { - original: { - name: "binary_second_arg_uint_max", - expr: "math.least(1u, 18446744073709551615u)", - value: { uint64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.@min(\n 1u~uint,\n 18446744073709551615u~uint\n)~uint^math_@min_uint_uint", - type: "uint", - }, - { - original: { - name: "ternary_same_args", - expr: "math.least(1u, 1u, 1u) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1u~uint,\n 1u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_decimal", - expr: "math.least(1u, 1.0, 1.0) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1u~uint,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_with_int", - expr: "math.least(1u, 1, 1) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1u~uint,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_first_arg_least", - expr: "math.least(1u, 10u, 3u) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 1u~uint,\n 10u~uint,\n 3u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_third_arg_least", - expr: "math.least(10u, 3u, 1u) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 10u~uint,\n 3u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_uint_max", - expr: "math.least(18446744073709551615u, 1u, 5u) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 18446744073709551615u~uint,\n 1u~uint,\n 5u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed", - expr: "math.least(5.4, 10, 3u, 1u, 18446744073709551615u) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n 1u~uint,\n 18446744073709551615u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_array", - expr: "math.least([5.4, 10u, 3u, 1u, 3.5]) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n 5.4~double,\n 10u~uint,\n 3u~uint,\n 1u~uint,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "quaternary_mixed_dyn_array", - expr: "math.least([dyn(5.4), dyn(10u), dyn(3u), dyn(1u), dyn(3.5)]) == 1u", - }, - ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10u~uint\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "ceil", - tests: [ - { - original: { - name: "negative", - expr: "math.ceil(-1.2)", - value: { doubleValue: -1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.ceil(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.ceil(\n -1.2~double\n)~double^math_ceil_double", - type: "double", - }, - { - original: { - name: "positive", - expr: "math.ceil(1.2)", - value: { doubleValue: 2 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.ceil(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.ceil(\n 1.2~double\n)~double^math_ceil_double", - type: "double", - }, - { - original: { - name: "dyn_error", - expr: "math.ceil(dyn(1))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.ceil(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.ceil(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_ceil_double", - type: "double", - }, - ], - }, - { - name: "floor", - tests: [ - { - original: { - name: "negative", - expr: "math.floor(-1.2)", - value: { doubleValue: -2 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.floor(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.floor(\n -1.2~double\n)~double^math_floor_double", - type: "double", - }, - { - original: { - name: "positive", - expr: "math.floor(1.2)", - value: { doubleValue: 1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.floor(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.floor(\n 1.2~double\n)~double^math_floor_double", - type: "double", - }, - { - original: { - name: "dyn_error", - expr: "math.floor(dyn(1))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.floor(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.floor(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_floor_double", - type: "double", - }, - ], - }, - { - name: "round", - tests: [ - { - original: { - name: "negative_down", - expr: "math.round(-1.6)", - value: { doubleValue: -2 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.round(\n -1.6^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.round(\n -1.6~double\n)~double^math_round_double", - type: "double", - }, - { - original: { - name: "negative_up", - expr: "math.round(-1.4)", - value: { doubleValue: -1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.round(\n -1.4^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.round(\n -1.4~double\n)~double^math_round_double", - type: "double", - }, - { - original: { - name: "negative_mid", - expr: "math.round(-1.5)", - value: { doubleValue: -2 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.round(\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.round(\n -1.5~double\n)~double^math_round_double", - type: "double", - }, - { - original: { - name: "positive_down", - expr: "math.round(1.2)", - value: { doubleValue: 1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.round(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.round(\n 1.2~double\n)~double^math_round_double", - type: "double", - }, - { - original: { - name: "positive_up", - expr: "math.round(1.5)", - value: { doubleValue: 2 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.round(\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.round(\n 1.5~double\n)~double^math_round_double", - type: "double", - }, - { - original: { - name: "nan", - expr: "math.isNaN(math.round(0.0/0.0))", - }, - ast: "math^#*expr.Expr_IdentExpr#.isNaN(\n math^#*expr.Expr_IdentExpr#.round(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.isNaN(\n math.round(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~double^math_round_double\n)~bool^math_isNaN_double", - type: "bool", - }, - { - original: { - name: "dyn_error", - expr: "math.round(dyn(1))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.round(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.round(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_round_double", - type: "double", - }, - ], - }, - { - name: "trunc", - tests: [ - { - original: { - name: "negative", - expr: "math.trunc(-1.2)", - value: { doubleValue: -1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.trunc(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.trunc(\n -1.2~double\n)~double^math_trunc_double", - type: "double", - }, - { - original: { - name: "positive", - expr: "math.trunc(1.2)", - value: { doubleValue: 1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.trunc(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.trunc(\n 1.2~double\n)~double^math_trunc_double", - type: "double", - }, - { - original: { - name: "nan", - expr: "math.isNaN(math.trunc(0.0/0.0))", - }, - ast: "math^#*expr.Expr_IdentExpr#.isNaN(\n math^#*expr.Expr_IdentExpr#.trunc(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.isNaN(\n math.trunc(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~double^math_trunc_double\n)~bool^math_isNaN_double", - type: "bool", - }, - { - original: { - name: "dyn_error", - expr: "math.trunc(dyn(1))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.trunc(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.trunc(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_trunc_double", - type: "double", - }, - ], - }, - { - name: "abs", - tests: [ - { - original: { - name: "uint", - expr: "math.abs(1u)", - value: { uint64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.abs(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.abs(\n 1u~uint\n)~uint^math_abs_uint", - type: "uint", - }, - { - original: { - name: "positive_int", - expr: "math.abs(1)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.abs(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.abs(\n 1~int\n)~int^math_abs_int", - type: "int", - }, - { - original: { - name: "negative_int", - expr: "math.abs(-11)", - value: { int64Value: "11" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.abs(\n -11^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.abs(\n -11~int\n)~int^math_abs_int", - type: "int", - }, - { - original: { - name: "positive_double", - expr: "math.abs(1.5)", - value: { doubleValue: 1.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.abs(\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.abs(\n 1.5~double\n)~double^math_abs_double", - type: "double", - }, - { - original: { - name: "negative_double", - expr: "math.abs(-11.5)", - value: { doubleValue: 11.5 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.abs(\n -11.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.abs(\n -11.5~double\n)~double^math_abs_double", - type: "double", - }, - { - original: { - name: "int_overflow", - expr: "math.abs(-9223372036854775808)", - evalError: { errors: [{ message: "overflow" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.abs(\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.abs(\n -9223372036854775808~int\n)~int^math_abs_int", - type: "int", - }, - ], - }, - { - name: "sign", - tests: [ - { - original: { - name: "positive_uint", - expr: "math.sign(100u)", - value: { uint64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n 100u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.sign(\n 100u~uint\n)~uint^math_sign_uint", - type: "uint", - }, - { - original: { - name: "zero_uint", - expr: "math.sign(0u)", - value: { uint64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.sign(\n 0u~uint\n)~uint^math_sign_uint", - type: "uint", - }, - { - original: { - name: "positive_int", - expr: "math.sign(100)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n 100^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.sign(\n 100~int\n)~int^math_sign_int", - type: "int", - }, - { - original: { - name: "negative_int", - expr: "math.sign(-11)", - value: { int64Value: "-1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n -11^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.sign(\n -11~int\n)~int^math_sign_int", - type: "int", - }, - { - original: { - name: "zero_int", - expr: "math.sign(0)", - value: { int64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.sign(\n 0~int\n)~int^math_sign_int", - type: "int", - }, - { - original: { - name: "positive_double", - expr: "math.sign(100.5)", - value: { doubleValue: 1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n 100.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.sign(\n 100.5~double\n)~double^math_sign_double", - type: "double", - }, - { - original: { - name: "negative_double", - expr: "math.sign(-32.0)", - value: { doubleValue: -1 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n -32^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.sign(\n -32~double\n)~double^math_sign_double", - type: "double", - }, - { - original: { - name: "zero_double", - expr: "math.sign(0.0)", - value: { doubleValue: 0 }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.sign(\n 0~double\n)~double^math_sign_double", - type: "double", - }, - { - original: { - name: "dyn_error", - expr: "math.sign(dyn(true))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.sign(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.sign(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~dyn^math_sign_double|math_sign_int|math_sign_uint", - type: "dyn", - }, - ], - }, - { - name: "isNaN", - tests: [ - { - original: { name: "true", expr: "math.isNaN(0.0/0.0)" }, - ast: "math^#*expr.Expr_IdentExpr#.isNaN(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.isNaN(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^math_isNaN_double", - type: "bool", - }, - { - original: { name: "false", expr: "!math.isNaN(1.0/0.0)" }, - ast: "!_(\n math^#*expr.Expr_IdentExpr#.isNaN(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "!_(\n math.isNaN(\n _/_(\n 1~double,\n 0~double\n )~double^divide_double\n )~bool^math_isNaN_double\n)~bool^logical_not", - type: "bool", - }, - { - original: { - name: "dyn_error", - expr: "math.isNaN(dyn(true))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.isNaN(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.isNaN(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isNaN_double", - type: "bool", - }, - ], - }, - { - name: "isInf", - tests: [ - { - original: { name: "true", expr: "math.isInf(1.0/0.0)" }, - ast: "math^#*expr.Expr_IdentExpr#.isInf(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.isInf(\n _/_(\n 1~double,\n 0~double\n )~double^divide_double\n)~bool^math_isInf_double", - type: "bool", - }, - { - original: { name: "false", expr: "!math.isInf(0.0/0.0)" }, - ast: "!_(\n math^#*expr.Expr_IdentExpr#.isInf(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "!_(\n math.isInf(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~bool^math_isInf_double\n)~bool^logical_not", - type: "bool", - }, - { - original: { - name: "dyn_error", - expr: "math.isInf(dyn(true))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.isInf(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.isInf(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isInf_double", - type: "bool", - }, - ], - }, - { - name: "isFinite", - tests: [ - { - original: { name: "true", expr: "math.isFinite(1.0/1.5)" }, - ast: "math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.isFinite(\n _/_(\n 1~double,\n 1.5~double\n )~double^divide_double\n)~bool^math_isFinite_double", - type: "bool", - }, - { - original: { name: "false_nan", expr: "!math.isFinite(0.0/0.0)" }, - ast: "!_(\n math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "!_(\n math.isFinite(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~bool^math_isFinite_double\n)~bool^logical_not", - type: "bool", - }, - { - original: { name: "false_inf", expr: "!math.isFinite(-1.0/0.0)" }, - ast: "!_(\n math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n -1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "!_(\n math.isFinite(\n _/_(\n -1~double,\n 0~double\n )~double^divide_double\n )~bool^math_isFinite_double\n)~bool^logical_not", - type: "bool", - }, - { - original: { - name: "dyn_error", - expr: "math.isFinite(dyn(true))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.isFinite(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.isFinite(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isFinite_double", - type: "bool", - }, - ], - }, - { - name: "bit_and", - tests: [ - { - original: { - name: "int_int_non_intersect", - expr: "math.bitAnd(1, 2)", - value: { int64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitAnd(\n 1~int,\n 2~int\n)~int^math_bitAnd_int_int", - type: "int", - }, - { - original: { - name: "int_int_intersect", - expr: "math.bitAnd(1, 3)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitAnd(\n 1~int,\n 3~int\n)~int^math_bitAnd_int_int", - type: "int", - }, - { - original: { - name: "int_int_intersect_neg", - expr: "math.bitAnd(1, -1)", - value: { int64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitAnd(\n 1~int,\n -1~int\n)~int^math_bitAnd_int_int", - type: "int", - }, - { - original: { - name: "uint_uint_non_intersect", - expr: "math.bitAnd(1u, 2u)", - value: { uint64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitAnd(\n 1u~uint,\n 2u~uint\n)~uint^math_bitAnd_uint_uint", - type: "uint", - }, - { - original: { - name: "uint_uint_intersect", - expr: "math.bitAnd(1u, 3u)", - value: { uint64Value: "1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitAnd(\n 1u~uint,\n 3u~uint\n)~uint^math_bitAnd_uint_uint", - type: "uint", - }, - { - original: { - name: "int_dyn_error", - expr: "math.bitAnd(2u, dyn(''))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: 'math^#*expr.Expr_IdentExpr#.bitAnd(\n 2u^#*expr.Constant_Uint64Value#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'math.bitAnd(\n 2u~uint,\n dyn(\n ""~string\n )~dyn^to_dyn\n)~uint^math_bitAnd_uint_uint', - type: "uint", - }, - ], - }, - { - name: "bit_or", - tests: [ - { - original: { - name: "int_int_positive", - expr: "math.bitOr(1, 2)", - value: { int64Value: "3" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitOr(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitOr(\n 1~int,\n 2~int\n)~int^math_bitOr_int_int", - type: "int", - }, - { - original: { - name: "int_int_positive_negative", - expr: "math.bitOr(4, -2)", - value: { int64Value: "-2" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitOr(\n 4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitOr(\n 4~int,\n -2~int\n)~int^math_bitOr_int_int", - type: "int", - }, - { - original: { - name: "uint_uint", - expr: "math.bitOr(1u, 4u)", - value: { uint64Value: "5" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitOr(\n 1u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitOr(\n 1u~uint,\n 4u~uint\n)~uint^math_bitOr_uint_uint", - type: "uint", - }, - { - original: { - name: "dyn_int_error", - expr: "math.bitOr(dyn(1.2), 1)", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitOr(\n dyn(\n 1.2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitOr(\n dyn(\n 1.2~double\n )~dyn^to_dyn,\n 1~int\n)~int^math_bitOr_int_int", - type: "int", - }, - ], - }, - { - name: "bit_xor", - tests: [ - { - original: { - name: "int_int_positive", - expr: "math.bitXor(1, 3)", - value: { int64Value: "2" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitXor(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitXor(\n 1~int,\n 3~int\n)~int^math_bitXor_int_int", - type: "int", - }, - { - original: { - name: "int_int_positive_negative", - expr: "math.bitXor(4, -2)", - value: { int64Value: "-6" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitXor(\n 4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitXor(\n 4~int,\n -2~int\n)~int^math_bitXor_int_int", - type: "int", - }, - { - original: { - name: "uint_uint", - expr: "math.bitXor(1u, 3u)", - value: { uint64Value: "2" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitXor(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitXor(\n 1u~uint,\n 3u~uint\n)~uint^math_bitXor_uint_uint", - type: "uint", - }, - { - original: { - name: "dyn_dyn_error", - expr: "math.bitXor(dyn([]), dyn([1]))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitXor(\n dyn(\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitXor(\n dyn(\n []~list(dyn)\n )~dyn^to_dyn,\n dyn(\n [\n 1~int\n ]~list(int)\n )~dyn^to_dyn\n)~dyn^math_bitXor_int_int|math_bitXor_uint_uint", - type: "dyn", - }, - ], - }, - { - name: "bit_not", - tests: [ - { - original: { - name: "int_positive", - expr: "math.bitNot(1)", - value: { int64Value: "-2" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.bitNot(\n 1~int\n)~int^math_bitNot_int_int", - type: "int", - }, - { - original: { - name: "int_negative", - expr: "math.bitNot(-1)", - value: { int64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.bitNot(\n -1~int\n)~int^math_bitNot_int_int", - type: "int", - }, - { - original: { - name: "int_zero", - expr: "math.bitNot(0)", - value: { int64Value: "-1" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "math.bitNot(\n 0~int\n)~int^math_bitNot_int_int", - type: "int", - }, - { - original: { - name: "uint_positive", - expr: "math.bitNot(1u)", - value: { uint64Value: "18446744073709551614" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitNot(\n 1u~uint\n)~uint^math_bitNot_uint_uint", - type: "uint", - }, - { - original: { - name: "uint_zero", - expr: "math.bitNot(0u)", - value: { uint64Value: "18446744073709551615" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitNot(\n 0u~uint\n)~uint^math_bitNot_uint_uint", - type: "uint", - }, - { - original: { - name: "dyn_error", - expr: "math.bitNot(dyn(''))", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: 'math^#*expr.Expr_IdentExpr#.bitNot(\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'math.bitNot(\n dyn(\n ""~string\n )~dyn^to_dyn\n)~dyn^math_bitNot_int_int|math_bitNot_uint_uint', - type: "dyn", - }, - ], - }, - { - name: "bit_shift_left", - tests: [ - { - original: { - name: "int", - expr: "math.bitShiftLeft(1, 2)", - value: { int64Value: "4" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftLeft(\n 1~int,\n 2~int\n)~int^math_bitShiftLeft_int_int", - type: "int", - }, - { - original: { - name: "int_large_shift", - expr: "math.bitShiftLeft(1, 200)", - value: { int64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1^#*expr.Constant_Int64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftLeft(\n 1~int,\n 200~int\n)~int^math_bitShiftLeft_int_int", - type: "int", - }, - { - original: { - name: "int_negative_large_shift", - expr: "math.bitShiftLeft(-1, 200)", - value: { int64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n -1^#*expr.Constant_Int64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftLeft(\n -1~int,\n 200~int\n)~int^math_bitShiftLeft_int_int", - type: "int", - }, - { - original: { - name: "uint", - expr: "math.bitShiftLeft(1u, 2)", - value: { uint64Value: "4" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftLeft(\n 1u~uint,\n 2~int\n)~uint^math_bitShiftLeft_uint_int", - type: "uint", - }, - { - original: { - name: "uint_large_shift", - expr: "math.bitShiftLeft(1u, 200)", - value: { uint64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftLeft(\n 1u~uint,\n 200~int\n)~uint^math_bitShiftLeft_uint_int", - type: "uint", - }, - { - original: { - name: "bad_shift", - expr: "math.bitShiftLeft(1u, -1)", - evalError: { errors: [{ message: "negative offset" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftLeft(\n 1u~uint,\n -1~int\n)~uint^math_bitShiftLeft_uint_int", - type: "uint", - }, - { - original: { - name: "dyn_int_error", - expr: "math.bitShiftLeft(dyn(4.3), 1)", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n dyn(\n 4.3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftLeft(\n dyn(\n 4.3~double\n )~dyn^to_dyn,\n 1~int\n)~dyn^math_bitShiftLeft_int_int|math_bitShiftLeft_uint_int", - type: "dyn", - }, - ], - }, - { - name: "bit_shift_right", - tests: [ - { - original: { - name: "int", - expr: "math.bitShiftRight(1024, 2)", - value: { int64Value: "256" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftRight(\n 1024~int,\n 2~int\n)~int^math_bitShiftRight_int_int", - type: "int", - }, - { - original: { - name: "int_large_shift", - expr: "math.bitShiftRight(1024, 64)", - value: { int64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024^#*expr.Constant_Int64Value#,\n 64^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftRight(\n 1024~int,\n 64~int\n)~int^math_bitShiftRight_int_int", - type: "int", - }, - { - original: { - name: "int_negative", - expr: "math.bitShiftRight(-1024, 3)", - value: { int64Value: "2305843009213693824" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n -1024^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftRight(\n -1024~int,\n 3~int\n)~int^math_bitShiftRight_int_int", - type: "int", - }, - { - original: { - name: "int_negative_large_shift", - expr: "math.bitShiftRight(-1024, 64)", - value: { int64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n -1024^#*expr.Constant_Int64Value#,\n 64^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftRight(\n -1024~int,\n 64~int\n)~int^math_bitShiftRight_int_int", - type: "int", - }, - { - original: { - name: "uint", - expr: "math.bitShiftRight(1024u, 2)", - value: { uint64Value: "256" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftRight(\n 1024u~uint,\n 2~int\n)~uint^math_bitShiftRight_uint_int", - type: "uint", - }, - { - original: { - name: "uint_large_shift", - expr: "math.bitShiftRight(1024u, 200)", - value: { uint64Value: "0" }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024u^#*expr.Constant_Uint64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftRight(\n 1024u~uint,\n 200~int\n)~uint^math_bitShiftRight_uint_int", - type: "uint", - }, - { - original: { - name: "bad_shift", - expr: "math.bitShiftRight(1u, -1)", - evalError: { errors: [{ message: "negative offset" }] }, - }, - ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1u^#*expr.Constant_Uint64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "math.bitShiftRight(\n 1u~uint,\n -1~int\n)~uint^math_bitShiftRight_uint_int", - type: "uint", - }, - { - original: { - name: "dyn_int_error", - expr: "math.bitShiftRight(dyn(b'123'), 1)", - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: 'math^#*expr.Expr_IdentExpr#.bitShiftRight(\n dyn(\n b"123"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'math.bitShiftRight(\n dyn(\n b"123"~bytes\n )~dyn^to_dyn,\n 1~int\n)~dyn^math_bitShiftRight_int_int|math_bitShiftRight_uint_int', - type: "dyn", - }, - ], - }, - ], - }, - { - name: "namespace", - suites: [ - { - name: "qualified", - tests: [ - { - original: { - name: "self_eval_qualified_lookup", - expr: "x.y", - typeEnv: [ - { name: "x.y", ident: { type: { primitive: "BOOL" } } }, - ], - bindings: { "x.y": { value: { boolValue: true } } }, - value: { boolValue: true }, - }, - ast: "x^#*expr.Expr_IdentExpr#.y^#*expr.Expr_SelectExpr#", - checkedAst: "x.y~bool^x.y", - type: "bool", - }, - ], - }, - { - name: "namespace", - tests: [ - { - original: { - name: "self_eval_container_lookup", - expr: "y", - typeEnv: [ - { name: "x.y", ident: { type: { primitive: "BOOL" } } }, - { name: "y", ident: { type: { primitive: "STRING" } } }, - ], - container: "x", - bindings: { - "x.y": { value: { boolValue: true } }, - y: { value: { stringValue: "false" } }, - }, - value: { boolValue: true }, - }, - ast: "y^#*expr.Expr_IdentExpr#", - checkedAst: "x.y~bool^x.y", - type: "bool", - }, - { - original: { - name: "self_eval_container_lookup_unchecked", - expr: "y", - disableCheck: true, - typeEnv: [ - { name: "x.y", ident: { type: { primitive: "BOOL" } } }, - { name: "y", ident: { type: { primitive: "BOOL" } } }, - ], - container: "x", - bindings: { - "x.y": { value: { boolValue: true } }, - y: { value: { boolValue: false } }, - }, - value: { boolValue: true }, - }, - ast: "y^#*expr.Expr_IdentExpr#", - checkedAst: "x.y~bool^x.y", - type: "bool", - }, - ], - }, - ], - }, - { - name: "optionals", - suites: [ - { - name: "optionals", - tests: [ - { - original: { - name: "null", - expr: "optional.of(null).hasValue()", - value: { boolValue: true }, - }, - ast: "optional^#*expr.Expr_IdentExpr#.of(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#", - checkedAst: - "optional.of(\n null~null\n)~optional_type(null)^optional_of.hasValue()~bool^optional_hasValue", - type: "bool", - }, - { - original: { - name: "null_non_zero_value", - expr: "optional.ofNonZeroValue(null).hasValue()", - value: { boolValue: false }, - }, - ast: "optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#", - checkedAst: - "optional.ofNonZeroValue(\n null~null\n)~optional_type(null)^optional_ofNonZeroValue.hasValue()~bool^optional_hasValue", - type: "bool", - }, - { - original: { - name: "none_or_none_or_value", - expr: "optional.none().or(optional.none()).orValue(42)", - value: { int64Value: "42" }, - }, - ast: "optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "optional.none()~optional_type(int)^optional_none.or(\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^optional_or_optional.orValue(\n 42~int\n)~int^optional_orValue_value", - type: "int", - }, - { - original: { - name: "none_optMap_hasValue", - expr: "optional.none().optMap(y, y + 1).hasValue()", - value: { boolValue: false }, - }, - ast: "optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#.optMap(\n y^#*expr.Expr_IdentExpr#,\n _+_(\n y^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n optional.none()~optional_type(dyn)^optional_none.hasValue()~bool^optional_hasValue,\n optional.of(\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n y,\n // Init\n optional.none()~optional_type(int)^optional_none.value()~int^optional_value,\n // LoopCondition\n false~bool,\n // LoopStep\n y~int^y,\n // Result\n _+_(\n y~int^y,\n 1~int\n )~int^add_int64)~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^conditional.hasValue()~bool^optional_hasValue", - type: "bool", - }, - { - original: { - name: "empty_map_optFlatMap_hasValue", - expr: "{}.?key.optFlatMap(k, k.?subkey).hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: empty_map_optFlatMap_hasValue:1:3: unsupported syntax '.?'\n | {}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ..^\nERROR: empty_map_optFlatMap_hasValue:1:24: unsupported syntax '.?'\n | {}.?key.optFlatMap(k, k.?subkey).hasValue()\n | .......................^", - }, - { - original: { - name: "map_empty_submap_optFlatMap_hasValue", - expr: "{'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: map_empty_submap_optFlatMap_hasValue:1:12: unsupported syntax '.?'\n | {'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ...........^\nERROR: map_empty_submap_optFlatMap_hasValue:1:33: unsupported syntax '.?'\n | {'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ................................^", - }, - { - original: { - name: "map_null_entry_hasValue", - expr: "{'null_key': dyn(null)}.?null_key.hasValue()", - value: { boolValue: true }, - }, - error: - "ERROR: map_null_entry_hasValue:1:24: unsupported syntax '.?'\n | {'null_key': dyn(null)}.?null_key.hasValue()\n | .......................^", - }, - { - original: { - name: "map_null_entry_no_such_key", - expr: "{'null_key': dyn(null)}.?null_key.invalid.hasValue()", - evalError: { errors: [{ message: "no such key" }] }, - }, - error: - "ERROR: map_null_entry_no_such_key:1:24: unsupported syntax '.?'\n | {'null_key': dyn(null)}.?null_key.invalid.hasValue()\n | .......................^", - }, - { - original: { - name: "map_absent_key_absent_field_none", - expr: "{true: dyn(0)}[?false].absent.hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: map_absent_key_absent_field_none:1:15: unsupported syntax '[?'\n | {true: dyn(0)}[?false].absent.hasValue()\n | ..............^", - }, - { - original: { - name: "map_present_key_invalid_field", - expr: "{true: dyn(0)}[?true].absent.hasValue()", - evalError: { errors: [{ message: "no such key" }] }, - }, - error: - "ERROR: map_present_key_invalid_field:1:15: unsupported syntax '[?'\n | {true: dyn(0)}[?true].absent.hasValue()\n | ..............^", - }, - { - original: { - name: "map_undefined_entry_hasValue", - expr: "{}.?null_key.invalid.hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: map_undefined_entry_hasValue:1:3: unsupported syntax '.?'\n | {}.?null_key.invalid.hasValue()\n | ..^", - }, - { - original: { - name: "map_submap_subkey_optFlatMap_value", - expr: "{'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()", - value: { stringValue: "subvalue" }, - }, - error: - "ERROR: map_submap_subkey_optFlatMap_value:1:32: unsupported syntax '.?'\n | {'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()\n | ...............................^\nERROR: map_submap_subkey_optFlatMap_value:1:53: unsupported syntax '.?'\n | {'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()\n | ....................................................^", - }, - { - original: { - name: "map_submap_optFlatMap_value", - expr: "{'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()", - value: { stringValue: "" }, - }, - error: - "ERROR: map_submap_optFlatMap_value:1:24: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()\n | .......................^\nERROR: map_submap_optFlatMap_value:1:45: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()\n | ............................................^", - }, - { - original: { - name: "map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue", - expr: "{'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue:1:24: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()\n | .......................^", - }, - { - original: { - name: "optional_of_optMap_value", - expr: "optional.of(42).optMap(y, y + 1).value()", - value: { int64Value: "43" }, - }, - ast: "optional^#*expr.Expr_IdentExpr#.of(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.optMap(\n y^#*expr.Expr_IdentExpr#,\n _+_(\n y^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.value()^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n optional.of(\n 42~int\n )~optional_type(int)^optional_of.hasValue()~bool^optional_hasValue,\n optional.of(\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n y,\n // Init\n optional.of(\n 42~int\n )~optional_type(int)^optional_of.value()~int^optional_value,\n // LoopCondition\n false~bool,\n // LoopStep\n y~int^y,\n // Result\n _+_(\n y~int^y,\n 1~int\n )~int^add_int64)~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^conditional.value()~int^optional_value", - type: "int", - }, - { - original: { - name: "optional_ofNonZeroValue_or_optional_value", - expr: "optional.ofNonZeroValue(42).or(optional.of(20)).value() == 42", - value: { boolValue: true }, - }, - ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n 42^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.of(\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#.value()^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n optional.ofNonZeroValue(\n 42~int\n )~optional_type(int)^optional_ofNonZeroValue.or(\n optional.of(\n 20~int\n )~optional_type(int)^optional_of\n )~optional_type(int)^optional_or_optional.value()~int^optional_value,\n 42~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "ternary_optional_hasValue", - expr: "(has({}.x) ? optional.of({}.x) : optional.none()).hasValue()", - value: { boolValue: false }, - }, - ast: "_?_:_(\n {}^#*expr.Expr_StructExpr#.x~test-only~^#*expr.Expr_SelectExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n {}^#*expr.Expr_StructExpr#.x^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n {}~map(dyn, dyn).x~test-only~~bool,\n optional.of(\n {}~map(dyn, dyn).x~dyn\n )~optional_type(dyn)^optional_of,\n optional.none()~optional_type(dyn)^optional_none\n)~optional_type(dyn)^conditional.hasValue()~bool^optional_hasValue", - type: "bool", - }, - { - original: { - name: "map_optindex_hasValue", - expr: "{}.?x.hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: map_optindex_hasValue:1:3: unsupported syntax '.?'\n | {}.?x.hasValue()\n | ..^", - }, - { - original: { - name: "has_map_optindex", - expr: "has({}.?x.y)", - value: { boolValue: false }, - }, - error: - "ERROR: has_map_optindex:1:7: unsupported syntax '.?'\n | has({}.?x.y)\n | ......^", - }, - { - original: { - name: "has_map_optindex_field", - expr: "has({'x': {'y': 'z'}}.?x.y)", - value: { boolValue: true }, - }, - error: - "ERROR: has_map_optindex_field:1:22: unsupported syntax '.?'\n | has({'x': {'y': 'z'}}.?x.y)\n | .....................^", - }, - { - original: { - name: "type", - expr: "type(optional.none()) == optional_type", - value: { boolValue: true }, - }, - ast: "_==_(\n type(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional_type^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n type(\n optional.none()~optional_type(dyn)^optional_none\n )~type(optional_type(dyn))^type,\n optional_type~type(optional_type)^optional_type\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "optional_chaining_1", - expr: "optional.ofNonZeroValue('').or(optional.of({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])).orValue('default value')", - value: { stringValue: "goodbye" }, - }, - ast: 'optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.of(\n _[_](\n {\n "c"^#*expr.Constant_StringValue#:{\n "dashed-index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.c^#*expr.Expr_SelectExpr#,\n "dashed-index"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'optional.ofNonZeroValue(\n ""~string\n)~optional_type(string)^optional_ofNonZeroValue.or(\n optional.of(\n _[_](\n {\n "c"~string:{\n "dashed-index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string)).c~map(string, string),\n "dashed-index"~string\n )~string^index_map\n )~optional_type(string)^optional_of\n)~optional_type(string)^optional_or_optional.orValue(\n "default value"~string\n)~string^optional_orValue_value', - type: "string", - }, - { - original: { - name: "optional_chaining_2", - expr: "{'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')", - value: { stringValue: "goodbye" }, - }, - error: - "ERROR: optional_chaining_2:1:37: unsupported syntax '[?'\n | {'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')\n | ....................................^", - }, - { - original: { - name: "optional_chaining_3", - expr: "{'c': {}}.c[?'missing-index'].orValue('default value')", - value: { stringValue: "default value" }, - }, - error: - "ERROR: optional_chaining_3:1:12: unsupported syntax '[?'\n | {'c': {}}.c[?'missing-index'].orValue('default value')\n | ...........^", - }, - { - original: { - name: "optional_chaining_4", - expr: "optional.of({'c': {'index': 'goodbye'}}).c.index.orValue('default value')", - value: { stringValue: "goodbye" }, - }, - ast: 'optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{\n "index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.index^#*expr.Expr_SelectExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'optional.of(\n {\n "c"~string:{\n "index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string))\n)~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)).index~optional_type(string).orValue(\n "default value"~string\n)~string^optional_orValue_value', - type: "string", - }, - { - original: { - name: "optional_chaining_5", - expr: "optional.of({'c': {}}).c.missing.or(optional.none()[0]).orValue('default value')", - value: { stringValue: "default value" }, - }, - ast: 'optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing^#*expr.Expr_SelectExpr#.or(\n _[_](\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'optional.of(\n {\n "c"~string:{}~map(dyn, string)\n }~map(string, map(dyn, string))\n)~optional_type(map(string, map(dyn, string)))^optional_of.c~optional_type(map(dyn, string)).missing~optional_type(string).or(\n _[_](\n optional.none()~optional_type(list(string))^optional_none,\n 0~int\n )~optional_type(string)^optional_list_index_int\n)~optional_type(string)^optional_or_optional.orValue(\n "default value"~string\n)~string^optional_orValue_value', - type: "string", - }, - { - original: { - name: "optional_chaining_6", - expr: "optional.of({'c': {}}).c.missing.or(optional.of(['list-value'])[0]).orValue('default value')", - value: { stringValue: "list-value" }, - }, - ast: 'optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing^#*expr.Expr_SelectExpr#.or(\n _[_](\n optional^#*expr.Expr_IdentExpr#.of(\n [\n "list-value"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'optional.of(\n {\n "c"~string:{}~map(dyn, string)\n }~map(string, map(dyn, string))\n)~optional_type(map(string, map(dyn, string)))^optional_of.c~optional_type(map(dyn, string)).missing~optional_type(string).or(\n _[_](\n optional.of(\n [\n "list-value"~string\n ]~list(string)\n )~optional_type(list(string))^optional_of,\n 0~int\n )~optional_type(string)^optional_list_index_int\n)~optional_type(string)^optional_or_optional.orValue(\n "default value"~string\n)~string^optional_orValue_value', - type: "string", - }, - { - original: { - name: "optional_chaining_7", - expr: "optional.of({'c': {'index': 'goodbye'}}).c['index'].orValue('default value')", - value: { stringValue: "goodbye" }, - }, - ast: '_[_](\n optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{\n "index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#,\n "index"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n optional.of(\n {\n "c"~string:{\n "index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)),\n "index"~string\n)~optional_type(string)^optional_map_index_value.orValue(\n "default value"~string\n)~string^optional_orValue_value', - type: "string", - }, - { - original: { - name: "optional_chaining_8", - expr: "optional.of({'c': {}}).c['missing'].orValue('default value')", - value: { stringValue: "default value" }, - }, - ast: '_[_](\n optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#,\n "missing"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n optional.of(\n {\n "c"~string:{}~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)),\n "missing"~string\n)~optional_type(string)^optional_map_index_value.orValue(\n "default value"~string\n)~string^optional_orValue_value', - type: "string", - }, - { - original: { - name: "optional_chaining_9", - expr: "has(optional.of({'c': {'entry': 'hello world'}}).c) \u0026\u0026 !has(optional.of({'c': {'entry': 'hello world'}}).c.missing)", - value: { boolValue: true }, - }, - ast: '_\u0026\u0026_(\n optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{\n "entry"^#*expr.Constant_StringValue#:"hello world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c~test-only~^#*expr.Expr_SelectExpr#,\n !_(\n optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{\n "entry"^#*expr.Constant_StringValue#:"hello world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing~test-only~^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u0026\u0026_(\n optional.of(\n {\n "c"~string:{\n "entry"~string:"hello world"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~test-only~~bool,\n !_(\n optional.of(\n {\n "c"~string:{\n "entry"~string:"hello world"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)).missing~test-only~~bool\n )~bool^logical_not\n)~bool^logical_and', - type: "bool", - }, - { - original: { - name: "optional_chaining_10", - expr: "optional.ofNonZeroValue({'c': {'dashed-index': 'goodbye'}}.a.z).orValue({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])", - evalError: { errors: [{ message: "no such key" }] }, - }, - ast: 'optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n {\n "c"^#*expr.Constant_StringValue#:{\n "dashed-index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.a^#*expr.Expr_SelectExpr#.z^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n _[_](\n {\n "c"^#*expr.Constant_StringValue#:{\n "dashed-index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.c^#*expr.Expr_SelectExpr#,\n "dashed-index"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'optional.ofNonZeroValue(\n {\n "c"~string:{\n "dashed-index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string)).a~map(string, string).z~string\n)~optional_type(string)^optional_ofNonZeroValue.orValue(\n _[_](\n {\n "c"~string:{\n "dashed-index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string)).c~map(string, string),\n "dashed-index"~string\n )~string^index_map\n)~string^optional_orValue_value', - type: "string", - }, - { - original: { - name: "optional_chaining_11", - expr: "{'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()", - value: { int64Value: "7" }, - }, - error: - "ERROR: optional_chaining_11:1:35: unsupported syntax '.?'\n | {'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()\n | ..................................^\nERROR: optional_chaining_11:1:84: unsupported syntax '.?'\n | {'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()\n | ...................................................................................^", - }, - { - original: { - name: "optional_chaining_12", - expr: "{?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "nested_map" }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "map" }, - value: { - mapValue: { - entries: [ - { - key: { stringValue: "dashed-index" }, - value: { stringValue: "goodbye" }, - }, - ], - }, - }, - }, - ], - }, - }, - }, - ], - }, - }, - }, - error: - "ERROR: optional_chaining_12:1:2: unsupported syntax '?'\n | {?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}\n | .^", - }, - { - original: { - name: "optional_chaining_13", - expr: "{?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "singleton" }, - value: { boolValue: true }, - }, - ], - }, - }, - }, - error: - "ERROR: optional_chaining_13:1:2: unsupported syntax '?'\n | {?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}\n | .^", - }, - { - original: { - name: "optional_chaining_14", - expr: "[?{}.?c, ?optional.of(42), ?optional.none()]", - value: { listValue: { values: [{ int64Value: "42" }] } }, - }, - error: - "ERROR: optional_chaining_14:1:2: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | .^\nERROR: optional_chaining_14:1:5: unsupported syntax '.?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | ....^\nERROR: optional_chaining_14:1:10: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | .........^\nERROR: optional_chaining_14:1:28: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | ...........................^", - }, - { - original: { - name: "optional_chaining_15", - expr: "[?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]", - value: { listValue: {} }, - }, - error: - "ERROR: optional_chaining_15:1:2: unsupported syntax '?'\n | [?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]\n | .^\nERROR: optional_chaining_15:1:36: unsupported syntax '.?'\n | [?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]\n | ...................................^", - }, - { - original: { - name: "optional_chaining_16", - expr: "optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: optional_chaining_16:1:26: unsupported syntax '?'\n | optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()\n | .........................^", - }, - { - original: { - name: "has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field", - expr: "has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - error: - "ERROR: has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field:1:18: unsupported syntax '?'\n | has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)\n | .................^", - }, - { - original: { - name: "optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field", - expr: "optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - error: - "ERROR: optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field:1:38: unsupported syntax '?'\n | optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()\n | .....................................^", - }, - { - original: { - name: "struct_map_optindex_field", - expr: "TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string", - container: "cel.expr.conformance.proto2", - value: { mapValue: {} }, - }, - error: - "ERROR: struct_map_optindex_field:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string\n | .............^", - }, - { - original: { - name: "struct_optional_ofNonZeroValue_map_optindex_field", - expr: "TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string", - container: "cel.expr.conformance.proto2", - value: { mapValue: {} }, - }, - error: - "ERROR: struct_optional_ofNonZeroValue_map_optindex_field:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string\n | .............^", - }, - { - original: { - name: "struct_map_optindex_field_nested", - expr: "TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string", - container: "cel.expr.conformance.proto2", - value: { - mapValue: { - entries: [ - { - key: { stringValue: "hello" }, - value: { stringValue: "world" }, - }, - ], - }, - }, - }, - error: - "ERROR: struct_map_optindex_field_nested:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string\n | .............^", - }, - { - original: { - name: "struct_list_optindex_field", - expr: "TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string", - container: "cel.expr.conformance.proto2", - value: { - listValue: { - values: [ - { stringValue: "greetings" }, - { stringValue: "world" }, - ], - }, - }, - }, - error: - "ERROR: struct_list_optindex_field:1:45: unsupported syntax '?'\n | TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string\n | ............................................^\nERROR: struct_list_optindex_field:1:83: unsupported syntax '.?'\n | TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string\n | ..................................................................................^", - }, - { - original: { - name: "optional_empty_map_optindex_hasValue", - expr: "optional.of({}).?c.hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: optional_empty_map_optindex_hasValue:1:16: unsupported syntax '.?'\n | optional.of({}).?c.hasValue()\n | ...............^", - }, - { - original: { - name: "empty_struct_optindex_hasValue", - expr: "TestAllTypes{}.?repeated_string.hasValue()", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - error: - "ERROR: empty_struct_optindex_hasValue:1:15: unsupported syntax '.?'\n | TestAllTypes{}.?repeated_string.hasValue()\n | ..............^", - }, - { - original: { - name: "optional_empty_struct_optindex_hasValue", - expr: "optional.of(TestAllTypes{}).?repeated_string.hasValue()", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - error: - "ERROR: optional_empty_struct_optindex_hasValue:1:28: unsupported syntax '.?'\n | optional.of(TestAllTypes{}).?repeated_string.hasValue()\n | ...........................^", - }, - { - original: { - name: "optional_none_optselect_hasValue", - expr: "optional.none().?repeated_string.hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: optional_none_optselect_hasValue:1:16: unsupported syntax '.?'\n | optional.none().?repeated_string.hasValue()\n | ...............^", - }, - { - original: { - name: "struct_optindex_value", - expr: "TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()", - container: "cel.expr.conformance.proto2", - value: { listValue: { values: [{ stringValue: "foo" }] } }, - }, - error: - "ERROR: struct_optindex_value:1:39: unsupported syntax '.?'\n | TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()\n | ......................................^", - }, - { - original: { - name: "optional_struct_optindex_value", - expr: "optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()", - container: "cel.expr.conformance.proto2", - value: { listValue: { values: [{ stringValue: "foo" }] } }, - }, - error: - "ERROR: optional_struct_optindex_value:1:52: unsupported syntax '.?'\n | optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()\n | ...................................................^", - }, - { - original: { - name: "optional_struct_optindex_index_value", - expr: "optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()", - container: "cel.expr.conformance.proto2", - value: { stringValue: "foo" }, - }, - error: - "ERROR: optional_struct_optindex_index_value:1:52: unsupported syntax '.?'\n | optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()\n | ...................................................^", - }, - { - original: { - name: "empty_list_optindex_hasValue", - expr: "[][?0].hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: empty_list_optindex_hasValue:1:3: unsupported syntax '[?'\n | [][?0].hasValue()\n | ..^", - }, - { - original: { - name: "optional_empty_list_optindex_hasValue", - expr: "optional.of([])[?0].hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: optional_empty_list_optindex_hasValue:1:16: unsupported syntax '[?'\n | optional.of([])[?0].hasValue()\n | ...............^", - }, - { - original: { - name: "optional_none_optindex_hasValue", - expr: "optional.none()[?0].hasValue()", - value: { boolValue: false }, - }, - error: - "ERROR: optional_none_optindex_hasValue:1:16: unsupported syntax '[?'\n | optional.none()[?0].hasValue()\n | ...............^", - }, - { - original: { - name: "list_optindex_value", - expr: "['foo'][?0].value()", - value: { stringValue: "foo" }, - }, - error: - "ERROR: list_optindex_value:1:8: unsupported syntax '[?'\n | ['foo'][?0].value()\n | .......^", - }, - { - original: { - name: "optional_list_optindex_value", - expr: "optional.of(['foo'])[?0].value()", - value: { stringValue: "foo" }, - }, - error: - "ERROR: optional_list_optindex_value:1:21: unsupported syntax '[?'\n | optional.of(['foo'])[?0].value()\n | ....................^", - }, - { - original: { - name: "map_key_mixed_type_optindex_value", - expr: "{true: 1, 2: 2, 5u: 3}[?true].value()", - value: { int64Value: "1" }, - }, - error: - "ERROR: map_key_mixed_type_optindex_value:1:23: unsupported syntax '[?'\n | {true: 1, 2: 2, 5u: 3}[?true].value()\n | ......................^", - }, - { - original: { - name: "map_key_mixed_numbers_double_key_optindex_value", - expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()", - value: { doubleValue: 3 }, - }, - error: - "ERROR: map_key_mixed_numbers_double_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()\n | ..........................^", - }, - { - original: { - name: "map_key_mixed_numbers_uint_key_optindex_value", - expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()", - value: { doubleValue: 2 }, - }, - error: - "ERROR: map_key_mixed_numbers_uint_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()\n | ..........................^", - }, - { - original: { - name: "map_key_mixed_numbers_int_key_optindex_value", - expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()", - value: { doubleValue: 1 }, - }, - error: - "ERROR: map_key_mixed_numbers_int_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()\n | ..........................^", - }, - { - original: { - name: "optional_eq_none_none", - expr: "optional.none() == optional.none()", - value: { boolValue: true }, - }, - ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n optional.none()~optional_type(dyn)^optional_none,\n optional.none()~optional_type(dyn)^optional_none\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "optional_eq_none_int", - expr: "optional.none() == optional.of(1)", - value: { boolValue: false }, - }, - ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "optional_eq_int_none", - expr: "optional.of(1) == optional.none()", - value: { boolValue: false }, - }, - ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "optional_eq_int_int", - expr: "optional.of(1) == optional.of(1)", - value: { boolValue: true }, - }, - ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "optional_ne_none_none", - expr: "optional.none() != optional.none()", - value: { boolValue: false }, - }, - ast: "_!=_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n optional.none()~optional_type(dyn)^optional_none,\n optional.none()~optional_type(dyn)^optional_none\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "optional_ne_none_int", - expr: "optional.none() != optional.of(1)", - value: { boolValue: true }, - }, - ast: "_!=_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "optional_ne_int_none", - expr: "optional.of(1) != optional.none()", - value: { boolValue: true }, - }, - ast: "_!=_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "optional_ne_int_int", - expr: "optional.of(1) != optional.of(1)", - value: { boolValue: false }, - }, - ast: "_!=_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_!=_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^not_equals", - type: "bool", - }, - { - original: { - name: "map_optional_has", - expr: "has({'foo': optional.none()}.foo)", - value: { boolValue: true }, - }, - ast: '{\n "foo"^#*expr.Constant_StringValue#:optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.foo~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "foo"~string:optional.none()~optional_type(dyn)^optional_none\n}~map(string, optional_type(dyn)).foo~test-only~~bool', - type: "bool", - }, - { - original: { - name: "map_optional_select_has", - expr: "has({'foo': optional.none()}.foo.bar)", - value: { boolValue: false }, - }, - ast: '{\n "foo"^#*expr.Constant_StringValue#:optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.foo^#*expr.Expr_SelectExpr#.bar~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "foo"~string:optional.none()~optional_type(dyn)^optional_none\n}~map(string, optional_type(dyn)).foo~optional_type(dyn).bar~test-only~~bool', - type: "bool", - }, - { - original: { - name: "map_optional_entry_has", - expr: "has({?'foo': optional.none()}.foo)", - value: { boolValue: false }, - }, - error: - "ERROR: map_optional_entry_has:1:6: unsupported syntax '?'\n | has({?'foo': optional.none()}.foo)\n | .....^", - }, - ], - }, - ], - }, - { - name: "parse", - suites: [ - { - name: "nest", - tests: [ - { - original: { - name: "list_index", - description: - "Member = Member '[' Expr ']'. Nested indices are supported up to 12 times.", - expr: "a[a[a[a[a[a[a[a[a[a[a[a[0]]]]]]]]]]]]", - typeEnv: [ - { - name: "a", - ident: { - type: { listType: { elemType: { primitive: "INT64" } } }, - }, - }, - ], - bindings: { - a: { - value: { listValue: { values: [{ int64Value: "0" }] } }, - }, - }, - value: { int64Value: "0" }, - }, - ast: "_[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n 0~int\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n)~int^index_list", - type: "int", - }, - { - original: { - name: "message_literal", - description: - "Member = Member '{' [FieldInits] '}'. Nested messages supported up to 12 levels deep.", - expr: "NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{payload: TestAllTypes{single_int64: 137}}}}}}}}}}}}.payload.single_int64", - container: "cel.expr.conformance.proto3", - value: { int64Value: "0" }, - }, - ast: "NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n payload:TestAllTypes{\n single_int64:137^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.payload^#*expr.Expr_SelectExpr#.single_int64^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n payload:cel.expr.conformance.proto3.TestAllTypes{\n single_int64:137~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n}~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes.payload~cel.expr.conformance.proto3.TestAllTypes.single_int64~int", - type: "int", - }, - { - original: { - name: "funcall", - description: - "Primary = ['.'] IDENT ['(' [ExprList] ')']. Nested function calls supported up to 12 levels deep.", - expr: "int(uint(int(uint(int(uint(int(uint(int(uint(int(uint(7))))))))))))", - value: { int64Value: "7" }, - }, - ast: "int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n 7~int\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n)~int^uint64_to_int64", - type: "int", - }, - { - original: { - name: "list_literal", - description: - "Primary = '[' [ExprList] ']'. Nested list literals up to 12 levels deep.", - expr: "size([[[[[[[[[[[[0]]]]]]]]]]]])", - value: { int64Value: "1" }, - }, - ast: "size(\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "size(\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n 0~int\n ]~list(int)\n ]~list(list(int))\n ]~list(list(list(int)))\n ]~list(list(list(list(int))))\n ]~list(list(list(list(list(int)))))\n ]~list(list(list(list(list(list(int))))))\n ]~list(list(list(list(list(list(list(int)))))))\n ]~list(list(list(list(list(list(list(list(int))))))))\n ]~list(list(list(list(list(list(list(list(list(int)))))))))\n ]~list(list(list(list(list(list(list(list(list(list(int))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(int)))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(list(int))))))))))))\n)~int^size_list", - type: "int", - }, - { - original: { - name: "map_literal", - description: - "Primary = '{' [MapInits] '}'. Nested map literals up to 12 levels deep.", - expr: "size({0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: 'foo'}}}}}}}}}}}})", - value: { int64Value: "1" }, - }, - ast: 'size(\n {\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'size(\n {\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:"foo"~string\n }~map(int, string)\n }~map(int, map(int, string))\n }~map(int, map(int, map(int, string)))\n }~map(int, map(int, map(int, map(int, string))))\n }~map(int, map(int, map(int, map(int, map(int, string)))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, string))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))))))\n)~int^size_map', - type: "int", - }, - { - original: { - name: "parens", - description: "Primary = '(' Expr ')'", - expr: "((((((((((((((((((((((((((((((((7))))))))))))))))))))))))))))))))", - value: { int64Value: "7" }, - }, - error: - "ERROR: parens:-1:0: expression recursion limit exceeded: 32", - }, - ], - }, - { - name: "repeat", - tests: [ - { - original: { - name: "conditional", - description: - "Expr = ConditionalOr ['?' ConditionalOr ':' Expr]. Chained ternary operators up to 24 levels.", - expr: "true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : false", - value: { boolValue: true }, - }, - ast: "_?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n false~bool\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n)~bool^conditional", - type: "bool", - }, - { - original: { - name: "or", - description: - "ConditionalOr = [ConditionalOr '||'] ConditionalAnd. Logical OR statements with 32 conditions.", - expr: "false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || true", - value: { boolValue: true }, - }, - ast: "_||_(\n _||_(\n _||_(\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_||_(\n _||_(\n _||_(\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n true~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n)~bool^logical_or", - type: "bool", - }, - { - original: { - name: "and", - description: - "ConditionalAnd = [ConditionalAnd '\u0026\u0026'] Relation. Logical AND statements with 32 conditions.", - expr: "true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 false", - value: { boolValue: false }, - }, - ast: "_\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n false~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n)~bool^logical_and", - type: "bool", - }, - { - original: { - name: "add_sub", - description: - "Addition = [Addition ('+' | '-')] Multiplication. Addition operators are supported up to 24 times consecutively.", - expr: "3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3", - value: { int64Value: "3" }, - }, - ast: "_+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n 3^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n 3~int,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "mul_div", - description: - "Multiplication = [Multiplication ('*' | '/' | '%')] Unary. Multiplication operators are supported up to 24 times consecutively.", - expr: "4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4", - value: { int64Value: "4" }, - }, - ast: "_/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n 4^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n 4~int,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n)~int^divide_int64", - type: "int", - }, - { - original: { - name: "not", - description: "Unary = '!' {'!'} Member", - expr: "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!true", - value: { boolValue: true }, - }, - ast: "true^#*expr.Constant_BoolValue#", - checkedAst: "true~bool", - type: "bool", - }, - { - original: { - name: "unary_neg", - description: "Unary = '-' {'-'} Member", - expr: "--------------------------------19", - value: { int64Value: "19" }, - }, - ast: "19^#*expr.Constant_Int64Value#", - checkedAst: "19~int", - type: "int", - }, - { - original: { - name: "select", - description: - "Member = Member '.' IDENT ['(' [ExprList] ')']. Selection is supported up to 12 times consecutively.", - expr: "NestedTestAllTypes{}.child.child.child.child.child.child.child.child.child.child.payload.single_int32", - container: "cel.expr.conformance.proto3", - value: { int64Value: "0" }, - }, - ast: "NestedTestAllTypes{}^#*expr.Expr_StructExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.payload^#*expr.Expr_SelectExpr#.single_int32^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.NestedTestAllTypes{}~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.payload~cel.expr.conformance.proto3.TestAllTypes.single_int32~int", - type: "int", - }, - { - original: { - name: "index", - description: - "Member = Member '[' Expr ']'. Indexing is supported up to 12 times consecutively.", - expr: "[[[[[[[[[[[['foo']]]]]]]]]]]][0][0][0][0][0][0][0][0][0][0][0][0]", - value: { stringValue: "foo" }, - }, - ast: '_[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n "foo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n "foo"~string\n ]~list(string)\n ]~list(list(string))\n ]~list(list(list(string)))\n ]~list(list(list(list(string))))\n ]~list(list(list(list(list(string)))))\n ]~list(list(list(list(list(list(string))))))\n ]~list(list(list(list(list(list(list(string)))))))\n ]~list(list(list(list(list(list(list(list(string))))))))\n ]~list(list(list(list(list(list(list(list(list(string)))))))))\n ]~list(list(list(list(list(list(list(list(list(list(string))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(string)))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(list(string)))))))))))),\n 0~int\n )~list(list(list(list(list(list(list(list(list(list(list(string)))))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(list(list(string))))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(list(string)))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(string))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(string)))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(string))))))^index_list,\n 0~int\n )~list(list(list(list(list(string)))))^index_list,\n 0~int\n )~list(list(list(list(string))))^index_list,\n 0~int\n )~list(list(list(string)))^index_list,\n 0~int\n )~list(list(string))^index_list,\n 0~int\n )~list(string)^index_list,\n 0~int\n)~string^index_list', - type: "string", - }, - { - original: { - name: "list_literal", - description: - "Primary = '[' [ExprList] ']'. List literals with up to 32 elements.", - expr: "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31][17]", - value: { int64Value: "17" }, - }, - ast: "_[_](\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#,\n 10^#*expr.Constant_Int64Value#,\n 11^#*expr.Constant_Int64Value#,\n 12^#*expr.Constant_Int64Value#,\n 13^#*expr.Constant_Int64Value#,\n 14^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#,\n 16^#*expr.Constant_Int64Value#,\n 17^#*expr.Constant_Int64Value#,\n 18^#*expr.Constant_Int64Value#,\n 19^#*expr.Constant_Int64Value#,\n 20^#*expr.Constant_Int64Value#,\n 21^#*expr.Constant_Int64Value#,\n 22^#*expr.Constant_Int64Value#,\n 23^#*expr.Constant_Int64Value#,\n 24^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#,\n 26^#*expr.Constant_Int64Value#,\n 27^#*expr.Constant_Int64Value#,\n 28^#*expr.Constant_Int64Value#,\n 29^#*expr.Constant_Int64Value#,\n 30^#*expr.Constant_Int64Value#,\n 31^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int,\n 5~int,\n 6~int,\n 7~int,\n 8~int,\n 9~int,\n 10~int,\n 11~int,\n 12~int,\n 13~int,\n 14~int,\n 15~int,\n 16~int,\n 17~int,\n 18~int,\n 19~int,\n 20~int,\n 21~int,\n 22~int,\n 23~int,\n 24~int,\n 25~int,\n 26~int,\n 27~int,\n 28~int,\n 29~int,\n 30~int,\n 31~int\n ]~list(int),\n 17~int\n)~int^index_list", - type: "int", - }, - { - original: { - name: "map_literal", - description: - "Primary = '{' [MapInits] '}'. Map literals with up to 32 entries.", - expr: "{0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 21: 'twenty-one', 22: 'twenty-two', 23: 'twenty-three', 24: 'twenty-four', 25: 'twenty-five', 26: 'twenty-six', 27: 'twenty-seven', 28: 'twenty-eight', 29: 'twenty-nine', 30: 'thirty', 31: 'thirty-one'}[17]", - value: { stringValue: "seventeen" }, - }, - ast: '_[_](\n {\n 0^#*expr.Constant_Int64Value#:"zero"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:"one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:"two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:"three"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 4^#*expr.Constant_Int64Value#:"four"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:"five"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 6^#*expr.Constant_Int64Value#:"six"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:"seven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:"eight"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 9^#*expr.Constant_Int64Value#:"nine"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 10^#*expr.Constant_Int64Value#:"ten"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 11^#*expr.Constant_Int64Value#:"eleven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 12^#*expr.Constant_Int64Value#:"twelve"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 13^#*expr.Constant_Int64Value#:"thirteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 14^#*expr.Constant_Int64Value#:"fourteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 15^#*expr.Constant_Int64Value#:"fifteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 16^#*expr.Constant_Int64Value#:"sixteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 17^#*expr.Constant_Int64Value#:"seventeen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 18^#*expr.Constant_Int64Value#:"eighteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 19^#*expr.Constant_Int64Value#:"nineteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 20^#*expr.Constant_Int64Value#:"twenty"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 21^#*expr.Constant_Int64Value#:"twenty-one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 22^#*expr.Constant_Int64Value#:"twenty-two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 23^#*expr.Constant_Int64Value#:"twenty-three"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 24^#*expr.Constant_Int64Value#:"twenty-four"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 25^#*expr.Constant_Int64Value#:"twenty-five"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 26^#*expr.Constant_Int64Value#:"twenty-six"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 27^#*expr.Constant_Int64Value#:"twenty-seven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 28^#*expr.Constant_Int64Value#:"twenty-eight"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 29^#*expr.Constant_Int64Value#:"twenty-nine"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 30^#*expr.Constant_Int64Value#:"thirty"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 31^#*expr.Constant_Int64Value#:"thirty-one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n 0~int:"zero"~string,\n 1~int:"one"~string,\n 2~int:"two"~string,\n 3~int:"three"~string,\n 4~int:"four"~string,\n 5~int:"five"~string,\n 6~int:"six"~string,\n 7~int:"seven"~string,\n 8~int:"eight"~string,\n 9~int:"nine"~string,\n 10~int:"ten"~string,\n 11~int:"eleven"~string,\n 12~int:"twelve"~string,\n 13~int:"thirteen"~string,\n 14~int:"fourteen"~string,\n 15~int:"fifteen"~string,\n 16~int:"sixteen"~string,\n 17~int:"seventeen"~string,\n 18~int:"eighteen"~string,\n 19~int:"nineteen"~string,\n 20~int:"twenty"~string,\n 21~int:"twenty-one"~string,\n 22~int:"twenty-two"~string,\n 23~int:"twenty-three"~string,\n 24~int:"twenty-four"~string,\n 25~int:"twenty-five"~string,\n 26~int:"twenty-six"~string,\n 27~int:"twenty-seven"~string,\n 28~int:"twenty-eight"~string,\n 29~int:"twenty-nine"~string,\n 30~int:"thirty"~string,\n 31~int:"thirty-one"~string\n }~map(int, string),\n 17~int\n)~string^index_map', - type: "string", - }, - { - original: { - name: "message_literal", - description: - "Member = Member '{' [FieldInits] '}'. Message literals with up to 32 fields.", - expr: "TestAllTypes{single_int32: 5, single_int64: 10, single_uint32: 15u, single_uint64: 20u, single_sint32: 25, single_sint64: 30, single_fixed32: 35u, single_fixed64: 40u, single_float: 45.0, single_double: 50.0, single_bool: true, single_string: 'sixty', single_bytes: b'sixty-five', single_value: 70.0, single_int64_wrapper: 75, single_int32_wrapper: 80, single_double_wrapper: 85.0, single_float_wrapper: 90.0, single_uint64_wrapper: 95u, single_uint32_wrapper: 100u, single_string_wrapper: 'one hundred five', single_bool_wrapper: true, repeated_int32: [115], repeated_int64: [120], repeated_uint32: [125u], repeated_uint64: [130u], repeated_sint32: [135], repeated_sint64: [140], repeated_fixed32: [145u], repeated_fixed64: [150u], repeated_sfixed32: [155], repeated_float: [160.0]}.single_sint64", - container: "cel.expr.conformance.proto3", - value: { int64Value: "30" }, - }, - ast: 'TestAllTypes{\n single_int32:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_int64:10^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint32:15u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint64:20u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_sint32:25^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_sint64:30^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_fixed32:35u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_fixed64:40u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_float:45^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_double:50^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"sixty"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bytes:b"sixty-five"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#,\n single_value:70^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_int64_wrapper:75^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_int32_wrapper:80^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_double_wrapper:85^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_float_wrapper:90^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_uint64_wrapper:95u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint32_wrapper:100u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string_wrapper:"one hundred five"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n repeated_int32:[\n 115^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_int64:[\n 120^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_uint32:[\n 125u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_uint64:[\n 130u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sint32:[\n 135^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sint64:[\n 140^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_fixed32:[\n 145u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_fixed64:[\n 150u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sfixed32:[\n 155^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_float:[\n 160^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_sint64^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_int32:5~int,\n single_int64:10~int,\n single_uint32:15u~uint,\n single_uint64:20u~uint,\n single_sint32:25~int,\n single_sint64:30~int,\n single_fixed32:35u~uint,\n single_fixed64:40u~uint,\n single_float:45~double,\n single_double:50~double,\n single_bool:true~bool,\n single_string:"sixty"~string,\n single_bytes:b"sixty-five"~bytes,\n single_value:70~double,\n single_int64_wrapper:75~int,\n single_int32_wrapper:80~int,\n single_double_wrapper:85~double,\n single_float_wrapper:90~double,\n single_uint64_wrapper:95u~uint,\n single_uint32_wrapper:100u~uint,\n single_string_wrapper:"one hundred five"~string,\n single_bool_wrapper:true~bool,\n repeated_int32:[\n 115~int\n ]~list(int),\n repeated_int64:[\n 120~int\n ]~list(int),\n repeated_uint32:[\n 125u~uint\n ]~list(uint),\n repeated_uint64:[\n 130u~uint\n ]~list(uint),\n repeated_sint32:[\n 135~int\n ]~list(int),\n repeated_sint64:[\n 140~int\n ]~list(int),\n repeated_fixed32:[\n 145u~uint\n ]~list(uint),\n repeated_fixed64:[\n 150u~uint\n ]~list(uint),\n repeated_sfixed32:[\n 155~int\n ]~list(int),\n repeated_float:[\n 160~double\n ]~list(double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_sint64~int', - type: "int", - }, - ], - }, - { - name: "string_literals", - tests: [ - { - original: { - name: "single_quoted", - expr: "'hello'", - value: { stringValue: "hello" }, - }, - ast: '"hello"^#*expr.Constant_StringValue#', - checkedAst: '"hello"~string', - type: "string", - }, - { - original: { - name: "double_quoted", - expr: '"hello"', - value: { stringValue: "hello" }, - }, - ast: '"hello"^#*expr.Constant_StringValue#', - checkedAst: '"hello"~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted", - expr: "'''hello'''", - value: { stringValue: "hello" }, - }, - ast: '"hello"^#*expr.Constant_StringValue#', - checkedAst: '"hello"~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted", - expr: '"""hello"""', - value: { stringValue: "hello" }, - }, - ast: '"hello"^#*expr.Constant_StringValue#', - checkedAst: '"hello"~string', - type: "string", - }, - { - original: { - name: "single_quoted_escaped_punctuation", - expr: "' \\\\ \\? \\\" \\' \\` '", - value: { stringValue: " \\ ? \" ' ` " }, - }, - ast: '" \\\\ ? \\" \' ` "^#*expr.Constant_StringValue#', - checkedAst: '" \\\\ ? \\" \' ` "~string', - type: "string", - }, - { - original: { - name: "double_quoted_escaped_punctuation", - expr: '" \\\\ \\? \\" \\\' \\` "', - value: { stringValue: " \\ ? \" ' ` " }, - }, - ast: '" \\\\ ? \\" \' ` "^#*expr.Constant_StringValue#', - checkedAst: '" \\\\ ? \\" \' ` "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_escaped_punctuation", - expr: "''' \\\\ \\? \\\" \\' \\` '''", - value: { stringValue: " \\ ? \" ' ` " }, - }, - ast: '" \\\\ ? \\" \' ` "^#*expr.Constant_StringValue#', - checkedAst: '" \\\\ ? \\" \' ` "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_escaped_punctuation", - expr: '""" \\\\ \\? \\" \\\' \\` """', - value: { stringValue: " \\ ? \" ' ` " }, - }, - ast: '" \\\\ ? \\" \' ` "^#*expr.Constant_StringValue#', - checkedAst: '" \\\\ ? \\" \' ` "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_unescaped_punctuation", - expr: "''' ? \" ' ` '''", - value: { stringValue: " ? \" ' ` " }, - }, - ast: '" ? \\" \' ` "^#*expr.Constant_StringValue#', - checkedAst: '" ? \\" \' ` "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_unescaped_punctuation", - expr: '""" ? " \' ` """', - value: { stringValue: " ? \" ' ` " }, - }, - ast: '" ? \\" \' ` "^#*expr.Constant_StringValue#', - checkedAst: '" ? \\" \' ` "~string', - type: "string", - }, - { - original: { - name: "single_quoted_escaped_special_control_characters", - expr: "' \\a \\b \\f \\t \\v '", - value: { stringValue: " \u0007 \b \f \t \u000b " }, - }, - ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', - checkedAst: '" \\a \\b \\f \\t \\v "~string', - type: "string", - }, - { - original: { - name: "double_quoted_escaped_special_control_characters", - expr: '" \\a \\b \\f \\t \\v "', - value: { stringValue: " \u0007 \b \f \t \u000b " }, - }, - ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', - checkedAst: '" \\a \\b \\f \\t \\v "~string', - type: "string", - }, - { - original: { - name: "single_quoted_unescaped_special_control_characters", - expr: "' \u0007 \b \f \t \u000b '", - value: { stringValue: " \u0007 \b \f \t \u000b " }, - }, - ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', - checkedAst: '" \\a \\b \\f \\t \\v "~string', - type: "string", - }, - { - original: { - name: "double_quoted_unescaped_special_control_characters", - expr: '" \u0007 \b \f \t \u000b "', - value: { stringValue: " \u0007 \b \f \t \u000b " }, - }, - ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', - checkedAst: '" \\a \\b \\f \\t \\v "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_escaped_special_control_characters", - expr: "''' \\a \\b \\f \\t \\v '''", - value: { stringValue: " \u0007 \b \f \t \u000b " }, - }, - ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', - checkedAst: '" \\a \\b \\f \\t \\v "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_escaped_special_control_characters", - expr: '""" \\a \\b \\f \\t \\v """', - value: { stringValue: " \u0007 \b \f \t \u000b " }, - }, - ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', - checkedAst: '" \\a \\b \\f \\t \\v "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_unescaped_special_control_characters", - expr: "''' \u0007 \b \f \t \u000b '''", - value: { stringValue: " \u0007 \b \f \t \u000b " }, - }, - ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', - checkedAst: '" \\a \\b \\f \\t \\v "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_unescaped_special_control_characters", - expr: '""" \u0007 \b \f \t \u000b """', - value: { stringValue: " \u0007 \b \f \t \u000b " }, - }, - ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', - checkedAst: '" \\a \\b \\f \\t \\v "~string', - type: "string", - }, - { - original: { - name: "single_quoted_escaped_line_feed", - expr: "' \\n '", - value: { stringValue: " \n " }, - }, - ast: '" \\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\n "~string', - type: "string", - }, - { - original: { - name: "double_quoted_escaped_line_feed", - expr: '" \\n "', - value: { stringValue: " \n " }, - }, - ast: '" \\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\n "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_escaped_line_feed", - expr: "''' \\n '''", - value: { stringValue: " \n " }, - }, - ast: '" \\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\n "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_escaped_line_feed", - expr: '""" \\n """', - value: { stringValue: " \n " }, - }, - ast: '" \\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\n "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_unescaped_line_feed", - expr: "''' \n '''", - value: { stringValue: " \n " }, - }, - ast: '" \\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\n "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_unescaped_line_feed", - expr: '""" \n """', - value: { stringValue: " \n " }, - }, - ast: '" \\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\n "~string', - type: "string", - }, - { - original: { - name: "single_quoted_escaped_carriage_return", - expr: "' \\r '", - value: { stringValue: " \r " }, - }, - ast: '" \\r "^#*expr.Constant_StringValue#', - checkedAst: '" \\r "~string', - type: "string", - }, - { - original: { - name: "double_quoted_escaped_carriage_return", - expr: '" \\r "', - value: { stringValue: " \r " }, - }, - ast: '" \\r "^#*expr.Constant_StringValue#', - checkedAst: '" \\r "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_escaped_carriage_return", - expr: "''' \\r '''", - value: { stringValue: " \r " }, - }, - ast: '" \\r "^#*expr.Constant_StringValue#', - checkedAst: '" \\r "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_escaped_carriage_return", - expr: '""" \\r """', - value: { stringValue: " \r " }, - }, - ast: '" \\r "^#*expr.Constant_StringValue#', - checkedAst: '" \\r "~string', - type: "string", - }, - { - original: { - name: "single_quoted_escaped_windows_line_end", - expr: "' \\r\\n '", - value: { stringValue: " \r\n " }, - }, - ast: '" \\r\\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\r\\n "~string', - type: "string", - }, - { - original: { - name: "double_quoted_escaped_windows_line_end", - expr: '" \\r\\n "', - value: { stringValue: " \r\n " }, - }, - ast: '" \\r\\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\r\\n "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_escaped_windows_line_end", - expr: "''' \\r\\n '''", - value: { stringValue: " \r\n " }, - }, - ast: '" \\r\\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\r\\n "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_escaped_windows_line_end", - expr: '""" \\r\\n """', - value: { stringValue: " \r\n " }, - }, - ast: '" \\r\\n "^#*expr.Constant_StringValue#', - checkedAst: '" \\r\\n "~string', - type: "string", - }, - { - original: { - name: "single_quoted_escaped_all_control_characters", - expr: "' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '", - value: { - stringValue: - " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", - }, - }, - ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', - checkedAst: - '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', - type: "string", - }, - { - original: { - name: "double_quoted_escaped_all_control_characters", - expr: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F "', - value: { - stringValue: - " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", - }, - }, - ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', - checkedAst: - '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', - type: "string", - }, - { - original: { - name: "single_quoted_unescaped_all_control_characters", - expr: "' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '", - value: { - stringValue: - " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", - }, - }, - ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', - checkedAst: - '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', - type: "string", - }, - { - original: { - name: "double_quoted_unescaped_all_control_characters", - expr: '" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "', - value: { - stringValue: - " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", - }, - }, - ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', - checkedAst: - '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_escaped_all_control_characters", - expr: "''' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '''", - value: { - stringValue: - " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", - }, - }, - ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', - checkedAst: - '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_escaped_all_control_characters", - expr: '""" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F """', - value: { - stringValue: - " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", - }, - }, - ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', - checkedAst: - '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_unescaped_all_control_characters", - expr: "''' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '''", - value: { - stringValue: - " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", - }, - }, - ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', - checkedAst: - '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_unescaped_all_control_characters", - expr: '""" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  """', - value: { - stringValue: - " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", - }, - }, - ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', - checkedAst: - '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', - type: "string", - }, - { - original: { - name: "single_quoted_octal_escapes", - expr: "' \\000 \\012 \\177 '", - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "double_quoted_octal_escapes", - expr: '" \\000 \\012 \\177 "', - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_octal_escapes", - expr: "''' \\000 \\012 \\177 '''", - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_octal_escapes", - expr: '""" \\000 \\012 \\177 """', - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "single_quoted_lower_x_escapes", - expr: "' \\x00 \\x0A \\x7F '", - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "double_quoted_lower_x_escapes", - expr: '" \\x00 \\x0A \\x7F "', - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_lower_x_escapes", - expr: "''' \\x00 \\x0A \\x7F '''", - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_lower_x_escapes", - expr: '""" \\x00 \\x0A \\x7F """', - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "single_quoted_upper_x_escapes", - expr: "' \\X00 \\X0A \\X7F '", - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "double_quoted_upper_x_escapes", - expr: '" \\X00 \\X0A \\X7F "', - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_upper_x_escapes", - expr: "''' \\X00 \\X0A \\X7F '''", - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_upper_x_escapes", - expr: '""" \\X00 \\X0A \\X7F """', - value: { stringValue: " \u0000 \n  " }, - }, - ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f "~string', - type: "string", - }, - { - original: { - name: "single_quoted_lower_u_escapes", - expr: "' \\u0000 \\u000A \\u007F \\u0100 \\uFFFB '", - value: { stringValue: " \u0000 \n  Ā  " }, - }, - ast: '" \\x00 \\n \\x7f Ā \\ufffb "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb "~string', - type: "string", - }, - { - original: { - name: "double_quoted_lower_u_escapes", - expr: '" \\u0000 \\u000A \\u007F \\u0100 \\uFFFB "', - value: { stringValue: " \u0000 \n  Ā  " }, - }, - ast: '" \\x00 \\n \\x7f Ā \\ufffb "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_lower_u_escapes", - expr: "''' \\u0000 \\u000A \\u007F \\u0100 \\uFFFB '''", - value: { stringValue: " \u0000 \n  Ā  " }, - }, - ast: '" \\x00 \\n \\x7f Ā \\ufffb "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_lower_u_escapes", - expr: '""" \\u0000 \\u000A \\u007F \\u0100 \\uFFFB """', - value: { stringValue: " \u0000 \n  Ā  " }, - }, - ast: '" \\x00 \\n \\x7f Ā \\ufffb "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb "~string', - type: "string", - }, - { - original: { - name: "single_quoted_upper_u_escapes", - expr: "' \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C '", - value: { stringValue: " \u0000 \n  Ā  𐀀 😬 " }, - }, - ast: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "~string', - type: "string", - }, - { - original: { - name: "double_quoted_upper_u_escapes", - expr: '" \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C "', - value: { stringValue: " \u0000 \n  Ā  𐀀 😬 " }, - }, - ast: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "~string', - type: "string", - }, - { - original: { - name: "triple_single_quoted_upper_u_escapes", - expr: "''' \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C '''", - value: { stringValue: " \u0000 \n  Ā  𐀀 😬 " }, - }, - ast: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "~string', - type: "string", - }, - { - original: { - name: "triple_double_quoted_upper_u_escapes", - expr: '""" \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C """', - value: { stringValue: " \u0000 \n  Ā  𐀀 😬 " }, - }, - ast: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "^#*expr.Constant_StringValue#', - checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "~string', - type: "string", - }, - { - original: { - name: "mixed_case_hex_single_quoted_escapes", - expr: "' \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB '", - value: { stringValue: " J K L M ƫ ƫ " }, - }, - ast: '" J K L M ƫ ƫ "^#*expr.Constant_StringValue#', - checkedAst: '" J K L M ƫ ƫ "~string', - type: "string", - }, - { - original: { - name: "mixed_case_hex_double_quoted_escapes", - expr: '" \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB "', - value: { stringValue: " J K L M ƫ ƫ " }, - }, - ast: '" J K L M ƫ ƫ "^#*expr.Constant_StringValue#', - checkedAst: '" J K L M ƫ ƫ "~string', - type: "string", - }, - { - original: { - name: "mixed_case_hex_triple_single_quoted_escapes", - expr: "''' \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB '''", - value: { stringValue: " J K L M ƫ ƫ " }, - }, - ast: '" J K L M ƫ ƫ "^#*expr.Constant_StringValue#', - checkedAst: '" J K L M ƫ ƫ "~string', - type: "string", - }, - { - original: { - name: "mixed_case_hex_triple_double_quoted_escapes", - expr: '""" \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB """', - value: { stringValue: " J K L M ƫ ƫ " }, - }, - ast: '" J K L M ƫ ƫ "^#*expr.Constant_StringValue#', - checkedAst: '" J K L M ƫ ƫ "~string', - type: "string", - }, - { - original: { - name: "unassigned_code_point_single_quoted_escapes", - expr: "' \\U00088888 '", - value: { stringValue: " 򈢈 " }, - }, - ast: '" \\U00088888 "^#*expr.Constant_StringValue#', - checkedAst: '" \\U00088888 "~string', - type: "string", - }, - { - original: { - name: "unassigned_code_point_double_quoted_escapes", - expr: '" \\U00088888 "', - value: { stringValue: " 򈢈 " }, - }, - ast: '" \\U00088888 "^#*expr.Constant_StringValue#', - checkedAst: '" \\U00088888 "~string', - type: "string", - }, - { - original: { - name: "unassigned_code_point_triple_single_quoted_escapes", - expr: "''' \\U00088888 '''", - value: { stringValue: " 򈢈 " }, - }, - ast: '" \\U00088888 "^#*expr.Constant_StringValue#', - checkedAst: '" \\U00088888 "~string', - type: "string", - }, - { - original: { - name: "unassigned_code_point_triple_double_quoted_escapes", - expr: '""" \\U00088888 """', - value: { stringValue: " 򈢈 " }, - }, - ast: '" \\U00088888 "^#*expr.Constant_StringValue#', - checkedAst: '" \\U00088888 "~string', - type: "string", - }, - { - original: { - name: "unassigned_code_point_single_quoted_unescaped", - expr: "' 򈢈 '", - value: { stringValue: " 򈢈 " }, - }, - ast: '" \\U00088888 "^#*expr.Constant_StringValue#', - checkedAst: '" \\U00088888 "~string', - type: "string", - }, - { - original: { - name: "unassigned_code_point_double_quoted_unescaped", - expr: '" 򈢈 "', - value: { stringValue: " 򈢈 " }, - }, - ast: '" \\U00088888 "^#*expr.Constant_StringValue#', - checkedAst: '" \\U00088888 "~string', - type: "string", - }, - { - original: { - name: "unassigned_code_point_triple_single_quoted_unescaped", - expr: "''' 򈢈 '''", - value: { stringValue: " 򈢈 " }, - }, - ast: '" \\U00088888 "^#*expr.Constant_StringValue#', - checkedAst: '" \\U00088888 "~string', - type: "string", - }, - { - original: { - name: "unassigned_code_point_triple_double_quoted_unescaped", - expr: '""" 򈢈 """', - value: { stringValue: " 򈢈 " }, - }, - ast: '" \\U00088888 "^#*expr.Constant_StringValue#', - checkedAst: '" \\U00088888 "~string', - type: "string", - }, - { - original: { - name: "raw_single_quoted_escapes", - expr: "r' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '", - value: { - stringValue: - ' \\\\ \\? \\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ', - }, - }, - ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', - checkedAst: - '" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', - type: "string", - }, - { - original: { - name: "raw_double_quoted_escapes", - expr: 'r" \\\\ \\? \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "', - value: { - stringValue: - " \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", - }, - }, - ast: '" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', - checkedAst: - '" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', - type: "string", - }, - { - original: { - name: "raw_triple_single_quoted_escapes", - expr: "r''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''", - value: { - stringValue: - " \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", - }, - }, - ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', - checkedAst: - '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', - type: "string", - }, - { - original: { - name: "raw_triple_double_quoted_escapes", - expr: 'r""" \\\\ \\? \\" \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 """', - value: { - stringValue: - " \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", - }, - }, - ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', - checkedAst: - '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', - type: "string", - }, - { - original: { - name: "upper_raw_single_quoted_escapes", - expr: "R' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '", - value: { - stringValue: - ' \\\\ \\? \\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ', - }, - }, - ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', - checkedAst: - '" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', - type: "string", - }, - { - original: { - name: "upper_raw_double_quoted_escapes", - expr: 'R" \\\\ \\? \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "', - value: { - stringValue: - " \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", - }, - }, - ast: '" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', - checkedAst: - '" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', - type: "string", - }, - { - original: { - name: "upper_raw_triple_single_quoted_escapes", - expr: "R''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''", - value: { - stringValue: - " \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", - }, - }, - ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', - checkedAst: - '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', - type: "string", - }, - { - original: { - name: "upper_raw_triple_double_quoted_escapes", - expr: 'R""" \\\\ \\? \\" \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 """', - value: { - stringValue: - " \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", - }, - }, - ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', - checkedAst: - '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', - type: "string", - }, - ], - }, - { - name: "bytes_literals", - tests: [ - { - original: { - name: "single_quoted", - expr: "b'hello'", - value: { bytesValue: "aGVsbG8=" }, - }, - ast: 'b"hello"^#*expr.Constant_BytesValue#', - checkedAst: 'b"hello"~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted", - expr: 'b"hello"', - value: { bytesValue: "aGVsbG8=" }, - }, - ast: 'b"hello"^#*expr.Constant_BytesValue#', - checkedAst: 'b"hello"~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted", - expr: "b'''hello'''", - value: { bytesValue: "aGVsbG8=" }, - }, - ast: 'b"hello"^#*expr.Constant_BytesValue#', - checkedAst: 'b"hello"~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted", - expr: 'b"""hello"""', - value: { bytesValue: "aGVsbG8=" }, - }, - ast: 'b"hello"^#*expr.Constant_BytesValue#', - checkedAst: 'b"hello"~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_escaped_punctuation", - expr: "b' \\\\ \\? \\\" \\' \\` '", - value: { bytesValue: "IFwgPyAiICcgYCA=" }, - }, - ast: 'b" \\\\ ? \\" \' ` "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\\\ ? \\" \' ` "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_escaped_punctuation", - expr: 'b" \\\\ \\? \\" \\\' \\` "', - value: { bytesValue: "IFwgPyAiICcgYCA=" }, - }, - ast: 'b" \\\\ ? \\" \' ` "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\\\ ? \\" \' ` "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_escaped_punctuation", - expr: "b''' \\\\ \\? \\\" \\' \\` '''", - value: { bytesValue: "IFwgPyAiICcgYCA=" }, - }, - ast: 'b" \\\\ ? \\" \' ` "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\\\ ? \\" \' ` "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_escaped_punctuation", - expr: 'b""" \\\\ \\? \\" \\\' \\` """', - value: { bytesValue: "IFwgPyAiICcgYCA=" }, - }, - ast: 'b" \\\\ ? \\" \' ` "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\\\ ? \\" \' ` "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_unescaped_punctuation", - expr: "b''' ? \" ' ` '''", - value: { bytesValue: "ID8gIiAnIGAg" }, - }, - ast: 'b" ? \\" \' ` "^#*expr.Constant_BytesValue#', - checkedAst: 'b" ? \\" \' ` "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_unescaped_punctuation", - expr: 'b""" ? " \' ` """', - value: { bytesValue: "ID8gIiAnIGAg" }, - }, - ast: 'b" ? \\" \' ` "^#*expr.Constant_BytesValue#', - checkedAst: 'b" ? \\" \' ` "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_escaped_special_control_characters", - expr: "b' \\a \\b \\f \\t \\v '", - value: { bytesValue: "IAcgCCAMIAkgCyA=" }, - }, - ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_escaped_special_control_characters", - expr: 'b" \\a \\b \\f \\t \\v "', - value: { bytesValue: "IAcgCCAMIAkgCyA=" }, - }, - ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_unescaped_special_control_characters", - expr: "b' \u0007 \b \f \t \u000b '", - value: { bytesValue: "IAcgCCAMIAkgCyA=" }, - }, - ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_unescaped_special_control_characters", - expr: 'b" \u0007 \b \f \t \u000b "', - value: { bytesValue: "IAcgCCAMIAkgCyA=" }, - }, - ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_escaped_special_control_characters", - expr: "b''' \\a \\b \\f \\t \\v '''", - value: { bytesValue: "IAcgCCAMIAkgCyA=" }, - }, - ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_escaped_special_control_characters", - expr: 'b""" \\a \\b \\f \\t \\v """', - value: { bytesValue: "IAcgCCAMIAkgCyA=" }, - }, - ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_unescaped_special_control_characters", - expr: "b''' \u0007 \b \f \t \u000b '''", - value: { bytesValue: "IAcgCCAMIAkgCyA=" }, - }, - ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_unescaped_special_control_characters", - expr: 'b""" \u0007 \b \f \t \u000b """', - value: { bytesValue: "IAcgCCAMIAkgCyA=" }, - }, - ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_escaped_line_feed", - expr: "b' \\n '", - value: { bytesValue: "IAog" }, - }, - ast: 'b" \\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\n "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_escaped_line_feed", - expr: 'b" \\n "', - value: { bytesValue: "IAog" }, - }, - ast: 'b" \\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\n "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_escaped_line_feed", - expr: "b''' \\n '''", - value: { bytesValue: "IAog" }, - }, - ast: 'b" \\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\n "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_escaped_line_feed", - expr: 'b""" \\n """', - value: { bytesValue: "IAog" }, - }, - ast: 'b" \\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\n "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_unescaped_line_feed", - expr: "b''' \n '''", - value: { bytesValue: "IAog" }, - }, - ast: 'b" \\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\n "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_unescaped_line_feed", - expr: 'b""" \n """', - value: { bytesValue: "IAog" }, - }, - ast: 'b" \\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\n "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_escaped_carriage_return", - expr: "b' \\r '", - value: { bytesValue: "IA0g" }, - }, - ast: 'b" \\r "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\r "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_escaped_carriage_return", - expr: 'b" \\r "', - value: { bytesValue: "IA0g" }, - }, - ast: 'b" \\r "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\r "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_escaped_carriage_return", - expr: "b''' \\r '''", - value: { bytesValue: "IA0g" }, - }, - ast: 'b" \\r "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\r "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_escaped_carriage_return", - expr: 'b""" \\r """', - value: { bytesValue: "IA0g" }, - }, - ast: 'b" \\r "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\r "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_escaped_windows_line_end", - expr: "b' \\r\\n '", - value: { bytesValue: "IA0KIA==" }, - }, - ast: 'b" \\r\\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\r\\n "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_escaped_windows_line_end", - expr: 'b" \\r\\n "', - value: { bytesValue: "IA0KIA==" }, - }, - ast: 'b" \\r\\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\r\\n "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_escaped_windows_line_end", - expr: "b''' \\r\\n '''", - value: { bytesValue: "IA0KIA==" }, - }, - ast: 'b" \\r\\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\r\\n "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_escaped_windows_line_end", - expr: 'b""" \\r\\n """', - value: { bytesValue: "IA0KIA==" }, - }, - ast: 'b" \\r\\n "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\r\\n "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_escaped_all_control_characters", - expr: "b' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '", - value: { - bytesValue: - "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", - }, - }, - ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_escaped_all_control_characters", - expr: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F "', - value: { - bytesValue: - "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", - }, - }, - ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_unescaped_all_control_characters", - expr: "b' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '", - value: { - bytesValue: - "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", - }, - }, - ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_unescaped_all_control_characters", - expr: 'b" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "', - value: { - bytesValue: - "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", - }, - }, - ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_escaped_all_control_characters", - expr: "b''' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '''", - value: { - bytesValue: - "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", - }, - }, - ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_escaped_all_control_characters", - expr: 'b""" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F """', - value: { - bytesValue: - "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", - }, - }, - ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_unescaped_all_control_characters", - expr: "b''' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '''", - value: { - bytesValue: - "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", - }, - }, - ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_unescaped_all_control_characters", - expr: 'b""" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  """', - value: { - bytesValue: - "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", - }, - }, - ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_octal_escapes", - expr: "b' \\000 \\012 \\177 \\377 '", - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_octal_escapes", - expr: 'b" \\000 \\012 \\177 \\377 "', - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_octal_escapes", - expr: "b''' \\000 \\012 \\177 \\377 '''", - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_octal_escapes", - expr: 'b""" \\000 \\012 \\177 \\377 """', - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_lower_x_escapes", - expr: "b' \\x00 \\x0A \\x7F \\xFF '", - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_lower_x_escapes", - expr: 'b" \\x00 \\x0A \\x7F \\xFF "', - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_lower_x_escapes", - expr: "b''' \\x00 \\x0A \\x7F \\xFF '''", - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_lower_x_escapes", - expr: 'b""" \\x00 \\x0A \\x7F \\xFF """', - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "single_quoted_upper_x_escapes", - expr: "b' \\X00 \\X0A \\X7F \\XFF '", - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "double_quoted_upper_x_escapes", - expr: 'b" \\X00 \\X0A \\X7F \\XFF "', - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_single_quoted_upper_x_escapes", - expr: "b''' \\X00 \\X0A \\X7F \\XFF '''", - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "triple_double_quoted_upper_x_escapes", - expr: 'b""" \\X00 \\X0A \\X7F \\XFF """', - value: { bytesValue: "IAAgCiB/IP8g" }, - }, - ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', - checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', - type: "bytes", - }, - { - original: { - name: "mixed_case_hex_single_quoted_escapes", - expr: "B' \\x4a \\x4B \\X4c \\X4D '", - value: { bytesValue: "IEogSyBMIE0g" }, - }, - ast: 'b" J K L M "^#*expr.Constant_BytesValue#', - checkedAst: 'b" J K L M "~bytes', - type: "bytes", - }, - { - original: { - name: "mixed_case_hex_double_quoted_escapes", - expr: 'B" \\x4a \\x4B \\X4c \\X4D "', - value: { bytesValue: "IEogSyBMIE0g" }, - }, - ast: 'b" J K L M "^#*expr.Constant_BytesValue#', - checkedAst: 'b" J K L M "~bytes', - type: "bytes", - }, - { - original: { - name: "mixed_case_hex_triple_single_quoted_escapes", - expr: "B''' \\x4a \\x4B \\X4c \\X4D '''", - value: { bytesValue: "IEogSyBMIE0g" }, - }, - ast: 'b" J K L M "^#*expr.Constant_BytesValue#', - checkedAst: 'b" J K L M "~bytes', - type: "bytes", - }, - { - original: { - name: "mixed_case_hex_triple_double_quoted_escapes", - expr: 'B""" \\x4a \\x4B \\X4c \\X4D """', - value: { bytesValue: "IEogSyBMIE0g" }, - }, - ast: 'b" J K L M "^#*expr.Constant_BytesValue#', - checkedAst: 'b" J K L M "~bytes', - type: "bytes", - }, - { - original: { - name: "raw_single_quoted_escapes", - expr: "br' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '", - value: { - bytesValue: - "IFxcIFw/IFwiIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", - }, - }, - ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', - type: "bytes", - }, - { - original: { - name: "raw_double_quoted_escapes", - expr: 'br" \\\\ \\? \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "', - value: { - bytesValue: - "IFxcIFw/IFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", - }, - }, - ast: 'b" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', - type: "bytes", - }, - { - original: { - name: "raw_triple_single_quoted_escapes", - expr: "br''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''", - value: { - bytesValue: - "IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", - }, - }, - ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', - type: "bytes", - }, - { - original: { - name: "raw_triple_double_quoted_escapes", - expr: 'br""" \\\\ \\? \\" \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 """', - value: { - bytesValue: - "IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", - }, - }, - ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', - type: "bytes", - }, - { - original: { - name: "upper_raw_single_quoted_escapes", - expr: "bR' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '", - value: { - bytesValue: - "IFxcIFw/IFwiIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", - }, - }, - ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', - type: "bytes", - }, - { - original: { - name: "upper_raw_double_quoted_escapes", - expr: 'bR" \\\\ \\? \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "', - value: { - bytesValue: - "IFxcIFw/IFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", - }, - }, - ast: 'b" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', - type: "bytes", - }, - { - original: { - name: "upper_raw_triple_single_quoted_escapes", - expr: "bR''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''", - value: { - bytesValue: - "IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", - }, - }, - ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', - type: "bytes", - }, - { - original: { - name: "upper_raw_triple_double_quoted_escapes", - expr: 'bR""" \\\\ \\? \\" \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 """', - value: { - bytesValue: - "IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", - }, - }, - ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', - checkedAst: - 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', - type: "bytes", - }, - ], - }, - { - name: "whitespace", - tests: [ - { - original: { - name: "spaces", - description: "Check that spaces are ignored.", - expr: "[ . cel. expr .conformance. proto3. TestAllTypes { single_int64 : int ( 17 ) } . single_int64 ] [ 0 ] == ( 18 - 1 ) \u0026\u0026 ! false ? 1 : 2", - value: { int64Value: "1" }, - }, - ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", - type: "int", - }, - { - original: { - name: "tabs", - description: "Check that tabs (`\\t`) are ignored.", - expr: "[\t.\tcel.\texpr\t.conformance.\tproto3.\tTestAllTypes\t{\tsingle_int64\t:\tint\t(\t17\t)\t}\t.\tsingle_int64\t]\t[\t0\t]\t==\t(\t18\t-\t1\t)\t\u0026\u0026\t!\tfalse\t?\t1\t:\t2", - value: { int64Value: "1" }, - }, - ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", - type: "int", - }, - { - original: { - name: "new_lines", - description: "Check that new lines (`\\n`) are ignored.", - expr: "[\n.\ncel.\nexpr\n.conformance.\nproto3.\nTestAllTypes\n{\nsingle_int64\n:\nint\n(\n17\n)\n}\n.\nsingle_int64\n]\n[\n0\n]\n==\n(\n18\n-\n1\n)\n\u0026\u0026\n!\nfalse\n?\n1\n:\n2", - value: { int64Value: "1" }, - }, - ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", - type: "int", - }, - { - original: { - name: "new_pages", - description: "Check that new pages (`\\f`) are ignored.", - expr: "[\f.\fcel.\fexpr\f.conformance.\fproto3.\fTestAllTypes\f{\fsingle_int64\f:\fint\f(\f17\f)\f}\f.\fsingle_int64\f]\f[\f0\f]\f==\f(\f18\f-\f1\f)\f\u0026\u0026\f!\ffalse\f?\f1\f:\f2", - value: { int64Value: "1" }, - }, - ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", - type: "int", - }, - { - original: { - name: "carriage_returns", - description: "Check that carriage returns (`\\r`) are ignored.", - expr: "[\r.\rcel.\rexpr\r.conformance.\rproto3.\rTestAllTypes\r{\rsingle_int64\r:\rint\r(\r17\r)\r}\r.\rsingle_int64\r]\r[\r0\r]\r==\r(\r18\r-\r1\r)\r\u0026\u0026\r!\rfalse\r?\r1\r:\r2", - value: { int64Value: "1" }, - }, - ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", - type: "int", - }, - ], - }, - { - name: "comments", - tests: [ - { - original: { - name: "new_line_terminated", - description: - "Check that new-line-terminated comments are ignored.", - expr: "[// @\n.// @\ncel.// @\nexpr// @\n.conformance.// @\nproto3.// @\nTestAllTypes// @\n{// @\nsingle_int64// @\n:// @\nint// @\n(// @\n17// @\n)// @\n}// @\n.// @\nsingle_int64// @\n]// @\n[// @\n0// @\n]// @\n==// @\n(// @\n18// @\n-// @\n1// @\n)// @\n\u0026\u0026// @\n!// @\nfalse// @\n?// @\n1// @\n:// @\n2", - value: { int64Value: "1" }, - }, - ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", - type: "int", - }, - ], - }, - { - name: "selectors", - tests: [ - { - original: { - name: "as", - description: "Check that `as` can be used as a selector.", - expr: "{ 'as': 1 }.as", - value: { int64Value: "1" }, - }, - ast: '{\n "as"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.as^#*expr.Expr_SelectExpr#', - checkedAst: '{\n "as"~string:1~int\n}~map(string, int).as~int', - type: "int", - }, - { - original: { - name: "break", - description: "Check that `break` can be used as a selector.", - expr: "{ 'break': 1 }.break", - value: { int64Value: "1" }, - }, - ast: '{\n "break"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.break^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "break"~string:1~int\n}~map(string, int).break~int', - type: "int", - }, - { - original: { - name: "const", - description: "Check that `const` can be used as a selector.", - expr: "{ 'const': 1 }.const", - value: { int64Value: "1" }, - }, - ast: '{\n "const"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.const^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "const"~string:1~int\n}~map(string, int).const~int', - type: "int", - }, - { - original: { - name: "continue", - description: "Check that `continue` can be used as a selector.", - expr: "{ 'continue': 1 }.continue", - value: { int64Value: "1" }, - }, - ast: '{\n "continue"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.continue^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "continue"~string:1~int\n}~map(string, int).continue~int', - type: "int", - }, - { - original: { - name: "else", - description: "Check that `else` can be used as a selector.", - expr: "{ 'else': 1 }.else", - value: { int64Value: "1" }, - }, - ast: '{\n "else"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.else^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "else"~string:1~int\n}~map(string, int).else~int', - type: "int", - }, - { - original: { - name: "for", - description: "Check that `for` can be used as a selector.", - expr: "{ 'for': 1 }.for", - value: { int64Value: "1" }, - }, - ast: '{\n "for"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.for^#*expr.Expr_SelectExpr#', - checkedAst: '{\n "for"~string:1~int\n}~map(string, int).for~int', - type: "int", - }, - { - original: { - name: "function", - description: "Check that `function` can be used as a selector.", - expr: "{ 'function': 1 }.function", - value: { int64Value: "1" }, - }, - ast: '{\n "function"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.function^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "function"~string:1~int\n}~map(string, int).function~int', - type: "int", - }, - { - original: { - name: "if", - description: "Check that `if` can be used as a selector.", - expr: "{ 'if': 1 }.if", - value: { int64Value: "1" }, - }, - ast: '{\n "if"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.if^#*expr.Expr_SelectExpr#', - checkedAst: '{\n "if"~string:1~int\n}~map(string, int).if~int', - type: "int", - }, - { - original: { - name: "import", - description: "Check that `import` can be used as a selector.", - expr: "{ 'import': 1 }.import", - value: { int64Value: "1" }, - }, - ast: '{\n "import"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.import^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "import"~string:1~int\n}~map(string, int).import~int', - type: "int", - }, - { - original: { - name: "let", - description: "Check that `let` can be used as a selector.", - expr: "{ 'let': 1 }.let", - value: { int64Value: "1" }, - }, - ast: '{\n "let"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.let^#*expr.Expr_SelectExpr#', - checkedAst: '{\n "let"~string:1~int\n}~map(string, int).let~int', - type: "int", - }, - { - original: { - name: "loop", - description: "Check that `loop` can be used as a selector.", - expr: "{ 'loop': 1 }.loop", - value: { int64Value: "1" }, - }, - ast: '{\n "loop"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.loop^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "loop"~string:1~int\n}~map(string, int).loop~int', - type: "int", - }, - { - original: { - name: "package", - description: "Check that `package` can be used as a selector.", - expr: "{ 'package': 1 }.package", - value: { int64Value: "1" }, - }, - ast: '{\n "package"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.package^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "package"~string:1~int\n}~map(string, int).package~int', - type: "int", - }, - { - original: { - name: "namespace", - description: - "Check that `namespace` can be used as a selector.", - expr: "{ 'namespace': 1 }.namespace", - value: { int64Value: "1" }, - }, - ast: '{\n "namespace"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.namespace^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "namespace"~string:1~int\n}~map(string, int).namespace~int', - type: "int", - }, - { - original: { - name: "return", - description: "Check that `return` can be used as a selector.", - expr: "{ 'return': 1 }.return", - value: { int64Value: "1" }, - }, - ast: '{\n "return"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.return^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "return"~string:1~int\n}~map(string, int).return~int', - type: "int", - }, - { - original: { - name: "var", - description: "Check that `var` can be used as a selector.", - expr: "{ 'var': 1 }.var", - value: { int64Value: "1" }, - }, - ast: '{\n "var"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.var^#*expr.Expr_SelectExpr#', - checkedAst: '{\n "var"~string:1~int\n}~map(string, int).var~int', - type: "int", - }, - { - original: { - name: "void", - description: "Check that `void` can be used as a selector.", - expr: "{ 'void': 1 }.void", - value: { int64Value: "1" }, - }, - ast: '{\n "void"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.void^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "void"~string:1~int\n}~map(string, int).void~int', - type: "int", - }, - { - original: { - name: "while", - description: "Check that `while` can be used as a selector.", - expr: "{ 'while': 1 }.while", - value: { int64Value: "1" }, - }, - ast: '{\n "while"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.while^#*expr.Expr_SelectExpr#', - checkedAst: - '{\n "while"~string:1~int\n}~map(string, int).while~int', - type: "int", - }, - ], - }, - { - name: "receiver_function_names", - tests: [ - { - original: { - name: "as", - description: - "Check that `as` can be used as a receiver function.", - expr: "a.as() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.as()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.as() || true\n | ^\nERROR: \u003cinput\u003e:1:5: undeclared reference to 'as' (in container '')\n | a.as() || true\n | ....^", - }, - { - original: { - name: "break", - description: - "Check that `break` can be used as a receiver function.", - expr: "a.break() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.break()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.break() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'break' (in container '')\n | a.break() || true\n | .......^", - }, - { - original: { - name: "const", - description: - "Check that `const` can be used as a receiver function.", - expr: "a.const() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.const()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.const() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'const' (in container '')\n | a.const() || true\n | .......^", - }, - { - original: { - name: "continue", - description: - "Check that `continue` can be used as a receiver function.", - expr: "a.continue() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.continue()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.continue() || true\n | ^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'continue' (in container '')\n | a.continue() || true\n | ..........^", - }, - { - original: { - name: "else", - description: - "Check that `else` can be used as a receiver function.", - expr: "a.else() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.else()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.else() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'else' (in container '')\n | a.else() || true\n | ......^", - }, - { - original: { - name: "for", - description: - "Check that `for` can be used as a receiver function.", - expr: "a.for() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.for()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.for() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'for' (in container '')\n | a.for() || true\n | .....^", - }, - { - original: { - name: "function", - description: - "Check that `function` can be used as a receiver function.", - expr: "a.function() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.function()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.function() || true\n | ^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'function' (in container '')\n | a.function() || true\n | ..........^", - }, - { - original: { - name: "if", - description: - "Check that `if` can be used as a receiver function.", - expr: "a.if() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.if()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.if() || true\n | ^\nERROR: \u003cinput\u003e:1:5: undeclared reference to 'if' (in container '')\n | a.if() || true\n | ....^", - }, - { - original: { - name: "import", - description: - "Check that `import` can be used as a receiver function.", - expr: "a.import() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.import()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.import() || true\n | ^\nERROR: \u003cinput\u003e:1:9: undeclared reference to 'import' (in container '')\n | a.import() || true\n | ........^", - }, - { - original: { - name: "let", - description: - "Check that `let` can be used as a receiver function.", - expr: "a.let() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.let()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.let() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'let' (in container '')\n | a.let() || true\n | .....^", - }, - { - original: { - name: "loop", - description: - "Check that `loop` can be used as a receiver function.", - expr: "a.loop() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.loop()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.loop() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'loop' (in container '')\n | a.loop() || true\n | ......^", - }, - { - original: { - name: "package", - description: - "Check that `package` can be used as a receiver function.", - expr: "a.package() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.package()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.package() || true\n | ^\nERROR: \u003cinput\u003e:1:10: undeclared reference to 'package' (in container '')\n | a.package() || true\n | .........^", - }, - { - original: { - name: "namespace", - description: - "Check that `namespace` can be used as a receiver function.", - expr: "a.namespace() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.namespace()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.namespace() || true\n | ^\nERROR: \u003cinput\u003e:1:12: undeclared reference to 'namespace' (in container '')\n | a.namespace() || true\n | ...........^", - }, - { - original: { - name: "return", - description: - "Check that `return` can be used as a receiver function.", - expr: "a.return() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.return()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.return() || true\n | ^\nERROR: \u003cinput\u003e:1:9: undeclared reference to 'return' (in container '')\n | a.return() || true\n | ........^", - }, - { - original: { - name: "var", - description: - "Check that `var` can be used as a receiver function.", - expr: "a.var() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.var()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.var() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'var' (in container '')\n | a.var() || true\n | .....^", - }, - { - original: { - name: "void", - description: - "Check that `void` can be used as a receiver function.", - expr: "a.void() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.void()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.void() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'void' (in container '')\n | a.void() || true\n | ......^", - }, - { - original: { - name: "while", - description: - "Check that `while` can be used as a receiver function.", - expr: "a.while() || true", - disableCheck: true, - value: { boolValue: true }, - }, - ast: "_||_(\n a^#*expr.Expr_IdentExpr#.while()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.while() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'while' (in container '')\n | a.while() || true\n | .......^", - }, - ], - }, - { - name: "struct_field_names", - tests: [ - { - original: { - name: "as", - description: - "Check that `as` can be used as a struct field name.", - expr: "TestAllTypes{ as: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - as: true, - }, - }, - }, - ast: "TestAllTypes{\n as:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n as:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "break", - description: - "Check that `break` can be used as a struct field name.", - expr: "TestAllTypes{ break: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - break: true, - }, - }, - }, - ast: "TestAllTypes{\n break:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n break:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "const", - description: - "Check that `const` can be used as a struct field name.", - expr: "TestAllTypes{ const: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - const: true, - }, - }, - }, - ast: "TestAllTypes{\n const:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n const:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "continue", - description: - "Check that `continue` can be used as a struct field name.", - expr: "TestAllTypes{ continue: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - continue: true, - }, - }, - }, - ast: "TestAllTypes{\n continue:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n continue:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "else", - description: - "Check that `else` can be used as a struct field name.", - expr: "TestAllTypes{ else: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - else: true, - }, - }, - }, - ast: "TestAllTypes{\n else:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n else:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "for", - description: - "Check that `for` can be used as a struct field name.", - expr: "TestAllTypes{ for: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - for: true, - }, - }, - }, - ast: "TestAllTypes{\n for:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n for:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "function", - description: - "Check that `function` can be used as a struct field name.", - expr: "TestAllTypes{ function: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - function: true, - }, - }, - }, - ast: "TestAllTypes{\n function:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n function:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "if", - description: - "Check that `if` can be used as a struct field name.", - expr: "TestAllTypes{ if: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - if: true, - }, - }, - }, - ast: "TestAllTypes{\n if:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n if:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "import", - description: - "Check that `import` can be used as a struct field name.", - expr: "TestAllTypes{ import: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - import: true, - }, - }, - }, - ast: "TestAllTypes{\n import:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n import:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "let", - description: - "Check that `let` can be used as a struct field name.", - expr: "TestAllTypes{ let: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - let: true, - }, - }, - }, - ast: "TestAllTypes{\n let:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n let:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "loop", - description: - "Check that `loop` can be used as a struct field name.", - expr: "TestAllTypes{ loop: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - loop: true, - }, - }, - }, - ast: "TestAllTypes{\n loop:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n loop:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "package", - description: - "Check that `package` can be used as a struct field name.", - expr: "TestAllTypes{ package: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - package: true, - }, - }, - }, - ast: "TestAllTypes{\n package:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n package:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "namespace", - description: - "Check that `namespace` can be used as a struct field name.", - expr: "TestAllTypes{ namespace: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - namespace: true, - }, - }, - }, - ast: "TestAllTypes{\n namespace:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n namespace:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "return", - description: - "Check that `return` can be used as a struct field name.", - expr: "TestAllTypes{ return: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - return: true, - }, - }, - }, - ast: "TestAllTypes{\n return:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n return:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "var", - description: - "Check that `var` can be used as a struct field name.", - expr: "TestAllTypes{ var: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - var: true, - }, - }, - }, - ast: "TestAllTypes{\n var:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n var:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "void", - description: - "Check that `void` can be used as a struct field name.", - expr: "TestAllTypes{ void: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - void: true, - }, - }, - }, - ast: "TestAllTypes{\n void:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n void:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "while", - description: - "Check that `while` can be used as a struct field name.", - expr: "TestAllTypes{ while: true }", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - while: true, - }, - }, - }, - ast: "TestAllTypes{\n while:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n while:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - ], - }, - { - name: "plumbing", - suites: [ - { - name: "min", - tests: [ - { - original: { - name: "min_program", - description: "Smallest functionality: expr in, result out.", - expr: "17", - value: { int64Value: "17" }, - }, - ast: "17^#*expr.Constant_Int64Value#", - checkedAst: "17~int", - type: "int", - }, - ], - }, - { - name: "eval_results", - tests: [ - { - original: { - name: "error_result", - description: "Check that error results go through.", - expr: "1 / 0", - evalError: { errors: [{ message: "foo" }] }, - }, - ast: "_/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: "_/_(\n 1~int,\n 0~int\n)~int^divide_int64", - type: "int", - }, - { - original: { - name: "eval_map_results", - description: - "Check that map literals results are order independent.", - expr: '{"k1":"v1","k":"v"}', - value: { - mapValue: { - entries: [ - { - key: { stringValue: "k" }, - value: { stringValue: "v" }, - }, - { - key: { stringValue: "k1" }, - value: { stringValue: "v1" }, - }, - ], - }, - }, - }, - ast: '{\n "k1"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - '{\n "k1"~string:"v1"~string,\n "k"~string:"v"~string\n}~map(string, string)', - type: "map(string, string)", - }, - ], - }, - { - name: "check_inputs", - tests: [ - { - original: { - name: "skip_check", - description: "Make sure we can skip type checking.", - expr: "[17, 'pancakes']", - disableCheck: true, - value: { - listValue: { - values: [{ int64Value: "17" }, { stringValue: "pancakes" }], - }, - }, - }, - ast: '[\n 17^#*expr.Constant_Int64Value#,\n "pancakes"^#*expr.Constant_StringValue#\n]^#*expr.Expr_ListExpr#', - checkedAst: '[\n 17~int,\n "pancakes"~string\n]~list(dyn)', - type: "list(dyn)", - }, - ], - }, - { - name: "eval_inputs", - tests: [ - { - original: { - name: "one_ignored_value_arg", - description: - "Check that value bindings can be given, even if ignored.", - expr: "'foo'", - bindings: { x: { value: { int64Value: "17" } } }, - value: { stringValue: "foo" }, - }, - ast: '"foo"^#*expr.Constant_StringValue#', - checkedAst: '"foo"~string', - type: "string", - }, - ], - }, - ], - }, - { - name: "proto2", - suites: [ - { - name: "literal_singular", - tests: [ - { - original: { - name: "int64_nocontainer", - expr: "cel.expr.conformance.proto2.TestAllTypes{single_int64: 17}", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt64: "17", - }, - }, - }, - ast: "cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "int32", - expr: "TestAllTypes{single_int32: -34}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32: -34, - }, - }, - }, - ast: "TestAllTypes{\n single_int32:-34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32:-34~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "int32_eq_uint", - expr: "Int32Value{value: 34} == dyn(UInt64Value{value: 34u})", - container: "google.protobuf", - value: { boolValue: true }, - }, - ast: "_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.UInt64Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_int32_eq_uint", - expr: "Int32Value{value: 34} == dyn(UInt64Value{value: 18446744073709551615u})", - container: "google.protobuf", - value: { boolValue: false }, - }, - ast: "_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "int32_eq_double", - expr: "Int32Value{value: 34} == dyn(DoubleValue{value: 34.0})", - container: "google.protobuf", - value: { boolValue: true }, - }, - ast: "_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:34~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_int32_eq_double", - expr: "Int32Value{value: 34} == dyn(DoubleValue{value: -9223372036854775809.0})", - container: "google.protobuf", - value: { boolValue: false }, - }, - ast: "_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:-9.223372036854776e+18^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:-9.223372036854776e+18~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "int64", - expr: "TestAllTypes{single_int64: 17}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt64: "17", - }, - }, - }, - ast: "TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "uint32", - expr: "TestAllTypes{single_uint32: 1u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint32: 1, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32:1u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "uint32_eq_int", - expr: "UInt32Value{value: 34u} == dyn(Int64Value{value: 34})", - container: "google.protobuf", - value: { boolValue: true }, - }, - ast: "_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.Int64Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_uint32_eq_int", - expr: "UInt32Value{value: 34u} == dyn(Int64Value{value: -1})", - container: "google.protobuf", - value: { boolValue: false }, - }, - ast: "_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.Int64Value{\n value:-1~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "uint32_eq_double", - expr: "UInt32Value{value: 34u} == dyn(DoubleValue{value: 34.0})", - container: "google.protobuf", - value: { boolValue: true }, - }, - ast: "_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:34~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_uint32_eq_double", - expr: "UInt32Value{value: 34u} == dyn(DoubleValue{value: 18446744073709551616.0})", - container: "google.protobuf", - value: { boolValue: false }, - }, - ast: "_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:1.8446744073709552e+19^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:1.8446744073709552e+19~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "uint64", - expr: "TestAllTypes{single_uint64: 9999u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint64: "9999", - }, - }, - }, - ast: "TestAllTypes{\n single_uint64:9999u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64:9999u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "sint32", - expr: "TestAllTypes{single_sint32: -3}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleSint32: -3, - }, - }, - }, - ast: "TestAllTypes{\n single_sint32:-3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_sint32:-3~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "sint64", - expr: "TestAllTypes{single_sint64: 255}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleSint64: "255", - }, - }, - }, - ast: "TestAllTypes{\n single_sint64:255^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_sint64:255~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "fixed32", - expr: "TestAllTypes{single_fixed32: 43u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFixed32: 43, - }, - }, - }, - ast: "TestAllTypes{\n single_fixed32:43u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_fixed32:43u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "fixed64", - expr: "TestAllTypes{single_fixed64: 1880u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFixed64: "1880", - }, - }, - }, - ast: "TestAllTypes{\n single_fixed64:1880u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_fixed64:1880u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "sfixed32", - expr: "TestAllTypes{single_sfixed32: -404}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleSfixed32: -404, - }, - }, - }, - ast: "TestAllTypes{\n single_sfixed32:-404^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_sfixed32:-404~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "sfixed64", - expr: "TestAllTypes{single_sfixed64: -1}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleSfixed64: "-1", - }, - }, - }, - ast: "TestAllTypes{\n single_sfixed64:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_sfixed64:-1~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "float", - expr: "TestAllTypes{single_float: 3.1416}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFloat: 3.1416, - }, - }, - }, - ast: "TestAllTypes{\n single_float:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float:3.1416~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "float_eq_int", - expr: "FloatValue{value: 3.0} == dyn(Int64Value{value: 3})", - container: "google.protobuf", - value: { boolValue: true }, - }, - ast: "_==_(\n FloatValue{\n value:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.FloatValue{\n value:3~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.Int64Value{\n value:3~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_float_eq_int", - expr: "FloatValue{value: -1.14} == dyn(Int64Value{value: -1})", - container: "google.protobuf", - value: { boolValue: false }, - }, - ast: "_==_(\n FloatValue{\n value:-1.14^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.FloatValue{\n value:-1.14~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.Int64Value{\n value:-1~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "float_eq_uint", - expr: "FloatValue{value: 34.0} == dyn(UInt64Value{value: 34u})", - container: "google.protobuf", - value: { boolValue: true }, - }, - ast: "_==_(\n FloatValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.FloatValue{\n value:34~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.UInt64Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "not_float_eq_uint", - expr: "FloatValue{value: -1.0} == dyn(UInt64Value{value: 18446744073709551615u})", - container: "google.protobuf", - value: { boolValue: false }, - }, - ast: "_==_(\n FloatValue{\n value:-1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n google.protobuf.FloatValue{\n value:-1~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "double", - expr: "TestAllTypes{single_double: 6.022e23}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleDouble: 6.022e23, - }, - }, - }, - ast: "TestAllTypes{\n single_double:6.022e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_double:6.022e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "bool", - expr: "TestAllTypes{single_bool: true}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleBool: true, - }, - }, - }, - ast: "TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "string", - expr: "TestAllTypes{single_string: 'foo'}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleString: "foo", - }, - }, - }, - ast: 'TestAllTypes{\n single_string:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_string:"foo"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "bytes", - expr: "TestAllTypes{single_bytes: b'\\377'}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleBytes: "/w==", - }, - }, - }, - ast: 'TestAllTypes{\n single_bytes:b"\\xff"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_bytes:b"\\xff"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - ], - }, - { - name: "literal_wellknown", - tests: [ - { - original: { - name: "any", - expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 1}}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleAny: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32: 1, - }, - }, - }, - }, - ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "duration", - expr: "TestAllTypes{single_duration: duration('123s')}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleDuration: "123s", - }, - }, - }, - ast: 'TestAllTypes{\n single_duration:duration(\n "123s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_duration:duration(\n "123s"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "timestamp", - expr: "TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleTimestamp: "2009-02-13T23:31:30Z", - }, - }, - }, - ast: 'TestAllTypes{\n single_timestamp:timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_timestamp:timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "struct", - expr: "TestAllTypes{single_struct: {'one': 1, 'two': 2}}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleStruct: { one: 1, two: 2 }, - }, - }, - }, - ast: 'TestAllTypes{\n single_struct:{\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "two"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n "one"~string:1~int,\n "two"~string:2~int\n }~map(string, int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "value", - expr: "TestAllTypes{single_value: 'foo'}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleValue: "foo", - }, - }, - }, - ast: 'TestAllTypes{\n single_value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:"foo"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "int64_wrapper", - expr: "TestAllTypes{single_int64_wrapper: -321}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt64Wrapper: "-321", - }, - }, - }, - ast: "TestAllTypes{\n single_int64_wrapper:-321^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:-321~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "int32_wrapper", - expr: "TestAllTypes{single_int32_wrapper: -456}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32Wrapper: -456, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:-456^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:-456~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "double_wrapper", - expr: "TestAllTypes{single_double_wrapper: 2.71828}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleDoubleWrapper: 2.71828, - }, - }, - }, - ast: "TestAllTypes{\n single_double_wrapper:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:2.71828~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "float_wrapper", - expr: "TestAllTypes{single_float_wrapper: 2.99792e8}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleFloatWrapper: 299792000, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:2.99792e+08^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:2.99792e+08~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "uint64_wrapper", - expr: "TestAllTypes{single_uint64_wrapper: 8675309u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint64Wrapper: "8675309", - }, - }, - }, - ast: "TestAllTypes{\n single_uint64_wrapper:8675309u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:8675309u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "uint32_wrapper", - expr: "TestAllTypes{single_uint32_wrapper: 987u}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleUint32Wrapper: 987, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:987u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:987u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "string_wrapper", - expr: "TestAllTypes{single_string_wrapper: 'hubba'}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleStringWrapper: "hubba", - }, - }, - }, - ast: 'TestAllTypes{\n single_string_wrapper:"hubba"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:"hubba"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "bool_wrapper", - expr: "TestAllTypes{single_bool_wrapper: true}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleBoolWrapper: true, - }, - }, - }, - ast: "TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - { - original: { - name: "bytes_wrapper", - expr: "TestAllTypes{single_bytes_wrapper: b'\\301\\103'}", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleBytesWrapper: "wUM=", - }, - }, - }, - ast: 'TestAllTypes{\n single_bytes_wrapper:b"\\xc1C"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b"\\xc1C"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', - type: "cel.expr.conformance.proto2.TestAllTypes", - }, - ], - }, - { - name: "singular_bind", - tests: [ - { - original: { - name: "int32", - expr: "x.single_int32", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt32: 17, - }, - }, - }, - }, - value: { int64Value: "17" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto2.TestAllTypes^x.single_int32~int", - type: "int", - }, - { - original: { - name: "int64", - expr: "x.single_int64", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - singleInt64: "-99", - }, - }, - }, - }, - value: { int64Value: "-99" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto2.TestAllTypes^x.single_int64~int", - type: "int", - }, - ], - }, - { - name: "empty_field", - tests: [ - { - original: { - name: "scalar_with_default", - expr: "TestAllTypes{}.single_int32", - container: "cel.expr.conformance.proto2", - value: { int64Value: "-32" }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~int", - type: "int", - }, - { - original: { - name: "scalar_no_default", - expr: "TestAllTypes{}.single_fixed32", - container: "cel.expr.conformance.proto2", - value: { uint64Value: "0" }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_fixed32^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_fixed32~uint", - type: "uint", - }, - { - original: { - name: "nested_message", - expr: "TestAllTypes{}.single_nested_message", - container: "cel.expr.conformance.proto2", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes.NestedMessage", - }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~cel.expr.conformance.proto2.TestAllTypes.NestedMessage", - type: "cel.expr.conformance.proto2.TestAllTypes.NestedMessage", - }, - { - original: { - name: "nested_message_subfield", - expr: "TestAllTypes{}.single_nested_message.bb", - container: "cel.expr.conformance.proto2", - value: { int64Value: "0" }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#.bb^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~cel.expr.conformance.proto2.TestAllTypes.NestedMessage.bb~int", - type: "int", - }, - { - original: { - name: "wkt", - expr: "TestAllTypes{}.single_int64_wrapper", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - { - original: { - name: "repeated_scalar", - expr: "TestAllTypes{}.repeated_int64", - container: "cel.expr.conformance.proto2", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int64~list(int)", - type: "list(int)", - }, - { - original: { - name: "repeated_enum", - expr: "TestAllTypes{}.repeated_nested_enum", - container: "cel.expr.conformance.proto3", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)", - type: "list(int)", - }, - { - original: { - name: "repeated_nested", - expr: "TestAllTypes{}.repeated_nested_message", - container: "cel.expr.conformance.proto2", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_message~list(cel.expr.conformance.proto2.TestAllTypes.NestedMessage)", - type: "list(cel.expr.conformance.proto2.TestAllTypes.NestedMessage)", - }, - { - original: { - name: "map", - expr: "TestAllTypes{}.map_string_string", - container: "cel.expr.conformance.proto2", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~map(string, string)", - type: "map(string, string)", - }, - ], - }, - { - name: "has", - tests: [ - { - original: { - name: "undefined", - expr: "has(TestAllTypes{}.no_such_field)", - disableCheck: true, - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "no_such_field" }] }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.no_such_field~test-only~^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:4: undefined field 'no_such_field'\n | has(TestAllTypes{}.no_such_field)\n | ...^", - }, - { - original: { - name: "repeated_none_implicit", - expr: "has(TestAllTypes{}.repeated_int32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "repeated_none_explicit", - expr: "has(TestAllTypes{repeated_int32: []}.repeated_int32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n repeated_int32:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "repeated_one", - expr: "has(TestAllTypes{repeated_int32: [1]}.repeated_int32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[\n 1~int\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "repeated_many", - expr: "has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "map_none_implicit", - expr: "has(TestAllTypes{}.map_string_string)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool", - type: "bool", - }, - { - original: { - name: "map_none_explicit", - expr: "has(TestAllTypes{map_string_string: {}}.map_string_string)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n map_string_string:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{}~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool", - type: "bool", - }, - { - original: { - name: "map_one_default", - expr: "has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: 'TestAllTypes{\n map_string_string:{\n "MT"^#*expr.Constant_StringValue#:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n "MT"~string:""~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool', - type: "bool", - }, - { - original: { - name: "map_one", - expr: "has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: 'TestAllTypes{\n map_string_string:{\n "one"^#*expr.Constant_StringValue#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n "one"~string:"uno"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool', - type: "bool", - }, - { - original: { - name: "map_many", - expr: "has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: 'TestAllTypes{\n map_string_string:{\n "one"^#*expr.Constant_StringValue#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "two"^#*expr.Constant_StringValue#:"dos"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n "one"~string:"uno"~string,\n "two"~string:"dos"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool', - type: "bool", - }, - { - original: { - name: "required", - expr: "has(TestRequired{required_int32: 4}.required_int32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestRequired{\n required_int32:4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.required_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestRequired{\n required_int32:4~int\n}~cel.expr.conformance.proto2.TestRequired^cel.expr.conformance.proto2.TestRequired.required_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_unset_no_default", - expr: "has(TestAllTypes{}.single_sint32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_sint32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_sint32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_set_no_default", - expr: "has(TestAllTypes{single_sint32: -4}.single_sint32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_sint32:-4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_sint32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_sint32:-4~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_sint32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_unset_with_default", - expr: "has(TestAllTypes{}.single_int32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_set_with_default", - expr: "has(TestAllTypes{single_int32: 16}.single_int32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_int32:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32:16~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_set_to_default", - expr: "has(TestAllTypes{single_int32: -32}.single_int32)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_int32:-32^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_int32:-32~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_message_unset", - expr: "has(TestAllTypes{}.standalone_message)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_message_set", - expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n standalone_message:cel.expr.conformance.proto2.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto2.TestAllTypes.NestedMessage^cel.expr.conformance.proto2.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_enum_unset", - expr: "has(TestAllTypes{}.standalone_enum)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_enum_set", - expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool", - type: "bool", - }, - { - original: { - name: "optional_enum_set_zero", - expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool", - type: "bool", - }, - { - original: { - name: "oneof_unset", - expr: "has(TestAllTypes{}.single_nested_message)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "oneof_other_set", - expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "oneof_set", - expr: "has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_nested_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_nested_message:cel.expr.conformance.proto2.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto2.TestAllTypes.NestedMessage^cel.expr.conformance.proto2.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "oneof_set_default", - expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_enum~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_enum~test-only~~bool", - type: "bool", - }, - ], - }, - { - name: "set_null", - tests: [ - { - original: { - name: "single_message", - expr: "TestAllTypes{single_nested_message: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_nested_message:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_nested_message:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "single_any", - expr: "TestAllTypes{single_any: null}.single_any", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{\n single_any:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_any:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "single_value", - expr: "TestAllTypes{single_value: null}.single_value", - container: "cel.expr.conformance.proto2", - value: { nullValue: null }, - }, - ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "single_duration", - expr: "TestAllTypes{single_duration: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_duration:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_duration:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "single_timestamp", - expr: "TestAllTypes{single_timestamp: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_timestamp:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_timestamp:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "single_scalar", - expr: "TestAllTypes{single_bool: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n single_bool:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:25: expected type of field 'single_bool' is 'bool' but provided type is 'null'\n | TestAllTypes{single_bool: null} == TestAllTypes{}\n | ........................^", - }, - { - original: { - name: "repeated", - expr: "TestAllTypes{repeated_int32: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n repeated_int32:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:28: expected type of field 'repeated_int32' is 'list(int)' but provided type is 'null'\n | TestAllTypes{repeated_int32: null} == TestAllTypes{}\n | ...........................^", - }, - { - original: { - name: "map", - expr: "TestAllTypes{map_string_string: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n map_string_string:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:31: expected type of field 'map_string_string' is 'map(string, string)' but provided type is 'null'\n | TestAllTypes{map_string_string: null} == TestAllTypes{}\n | ..............................^", - }, - { - original: { - name: "list_value", - expr: "TestAllTypes{list_value: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n list_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: expected type of field 'list_value' is 'list(dyn)' but provided type is 'null'\n | TestAllTypes{list_value: null} == TestAllTypes{}\n | .......................^", - }, - { - original: { - name: "single_struct", - expr: "TestAllTypes{single_struct: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto2", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n single_struct:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'null'\n | TestAllTypes{single_struct: null} == TestAllTypes{}\n | ..........................^", - }, - ], - }, - { - name: "quoted_fields", - tests: [ - { - original: { - name: "set_field_with_quoted_name", - expr: "TestAllTypes{`in`: true} == TestAllTypes{}", - container: "cel.expr.conformance.proto2", - value: { boolValue: false }, - }, - error: - "ERROR: set_field_with_quoted_name:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true} == TestAllTypes{}\n | .............^", - }, - { - original: { - name: "get_field_with_quoted_name", - expr: "TestAllTypes{`in`: true}.`in`", - container: "cel.expr.conformance.proto2", - value: { boolValue: true }, - }, - error: - "ERROR: get_field_with_quoted_name:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .............^\nERROR: get_field_with_quoted_name:1:26: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .........................^", - }, - ], - }, - { - name: "extensions_has", - tests: [ - { - original: { - name: "package_scoped_int32", - expr: "has(msg.`cel.expr.conformance.proto2.int32_ext`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.int32_ext]": 42, - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_int32:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.int32_ext`)\n | ........^", - }, - { - original: { - name: "package_scoped_nested_ext", - expr: "has(msg.`cel.expr.conformance.proto2.nested_ext`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.nested_ext]": {}, - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_nested_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.nested_ext`)\n | ........^", - }, - { - original: { - name: "package_scoped_test_all_types_ext", - expr: "has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.test_all_types_ext]": {}, - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_test_all_types_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)\n | ........^", - }, - { - original: { - name: "package_scoped_test_all_types_nested_enum_ext", - expr: "has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.nested_enum_ext]": "BAR", - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_test_all_types_nested_enum_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)\n | ........^", - }, - { - original: { - name: "package_scoped_repeated_test_all_types", - expr: "has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.repeated_test_all_types]": - [{ singleInt64: "1" }, { singleBool: true }], - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_repeated_test_all_types:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)\n | ........^", - }, - { - original: { - name: "message_scoped_int64", - expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]": - "42", - }, - }, - }, - }, - }, - error: - "ERROR: message_scoped_int64:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)\n | ........^", - }, - { - original: { - name: "message_scoped_nested_ext", - expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]": - {}, - }, - }, - }, - }, - }, - error: - "ERROR: message_scoped_nested_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)\n | ........^", - }, - { - original: { - name: "message_scoped_nested_enum_ext", - expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]": - "BAR", - }, - }, - }, - }, - }, - error: - "ERROR: message_scoped_nested_enum_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)\n | ........^", - }, - { - original: { - name: "message_scoped_repeated_test_all_types", - expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]": - [{ singleInt64: "1" }, { singleBool: true }], - }, - }, - }, - }, - }, - error: - "ERROR: message_scoped_repeated_test_all_types:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)\n | ........^", - }, - ], - }, - { - name: "extensions_get", - tests: [ - { - original: { - name: "package_scoped_int32", - expr: "msg.`cel.expr.conformance.proto2.int32_ext` == 42", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.int32_ext]": 42, - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_int32:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.int32_ext` == 42\n | ....^", - }, - { - original: { - name: "package_scoped_nested_ext", - expr: "msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.nested_ext]": {}, - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_nested_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^", - }, - { - original: { - name: "package_scoped_test_all_types_ext", - expr: "msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.test_all_types_ext]": {}, - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_test_all_types_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^", - }, - { - original: { - name: "package_scoped_test_all_types_nested_enum_ext", - expr: "msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.nested_enum_ext]": "BAR", - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_test_all_types_nested_enum_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n | ....^", - }, - { - original: { - name: "package_scoped_repeated_test_all_types", - expr: "msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.repeated_test_all_types]": - [{ singleInt64: "1" }, { singleBool: true }], - }, - }, - }, - }, - }, - error: - "ERROR: package_scoped_repeated_test_all_types:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]\n | ....^", - }, - { - original: { - name: "message_scoped_int64", - expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]": - "42", - }, - }, - }, - }, - }, - error: - "ERROR: message_scoped_int64:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42\n | ....^", - }, - { - original: { - name: "message_scoped_nested_ext", - expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]": - {}, - }, - }, - }, - }, - }, - error: - "ERROR: message_scoped_nested_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^", - }, - { - original: { - name: "message_scoped_nested_enum_ext", - expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]": - "BAR", - }, - }, - }, - }, - }, - error: - "ERROR: message_scoped_nested_enum_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n | ....^", - }, - { - original: { - name: "message_scoped_repeated_test_all_types", - expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]": - [{ singleInt64: "1" }, { singleBool: true }], - }, - }, - }, - }, - }, - error: - "ERROR: message_scoped_repeated_test_all_types:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]\n | ....^", - }, - ], - }, - ], - }, - { - name: "proto2_ext", - suites: [ - { - name: "has_ext", - tests: [ - { - original: { - name: "package_scoped_int32", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.int32_ext)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.int32_ext]": 42, - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.int32_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.int32_ext~test-only~~bool", - type: "bool", - }, - { - original: { - name: "package_scoped_nested_ext", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.nested_ext)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.nested_ext]": {}, - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_ext~test-only~~bool", - type: "bool", - }, - { - original: { - name: "package_scoped_test_all_types_ext", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.test_all_types_ext)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.test_all_types_ext]": {}, - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.test_all_types_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.test_all_types_ext~test-only~~bool", - type: "bool", - }, - { - original: { - name: "package_scoped_test_all_types_nested_enum_ext", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.nested_enum_ext)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.nested_enum_ext]": "BAR", - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_enum_ext~test-only~~bool", - type: "bool", - }, - { - original: { - name: "package_scoped_repeated_test_all_types", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.repeated_test_all_types)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.repeated_test_all_types]": - [{ singleInt64: "1" }, { singleBool: true }], - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.repeated_test_all_types^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.repeated_test_all_types~test-only~~bool", - type: "bool", - }, - { - original: { - name: "message_scoped_int64", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]": - "42", - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.int64_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext~test-only~~bool", - type: "bool", - }, - { - original: { - name: "message_scoped_nested_ext", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]": - {}, - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_nested_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext~test-only~~bool", - type: "bool", - }, - { - original: { - name: "message_scoped_nested_enum_ext", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]": - "BAR", - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext~test-only~~bool", - type: "bool", - }, - { - original: { - name: "message_scoped_repeated_test_all_types", - expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types)", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]": - [{ singleInt64: "1" }, { singleBool: true }], - }, - }, - }, - }, - }, - ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_repeated_test_all_types^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types~test-only~~bool", - type: "bool", - }, - ], - }, - { - name: "get_ext", - tests: [ - { - original: { - name: "package_scoped_int32", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.int32_ext) == 42", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.int32_ext]": 42, - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.int32_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.int32_ext~int,\n 42~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "package_scoped_nested_ext", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.nested_ext]": {}, - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "package_scoped_test_all_types_ext", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.test_all_types_ext) == cel.expr.conformance.proto2.TestAllTypes{}", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.test_all_types_ext]": {}, - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.test_all_types_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.test_all_types_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "package_scoped_test_all_types_nested_enum_ext", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.nested_enum_ext]": "BAR", - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.TestAllTypes^#*expr.Expr_SelectExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_enum_ext~int,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "package_scoped_repeated_test_all_types", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.repeated_test_all_types]": - [{ singleInt64: "1" }, { singleBool: true }], - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.repeated_test_all_types^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.repeated_test_all_types~list(cel.expr.conformance.proto2.TestAllTypes),\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n ]~list(cel.expr.conformance.proto2.TestAllTypes)\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "message_scoped_int64", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext) == 42", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]": - "42", - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.int64_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext~int,\n 42~int\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "message_scoped_nested_ext", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]": - {}, - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_nested_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "message_scoped_nested_enum_ext", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]": - "BAR", - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.TestAllTypes^#*expr.Expr_SelectExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext~int,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "message_scoped_repeated_test_all_types", - expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto2.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", - "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]": - [{ singleInt64: "1" }, { singleBool: true }], - }, - }, - }, - }, - }, - ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_repeated_test_all_types^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types~list(cel.expr.conformance.proto2.TestAllTypes),\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n ]~list(cel.expr.conformance.proto2.TestAllTypes)\n)~bool^equals", - type: "bool", - }, - ], - }, - ], - }, - { - name: "proto3", - suites: [ - { - name: "literal_singular", - tests: [ - { - original: { - name: "int64_nocontainer", - expr: "cel.expr.conformance.proto3.TestAllTypes{single_int64: 17}", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt64: "17", - }, - }, - }, - ast: "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "int32", - expr: "TestAllTypes{single_int32: -34}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: -34, - }, - }, - }, - ast: "TestAllTypes{\n single_int32:-34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32:-34~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "int64", - expr: "TestAllTypes{single_int64: 17}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt64: "17", - }, - }, - }, - ast: "TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "uint32", - expr: "TestAllTypes{single_uint32: 1u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint32: 1, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32:1u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "uint64", - expr: "TestAllTypes{single_uint64: 9999u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint64: "9999", - }, - }, - }, - ast: "TestAllTypes{\n single_uint64:9999u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint64:9999u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "sint32", - expr: "TestAllTypes{single_sint32: -3}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleSint32: -3, - }, - }, - }, - ast: "TestAllTypes{\n single_sint32:-3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_sint32:-3~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "sint64", - expr: "TestAllTypes{single_sint64: 255}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleSint64: "255", - }, - }, - }, - ast: "TestAllTypes{\n single_sint64:255^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_sint64:255~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "fixed32", - expr: "TestAllTypes{single_fixed32: 43u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleFixed32: 43, - }, - }, - }, - ast: "TestAllTypes{\n single_fixed32:43u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_fixed32:43u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "fixed64", - expr: "TestAllTypes{single_fixed64: 1880u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleFixed64: "1880", - }, - }, - }, - ast: "TestAllTypes{\n single_fixed64:1880u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_fixed64:1880u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "sfixed32", - expr: "TestAllTypes{single_sfixed32: -404}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleSfixed32: -404, - }, - }, - }, - ast: "TestAllTypes{\n single_sfixed32:-404^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_sfixed32:-404~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "sfixed64", - expr: "TestAllTypes{single_sfixed64: -1}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleSfixed64: "-1", - }, - }, - }, - ast: "TestAllTypes{\n single_sfixed64:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_sfixed64:-1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "float", - expr: "TestAllTypes{single_float: 3.1416}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleFloat: 3.1416, - }, - }, - }, - ast: "TestAllTypes{\n single_float:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_float:3.1416~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "double", - expr: "TestAllTypes{single_double: 6.022e23}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleDouble: 6.022e23, - }, - }, - }, - ast: "TestAllTypes{\n single_double:6.022e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_double:6.022e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "bool", - expr: "TestAllTypes{single_bool: true}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleBool: true, - }, - }, - }, - ast: "TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_bool:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "string", - expr: "TestAllTypes{single_string: 'foo'}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleString: "foo", - }, - }, - }, - ast: 'TestAllTypes{\n single_string:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_string:"foo"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "bytes", - expr: "TestAllTypes{single_bytes: b'\\377'}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleBytes: "/w==", - }, - }, - }, - ast: 'TestAllTypes{\n single_bytes:b"\\xff"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_bytes:b"\\xff"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - { - name: "literal_wellknown", - tests: [ - { - original: { - name: "any", - expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 1}}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleAny: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 1, - }, - }, - }, - }, - ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:1~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "duration", - expr: "TestAllTypes{single_duration: duration('123s')}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleDuration: "123s", - }, - }, - }, - ast: 'TestAllTypes{\n single_duration:duration(\n "123s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_duration:duration(\n "123s"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "timestamp", - expr: "TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleTimestamp: "2009-02-13T23:31:30Z", - }, - }, - }, - ast: 'TestAllTypes{\n single_timestamp:timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_timestamp:timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "struct", - expr: "TestAllTypes{single_struct: {'one': 1, 'two': 2}}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleStruct: { one: 1, two: 2 }, - }, - }, - }, - ast: 'TestAllTypes{\n single_struct:{\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "two"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n "one"~string:1~int,\n "two"~string:2~int\n }~map(string, int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "value", - expr: "TestAllTypes{single_value: 'foo'}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleValue: "foo", - }, - }, - }, - ast: 'TestAllTypes{\n single_value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:"foo"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "int64_wrapper", - expr: "TestAllTypes{single_int64_wrapper: -321}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt64Wrapper: "-321", - }, - }, - }, - ast: "TestAllTypes{\n single_int64_wrapper:-321^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:-321~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "int32_wrapper", - expr: "TestAllTypes{single_int32_wrapper: -456}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32Wrapper: -456, - }, - }, - }, - ast: "TestAllTypes{\n single_int32_wrapper:-456^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-456~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "double_wrapper", - expr: "TestAllTypes{single_double_wrapper: 2.71828}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleDoubleWrapper: 2.71828, - }, - }, - }, - ast: "TestAllTypes{\n single_double_wrapper:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:2.71828~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "float_wrapper", - expr: "TestAllTypes{single_float_wrapper: 2.99792e8}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleFloatWrapper: 299792000, - }, - }, - }, - ast: "TestAllTypes{\n single_float_wrapper:2.99792e+08^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:2.99792e+08~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "uint64_wrapper", - expr: "TestAllTypes{single_uint64_wrapper: 8675309u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint64Wrapper: "8675309", - }, - }, - }, - ast: "TestAllTypes{\n single_uint64_wrapper:8675309u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:8675309u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "uint32_wrapper", - expr: "TestAllTypes{single_uint32_wrapper: 987u}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleUint32Wrapper: 987, - }, - }, - }, - ast: "TestAllTypes{\n single_uint32_wrapper:987u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:987u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "string_wrapper", - expr: "TestAllTypes{single_string_wrapper: 'hubba'}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleStringWrapper: "hubba", - }, - }, - }, - ast: 'TestAllTypes{\n single_string_wrapper:"hubba"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:"hubba"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "bool_wrapper", - expr: "TestAllTypes{single_bool_wrapper: true}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleBoolWrapper: true, - }, - }, - }, - ast: "TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - { - original: { - name: "bytes_wrapper", - expr: "TestAllTypes{single_bytes_wrapper: b'\\301\\103'}", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleBytesWrapper: "wUM=", - }, - }, - }, - ast: 'TestAllTypes{\n single_bytes_wrapper:b"\\xc1C"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b"\\xc1C"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - { - name: "singular_bind", - tests: [ - { - original: { - name: "int32", - expr: "x.single_int32", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt32: 17, - }, - }, - }, - }, - value: { int64Value: "17" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto3.TestAllTypes^x.single_int32~int", - type: "int", - }, - { - original: { - name: "int64", - expr: "x.single_int64", - typeEnv: [ - { - name: "x", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt64: "-99", - }, - }, - }, - }, - value: { int64Value: "-99" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#", - checkedAst: - "x~cel.expr.conformance.proto3.TestAllTypes^x.single_int64~int", - type: "int", - }, - ], - }, - { - name: "empty_field", - tests: [ - { - original: { - name: "scalar", - expr: "TestAllTypes{}.single_fixed32", - container: "cel.expr.conformance.proto3", - value: { uint64Value: "0" }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_fixed32^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_fixed32~uint", - type: "uint", - }, - { - original: { - name: "nested_message", - expr: "TestAllTypes{}.single_nested_message", - container: "cel.expr.conformance.proto3", - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes.NestedMessage", - }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~cel.expr.conformance.proto3.TestAllTypes.NestedMessage", - type: "cel.expr.conformance.proto3.TestAllTypes.NestedMessage", - }, - { - original: { - name: "nested_message_subfield", - expr: "TestAllTypes{}.single_nested_message.bb", - container: "cel.expr.conformance.proto3", - value: { int64Value: "0" }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#.bb^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~cel.expr.conformance.proto3.TestAllTypes.NestedMessage.bb~int", - type: "int", - }, - { - original: { - name: "wkt", - expr: "TestAllTypes{}.single_int64_wrapper", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper~wrapper(int)", - type: "wrapper(int)", - }, - { - original: { - name: "repeated_scalar", - expr: "TestAllTypes{}.repeated_int64", - container: "cel.expr.conformance.proto3", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int64~list(int)", - type: "list(int)", - }, - { - original: { - name: "repeated_enum", - expr: "TestAllTypes{}.repeated_nested_enum", - container: "cel.expr.conformance.proto3", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)", - type: "list(int)", - }, - { - original: { - name: "repeated_nested", - expr: "TestAllTypes{}.repeated_nested_message", - container: "cel.expr.conformance.proto3", - value: { listValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)", - type: "list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)", - }, - { - original: { - name: "map", - expr: "TestAllTypes{}.map_string_string", - container: "cel.expr.conformance.proto3", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~map(string, string)", - type: "map(string, string)", - }, - ], - }, - { - name: "has", - tests: [ - { - original: { - name: "undefined", - expr: "has(TestAllTypes{}.no_such_field)", - disableCheck: true, - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "no_such_field" }] }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.no_such_field~test-only~^#*expr.Expr_SelectExpr#", - error: - "ERROR: \u003cinput\u003e:1:4: undefined field 'no_such_field'\n | has(TestAllTypes{}.no_such_field)\n | ...^", - }, - { - original: { - name: "repeated_none_implicit", - expr: "has(TestAllTypes{}.repeated_int32)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "repeated_none_explicit", - expr: "has(TestAllTypes{repeated_int32: []}.repeated_int32)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n repeated_int32:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "repeated_one", - expr: "has(TestAllTypes{repeated_int32: [1]}.repeated_int32)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[\n 1~int\n ]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "repeated_many", - expr: "has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "map_none_implicit", - expr: "has(TestAllTypes{}.map_string_string)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool", - type: "bool", - }, - { - original: { - name: "map_none_explicit", - expr: "has(TestAllTypes{map_string_string: {}}.map_string_string)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n map_string_string:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{}~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool", - type: "bool", - }, - { - original: { - name: "map_one_default", - expr: "has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: 'TestAllTypes{\n map_string_string:{\n "MT"^#*expr.Constant_StringValue#:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n "MT"~string:""~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool', - type: "bool", - }, - { - original: { - name: "map_one", - expr: "has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: 'TestAllTypes{\n map_string_string:{\n "one"^#*expr.Constant_StringValue#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n "one"~string:"uno"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool', - type: "bool", - }, - { - original: { - name: "map_many", - expr: "has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: 'TestAllTypes{\n map_string_string:{\n "one"^#*expr.Constant_StringValue#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "two"^#*expr.Constant_StringValue#:"dos"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n "one"~string:"uno"~string,\n "two"~string:"dos"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool', - type: "bool", - }, - { - original: { - name: "single_unset", - expr: "has(TestAllTypes{}.single_int32)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "single_set", - expr: "has(TestAllTypes{single_int32: 16}.single_int32)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_int32:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32:16~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "single_set_to_default", - expr: "has(TestAllTypes{single_int32: 0}.single_int32)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n single_int32:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int32:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool", - type: "bool", - }, - { - original: { - name: "single_message_unset", - expr: "has(TestAllTypes{}.standalone_message)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "single_message_set", - expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{bb: 123}}.standalone_message)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{\n bb:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{\n bb:123~int\n }~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "single_message_set_to_default", - expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "single_enum_unset", - expr: "has(TestAllTypes{}.standalone_enum)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool", - type: "bool", - }, - { - original: { - name: "single_enum_set", - expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool", - type: "bool", - }, - { - original: { - name: "single_enum_set_zero", - expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool", - type: "bool", - }, - { - original: { - name: "oneof_unset", - expr: "has(TestAllTypes{}.single_nested_message)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "oneof_other_set", - expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - ast: "TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "oneof_set", - expr: "has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_nested_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_nested_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool", - type: "bool", - }, - { - original: { - name: "oneof_set_default", - expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_enum~test-only~^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_enum~test-only~~bool", - type: "bool", - }, - ], - }, - { - name: "set_null", - tests: [ - { - original: { - name: "single_message", - expr: "TestAllTypes{single_nested_message: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_nested_message:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_nested_message:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "single_any", - expr: "TestAllTypes{single_any: null}.single_any", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{\n single_any:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "single_value", - expr: "TestAllTypes{single_value: null}.single_value", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "single_duration", - expr: "TestAllTypes{single_duration: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_duration:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_duration:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "single_timestamp", - expr: "TestAllTypes{single_timestamp: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_timestamp:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_timestamp:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "single_scalar", - expr: "TestAllTypes{single_bool: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n single_bool:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:25: expected type of field 'single_bool' is 'bool' but provided type is 'null'\n | TestAllTypes{single_bool: null} == TestAllTypes{}\n | ........................^", - }, - { - original: { - name: "repeated", - expr: "TestAllTypes{repeated_int32: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n repeated_int32:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:28: expected type of field 'repeated_int32' is 'list(int)' but provided type is 'null'\n | TestAllTypes{repeated_int32: null} == TestAllTypes{}\n | ...........................^", - }, - { - original: { - name: "map", - expr: "TestAllTypes{map_string_string: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n map_string_string:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:31: expected type of field 'map_string_string' is 'map(string, string)' but provided type is 'null'\n | TestAllTypes{map_string_string: null} == TestAllTypes{}\n | ..............................^", - }, - { - original: { - name: "list_value", - expr: "TestAllTypes{list_value: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n list_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:24: expected type of field 'list_value' is 'list(dyn)' but provided type is 'null'\n | TestAllTypes{list_value: null} == TestAllTypes{}\n | .......................^", - }, - { - original: { - name: "single_struct", - expr: "TestAllTypes{single_struct: null} == TestAllTypes{}", - disableCheck: true, - container: "cel.expr.conformance.proto3", - evalError: { errors: [{ message: "unsupported field type" }] }, - }, - ast: "_==_(\n TestAllTypes{\n single_struct:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - error: - "ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'null'\n | TestAllTypes{single_struct: null} == TestAllTypes{}\n | ..........................^", - }, - ], - }, - { - name: "quoted_fields", - tests: [ - { - original: { - name: "set_field", - expr: "TestAllTypes{`in`: true} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: false }, - }, - error: - "ERROR: set_field:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true} == TestAllTypes{}\n | .............^", - }, - { - original: { - name: "get_field", - expr: "TestAllTypes{`in`: true}.`in`", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - error: - "ERROR: get_field:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .............^\nERROR: get_field:1:26: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .........................^", - }, - ], - }, - ], - }, - { - name: "string", - suites: [ - { - name: "size", - tests: [ - { - original: { - name: "empty", - expr: "size('')", - value: { int64Value: "0" }, - }, - ast: 'size(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'size(\n ""~string\n)~int^size_string', - type: "int", - }, - { - original: { - name: "one_ascii", - expr: "size('A')", - value: { int64Value: "1" }, - }, - ast: 'size(\n "A"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'size(\n "A"~string\n)~int^size_string', - type: "int", - }, - { - original: { - name: "one_unicode", - expr: "size('ÿ')", - value: { int64Value: "1" }, - }, - ast: 'size(\n "ÿ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'size(\n "ÿ"~string\n)~int^size_string', - type: "int", - }, - { - original: { - name: "ascii", - expr: "size('four')", - value: { int64Value: "4" }, - }, - ast: 'size(\n "four"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'size(\n "four"~string\n)~int^size_string', - type: "int", - }, - { - original: { - name: "unicode", - expr: "size('πέντε')", - value: { int64Value: "5" }, - }, - ast: 'size(\n "πέντε"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'size(\n "πέντε"~string\n)~int^size_string', - type: "int", - }, - { - original: { - name: "bytes_empty", - expr: "size(b'')", - value: { int64Value: "0" }, - }, - ast: 'size(\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'size(\n b""~bytes\n)~int^size_bytes', - type: "int", - }, - { - original: { - name: "bytes", - expr: "size(b'abc')", - value: { int64Value: "3" }, - }, - ast: 'size(\n b"abc"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'size(\n b"abc"~bytes\n)~int^size_bytes', - type: "int", - }, - ], - }, - { - name: "starts_with", - tests: [ - { - original: { - name: "basic_true", - expr: "'foobar'.startsWith('foo')", - value: { boolValue: true }, - }, - ast: '"foobar"^#*expr.Constant_StringValue#.startsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"foobar"~string.startsWith(\n "foo"~string\n)~bool^starts_with_string', - type: "bool", - }, - { - original: { - name: "basic_false", - expr: "'foobar'.startsWith('bar')", - value: { boolValue: false }, - }, - ast: '"foobar"^#*expr.Constant_StringValue#.startsWith(\n "bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"foobar"~string.startsWith(\n "bar"~string\n)~bool^starts_with_string', - type: "bool", - }, - { - original: { - name: "empty_target", - expr: "''.startsWith('foo')", - value: { boolValue: false }, - }, - ast: '""^#*expr.Constant_StringValue#.startsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '""~string.startsWith(\n "foo"~string\n)~bool^starts_with_string', - type: "bool", - }, - { - original: { - name: "empty_arg", - expr: "'foobar'.startsWith('')", - value: { boolValue: true }, - }, - ast: '"foobar"^#*expr.Constant_StringValue#.startsWith(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"foobar"~string.startsWith(\n ""~string\n)~bool^starts_with_string', - type: "bool", - }, - { - original: { - name: "empty_empty", - expr: "''.startsWith('')", - value: { boolValue: true }, - }, - ast: '""^#*expr.Constant_StringValue#.startsWith(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '""~string.startsWith(\n ""~string\n)~bool^starts_with_string', - type: "bool", - }, - { - original: { - name: "unicode", - expr: "'завтра'.startsWith('за')", - value: { boolValue: true }, - }, - ast: '"завтра"^#*expr.Constant_StringValue#.startsWith(\n "за"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"завтра"~string.startsWith(\n "за"~string\n)~bool^starts_with_string', - type: "bool", - }, - { - original: { - name: "unicode_smp", - expr: "'🐱😀😛'.startsWith('🐱')", - value: { boolValue: true }, - }, - ast: '"🐱😀😛"^#*expr.Constant_StringValue#.startsWith(\n "🐱"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"🐱😀😛"~string.startsWith(\n "🐱"~string\n)~bool^starts_with_string', - type: "bool", - }, - ], - }, - { - name: "ends_with", - tests: [ - { - original: { - name: "basic_true", - expr: "'foobar'.endsWith('bar')", - value: { boolValue: true }, - }, - ast: '"foobar"^#*expr.Constant_StringValue#.endsWith(\n "bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"foobar"~string.endsWith(\n "bar"~string\n)~bool^ends_with_string', - type: "bool", - }, - { - original: { - name: "basic_false", - expr: "'foobar'.endsWith('foo')", - value: { boolValue: false }, - }, - ast: '"foobar"^#*expr.Constant_StringValue#.endsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"foobar"~string.endsWith(\n "foo"~string\n)~bool^ends_with_string', - type: "bool", - }, - { - original: { - name: "empty_target", - expr: "''.endsWith('foo')", - value: { boolValue: false }, - }, - ast: '""^#*expr.Constant_StringValue#.endsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '""~string.endsWith(\n "foo"~string\n)~bool^ends_with_string', - type: "bool", - }, - { - original: { - name: "empty_arg", - expr: "'foobar'.endsWith('')", - value: { boolValue: true }, - }, - ast: '"foobar"^#*expr.Constant_StringValue#.endsWith(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"foobar"~string.endsWith(\n ""~string\n)~bool^ends_with_string', - type: "bool", - }, - { - original: { - name: "empty_empty", - expr: "''.endsWith('')", - value: { boolValue: true }, - }, - ast: '""^#*expr.Constant_StringValue#.endsWith(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '""~string.endsWith(\n ""~string\n)~bool^ends_with_string', - type: "bool", - }, - { - original: { - name: "unicode", - expr: "'forté'.endsWith('té')", - value: { boolValue: true }, - }, - ast: '"forté"^#*expr.Constant_StringValue#.endsWith(\n "té"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"forté"~string.endsWith(\n "té"~string\n)~bool^ends_with_string', - type: "bool", - }, - { - original: { - name: "unicode_smp", - expr: "'🐱😀😛'.endsWith('😛')", - value: { boolValue: true }, - }, - ast: '"🐱😀😛"^#*expr.Constant_StringValue#.endsWith(\n "😛"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"🐱😀😛"~string.endsWith(\n "😛"~string\n)~bool^ends_with_string', - type: "bool", - }, - ], - }, - { - name: "matches", - tests: [ - { - original: { - name: "basic", - expr: "'hubba'.matches('ubb')", - value: { boolValue: true }, - }, - ast: '"hubba"^#*expr.Constant_StringValue#.matches(\n "ubb"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"hubba"~string.matches(\n "ubb"~string\n)~bool^matches_string', - type: "bool", - }, - { - original: { - name: "empty_target", - expr: "''.matches('foo|bar')", - value: { boolValue: false }, - }, - ast: '""^#*expr.Constant_StringValue#.matches(\n "foo|bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '""~string.matches(\n "foo|bar"~string\n)~bool^matches_string', - type: "bool", - }, - { - original: { - name: "empty_arg", - expr: "'cows'.matches('')", - value: { boolValue: true }, - }, - ast: '"cows"^#*expr.Constant_StringValue#.matches(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"cows"~string.matches(\n ""~string\n)~bool^matches_string', - type: "bool", - }, - { - original: { - name: "empty_empty", - expr: "''.matches('')", - value: { boolValue: true }, - }, - ast: '""^#*expr.Constant_StringValue#.matches(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '""~string.matches(\n ""~string\n)~bool^matches_string', - type: "bool", - }, - { - original: { - name: "re_concat", - expr: "'abcd'.matches('bc')", - value: { boolValue: true }, - }, - ast: '"abcd"^#*expr.Constant_StringValue#.matches(\n "bc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"abcd"~string.matches(\n "bc"~string\n)~bool^matches_string', - type: "bool", - }, - { - original: { - name: "re_alt", - expr: "'grey'.matches('gr(a|e)y')", - value: { boolValue: true }, - }, - ast: '"grey"^#*expr.Constant_StringValue#.matches(\n "gr(a|e)y"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"grey"~string.matches(\n "gr(a|e)y"~string\n)~bool^matches_string', - type: "bool", - }, - { - original: { - name: "re_rep", - expr: "'banana'.matches('ba(na)*')", - value: { boolValue: true }, - }, - ast: '"banana"^#*expr.Constant_StringValue#.matches(\n "ba(na)*"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"banana"~string.matches(\n "ba(na)*"~string\n)~bool^matches_string', - type: "bool", - }, - { - original: { - name: "unicode", - expr: "'mañana'.matches('a+ñ+a+')", - value: { boolValue: true }, - }, - ast: '"mañana"^#*expr.Constant_StringValue#.matches(\n "a+ñ+a+"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"mañana"~string.matches(\n "a+ñ+a+"~string\n)~bool^matches_string', - type: "bool", - }, - { - original: { - name: "unicode_smp", - expr: "'🐱😀😀'.matches('(a|😀){2}')", - value: { boolValue: true }, - }, - ast: '"🐱😀😀"^#*expr.Constant_StringValue#.matches(\n "(a|😀){2}"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"🐱😀😀"~string.matches(\n "(a|😀){2}"~string\n)~bool^matches_string', - type: "bool", - }, - ], - }, - { - name: "concatenation", - tests: [ - { - original: { - name: "concat_true", - expr: "'he' + 'llo'", - value: { stringValue: "hello" }, - }, - ast: '_+_(\n "he"^#*expr.Constant_StringValue#,\n "llo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n "he"~string,\n "llo"~string\n)~string^add_string', - type: "string", - }, - { - original: { - name: "concat_with_spaces", - expr: "'hello' + ' ' == 'hello'", - value: { boolValue: false }, - }, - ast: '_==_(\n _+_(\n "hello"^#*expr.Constant_StringValue#,\n " "^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "hello"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _+_(\n "hello"~string,\n " "~string\n )~string^add_string,\n "hello"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "concat_empty_string_beginning", - expr: "'' + 'abc'", - value: { stringValue: "abc" }, - }, - ast: '_+_(\n ""^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n ""~string,\n "abc"~string\n)~string^add_string', - type: "string", - }, - { - original: { - name: "concat_empty_string_end", - expr: "'abc' + ''", - value: { stringValue: "abc" }, - }, - ast: '_+_(\n "abc"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n "abc"~string,\n ""~string\n)~string^add_string', - type: "string", - }, - { - original: { - name: "concat_empty_with_empty", - expr: "'' + ''", - value: { stringValue: "" }, - }, - ast: '_+_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n ""~string,\n ""~string\n)~string^add_string', - type: "string", - }, - { - original: { - name: "unicode_unicode", - expr: "'¢' + 'ÿ' + 'Ȁ'", - value: { stringValue: "¢ÿȀ" }, - }, - ast: '_+_(\n _+_(\n "¢"^#*expr.Constant_StringValue#,\n "ÿ"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "Ȁ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n _+_(\n "¢"~string,\n "ÿ"~string\n )~string^add_string,\n "Ȁ"~string\n)~string^add_string', - type: "string", - }, - { - original: { - name: "ascii_unicode", - expr: "'r' + 'ô' + 'le'", - value: { stringValue: "rôle" }, - }, - ast: '_+_(\n _+_(\n "r"^#*expr.Constant_StringValue#,\n "ô"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "le"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n _+_(\n "r"~string,\n "ô"~string\n )~string^add_string,\n "le"~string\n)~string^add_string', - type: "string", - }, - { - original: { - name: "ascii_unicode_unicode_smp", - expr: "'a' + 'ÿ' + '🐱'", - value: { stringValue: "aÿ🐱" }, - }, - ast: '_+_(\n _+_(\n "a"^#*expr.Constant_StringValue#,\n "ÿ"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "🐱"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n _+_(\n "a"~string,\n "ÿ"~string\n )~string^add_string,\n "🐱"~string\n)~string^add_string', - type: "string", - }, - { - original: { - name: "empty_unicode", - expr: "'' + 'Ω' + ''", - value: { stringValue: "Ω" }, - }, - ast: '_+_(\n _+_(\n ""^#*expr.Constant_StringValue#,\n "Ω"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n _+_(\n ""~string,\n "Ω"~string\n )~string^add_string,\n ""~string\n)~string^add_string', - type: "string", - }, - ], - }, - { - name: "contains", - tests: [ - { - original: { - name: "contains_true", - expr: "'hello'.contains('he')", - value: { boolValue: true }, - }, - ast: '"hello"^#*expr.Constant_StringValue#.contains(\n "he"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"hello"~string.contains(\n "he"~string\n)~bool^contains_string', - type: "bool", - }, - { - original: { - name: "contains_empty", - expr: "'hello'.contains('')", - value: { boolValue: true }, - }, - ast: '"hello"^#*expr.Constant_StringValue#.contains(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"hello"~string.contains(\n ""~string\n)~bool^contains_string', - type: "bool", - }, - { - original: { - name: "contains_false", - expr: "'hello'.contains('ol')", - value: { boolValue: false }, - }, - ast: '"hello"^#*expr.Constant_StringValue#.contains(\n "ol"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"hello"~string.contains(\n "ol"~string\n)~bool^contains_string', - type: "bool", - }, - { - original: { - name: "contains_multiple", - expr: "'abababc'.contains('ababc')", - value: { boolValue: true }, - }, - ast: '"abababc"^#*expr.Constant_StringValue#.contains(\n "ababc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"abababc"~string.contains(\n "ababc"~string\n)~bool^contains_string', - type: "bool", - }, - { - original: { - name: "contains_unicode", - expr: "'Straße'.contains('aß')", - value: { boolValue: true }, - }, - ast: '"Straße"^#*expr.Constant_StringValue#.contains(\n "aß"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"Straße"~string.contains(\n "aß"~string\n)~bool^contains_string', - type: "bool", - }, - { - original: { - name: "contains_unicode_smp", - expr: "'🐱😀😁'.contains('😀')", - value: { boolValue: true }, - }, - ast: '"🐱😀😁"^#*expr.Constant_StringValue#.contains(\n "😀"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"🐱😀😁"~string.contains(\n "😀"~string\n)~bool^contains_string', - type: "bool", - }, - { - original: { - name: "empty_contains", - expr: "''.contains('something')", - value: { boolValue: false }, - }, - ast: '""^#*expr.Constant_StringValue#.contains(\n "something"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '""~string.contains(\n "something"~string\n)~bool^contains_string', - type: "bool", - }, - { - original: { - name: "empty_empty", - expr: "''.contains('')", - value: { boolValue: true }, - }, - ast: '""^#*expr.Constant_StringValue#.contains(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '""~string.contains(\n ""~string\n)~bool^contains_string', - type: "bool", - }, - ], - }, - { - name: "bytes_concat", - tests: [ - { - original: { - name: "concat", - expr: "b'abc' + b'def'", - value: { bytesValue: "YWJjZGVm" }, - }, - ast: '_+_(\n b"abc"^#*expr.Constant_BytesValue#,\n b"def"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n b"abc"~bytes,\n b"def"~bytes\n)~bytes^add_bytes', - type: "bytes", - }, - { - original: { - name: "left_unit", - expr: "b'' + b'\\xffoo'", - value: { bytesValue: "/29v" }, - }, - ast: '_+_(\n b""^#*expr.Constant_BytesValue#,\n b"\\xffoo"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n b""~bytes,\n b"\\xffoo"~bytes\n)~bytes^add_bytes', - type: "bytes", - }, - { - original: { - name: "right_unit", - expr: "b'zxy' + b''", - value: { bytesValue: "enh5" }, - }, - ast: '_+_(\n b"zxy"^#*expr.Constant_BytesValue#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n b"zxy"~bytes,\n b""~bytes\n)~bytes^add_bytes', - type: "bytes", - }, - { - original: { - name: "empty_empty", - expr: "b'' + b''", - value: { bytesValue: "" }, - }, - ast: '_+_(\n b""^#*expr.Constant_BytesValue#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: '_+_(\n b""~bytes,\n b""~bytes\n)~bytes^add_bytes', - type: "bytes", - }, - ], - }, - ], - }, - { - name: "string_ext", - suites: [ - { - name: "char_at", - tests: [ - { - original: { - name: "middle_index", - expr: "'tacocat'.charAt(3)", - value: { stringValue: "o" }, - }, - ast: '"tacocat"^#*expr.Constant_StringValue#.charAt(\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"tacocat"~string.charAt(\n 3~int\n)~string^string_char_at_int', - type: "string", - }, - { - original: { - name: "end_index", - expr: "'tacocat'.charAt(7)", - value: { stringValue: "" }, - }, - ast: '"tacocat"^#*expr.Constant_StringValue#.charAt(\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"tacocat"~string.charAt(\n 7~int\n)~string^string_char_at_int', - type: "string", - }, - { - original: { - name: "multiple", - expr: "'©αT'.charAt(0) == '©' \u0026\u0026 '©αT'.charAt(1) == 'α' \u0026\u0026 '©αT'.charAt(2) == 'T'", - }, - ast: '_\u0026\u0026_(\n _\u0026\u0026_(\n _==_(\n "©αT"^#*expr.Constant_StringValue#.charAt(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "©"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n "©αT"^#*expr.Constant_StringValue#.charAt(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "α"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _==_(\n "©αT"^#*expr.Constant_StringValue#.charAt(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "T"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u0026\u0026_(\n _\u0026\u0026_(\n _==_(\n "©αT"~string.charAt(\n 0~int\n )~string^string_char_at_int,\n "©"~string\n )~bool^equals,\n _==_(\n "©αT"~string.charAt(\n 1~int\n )~string^string_char_at_int,\n "α"~string\n )~bool^equals\n )~bool^logical_and,\n _==_(\n "©αT"~string.charAt(\n 2~int\n )~string^string_char_at_int,\n "T"~string\n )~bool^equals\n)~bool^logical_and', - type: "bool", - }, - ], - }, - { - name: "index_of", - tests: [ - { - original: { - name: "empty_index", - expr: "'tacocat'.indexOf('')", - value: { int64Value: "0" }, - }, - ast: '"tacocat"^#*expr.Constant_StringValue#.indexOf(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"tacocat"~string.indexOf(\n ""~string\n)~int^string_index_of_string', - type: "int", - }, - { - original: { - name: "string_index", - expr: "'tacocat'.indexOf('ac')", - value: { int64Value: "1" }, - }, - ast: '"tacocat"^#*expr.Constant_StringValue#.indexOf(\n "ac"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"tacocat"~string.indexOf(\n "ac"~string\n)~int^string_index_of_string', - type: "int", - }, - { - original: { - name: "nomatch", - expr: "'tacocat'.indexOf('none') == -1", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n "none"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.indexOf(\n "none"~string\n )~int^string_index_of_string,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "empty_index", - expr: "'tacocat'.indexOf('', 3) == 3", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n ""^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.indexOf(\n ""~string,\n 3~int\n )~int^string_index_of_string_int,\n 3~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "char_index", - expr: "'tacocat'.indexOf('a', 3) == 5", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n "a"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.indexOf(\n "a"~string,\n 3~int\n )~int^string_index_of_string_int,\n 5~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_index", - expr: "'tacocat'.indexOf('at', 3) == 5", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n "at"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.indexOf(\n "at"~string,\n 3~int\n )~int^string_index_of_string_int,\n 5~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_char", - expr: "'ta©o©αT'.indexOf('©') == 2", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.indexOf(\n "©"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.indexOf(\n "©"~string\n )~int^string_index_of_string,\n 2~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_char_index", - expr: "'ta©o©αT'.indexOf('©', 3) == 4", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.indexOf(\n "©"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.indexOf(\n "©"~string,\n 3~int\n )~int^string_index_of_string_int,\n 4~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_string_index", - expr: "'ta©o©αT'.indexOf('©αT', 3) == 4", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.indexOf(\n "©αT"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.indexOf(\n "©αT"~string,\n 3~int\n )~int^string_index_of_string_int,\n 4~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_string_nomatch_index", - expr: "'ta©o©αT'.indexOf('©α', 5) == -1", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.indexOf(\n "©α"^#*expr.Constant_StringValue#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.indexOf(\n "©α"~string,\n 5~int\n )~int^string_index_of_string_int,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { name: "char_index", expr: "'ijk'.indexOf('k') == 2" }, - ast: '_==_(\n "ijk"^#*expr.Constant_StringValue#.indexOf(\n "k"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ijk"~string.indexOf(\n "k"~string\n )~int^string_index_of_string,\n 2~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_with_space_fullmatch", - expr: "'hello wello'.indexOf('hello wello') == 0", - }, - ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.indexOf(\n "hello wello"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello wello"~string.indexOf(\n "hello wello"~string\n )~int^string_index_of_string,\n 0~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_with_space_index", - expr: "'hello wello'.indexOf('ello', 6) == 7", - }, - ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.indexOf(\n "ello"^#*expr.Constant_StringValue#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello wello"~string.indexOf(\n "ello"~string,\n 6~int\n )~int^string_index_of_string_int,\n 7~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_nomatch_index", - expr: "'hello wello'.indexOf('elbo room!!') == -1", - }, - ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.indexOf(\n "elbo room!!"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello wello"~string.indexOf(\n "elbo room!!"~string\n )~int^string_index_of_string,\n -1~int\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "last_index_of", - tests: [ - { - original: { - name: "empty_string", - expr: "''.lastIndexOf('@@') == -1", - }, - ast: '_==_(\n ""^#*expr.Constant_StringValue#.lastIndexOf(\n "@@"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n ""~string.lastIndexOf(\n "@@"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "empty_argument", - expr: "'tacocat'.lastIndexOf('') == 7", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.lastIndexOf(\n ""~string\n )~int^string_last_index_of_string,\n 7~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string", - expr: "'tacocat'.lastIndexOf('at') == 5", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "at"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.lastIndexOf(\n "at"~string\n )~int^string_last_index_of_string,\n 5~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_nomatch", - expr: "'tacocat'.lastIndexOf('none') == -1", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "none"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.lastIndexOf(\n "none"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "empty_index", - expr: "'tacocat'.lastIndexOf('', 3) == 3", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n ""^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.lastIndexOf(\n ""~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 3~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "char_index", - expr: "'tacocat'.lastIndexOf('a', 3) == 1", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "a"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.lastIndexOf(\n "a"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_char", - expr: "'ta©o©αT'.lastIndexOf('©') == 4", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.lastIndexOf(\n "©"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.lastIndexOf(\n "©"~string\n )~int^string_last_index_of_string,\n 4~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_char_index", - expr: "'ta©o©αT'.lastIndexOf('©', 3) == 2", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.lastIndexOf(\n "©"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.lastIndexOf(\n "©"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 2~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_string_index", - expr: "'ta©o©αT'.lastIndexOf('©α', 4) == 4", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.lastIndexOf(\n "©α"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.lastIndexOf(\n "©α"~string,\n 4~int\n )~int^string_last_index_of_string_int,\n 4~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_with_space_string_index", - expr: "'hello wello'.lastIndexOf('ello', 6) == 1", - }, - ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.lastIndexOf(\n "ello"^#*expr.Constant_StringValue#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello wello"~string.lastIndexOf(\n "ello"~string,\n 6~int\n )~int^string_last_index_of_string_int,\n 1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_with_space_string_nomatch", - expr: "'hello wello'.lastIndexOf('low') == -1", - }, - ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.lastIndexOf(\n "low"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello wello"~string.lastIndexOf(\n "low"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_with_space_string_with_space_nomatch", - expr: "'hello wello'.lastIndexOf('elbo room!!') == -1", - }, - ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.lastIndexOf(\n "elbo room!!"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello wello"~string.lastIndexOf(\n "elbo room!!"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "string_with_space_fullmatch", - expr: "'hello wello'.lastIndexOf('hello wello') == 0", - }, - ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.lastIndexOf(\n "hello wello"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello wello"~string.lastIndexOf(\n "hello wello"~string\n )~int^string_last_index_of_string,\n 0~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "repeated_string", - expr: "'bananananana'.lastIndexOf('nana', 7) == 6", - }, - ast: '_==_(\n "bananananana"^#*expr.Constant_StringValue#.lastIndexOf(\n "nana"^#*expr.Constant_StringValue#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 6^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "bananananana"~string.lastIndexOf(\n "nana"~string,\n 7~int\n )~int^string_last_index_of_string_int,\n 6~int\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "ascii_casing", - tests: [ - { - original: { - name: "lowerascii", - expr: "'TacoCat'.lowerAscii() == 'tacocat'", - }, - ast: '_==_(\n "TacoCat"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n "tacocat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "TacoCat"~string.lowerAscii()~string^string_lower_ascii,\n "tacocat"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "lowerascii_unicode", - expr: "'TacoCÆt'.lowerAscii() == 'tacocÆt'", - }, - ast: '_==_(\n "TacoCÆt"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n "tacocÆt"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "TacoCÆt"~string.lowerAscii()~string^string_lower_ascii,\n "tacocÆt"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "lowerascii_unicode_with_space", - expr: "'TacoCÆt Xii'.lowerAscii() == 'tacocÆt xii'", - }, - ast: '_==_(\n "TacoCÆt Xii"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n "tacocÆt xii"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "TacoCÆt Xii"~string.lowerAscii()~string^string_lower_ascii,\n "tacocÆt xii"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "upperascii", - expr: "'tacoCat'.upperAscii() == 'TACOCAT'", - }, - ast: '_==_(\n "tacoCat"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n "TACOCAT"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacoCat"~string.upperAscii()~string^string_upper_ascii,\n "TACOCAT"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "upperascii_unicode", - expr: "'tacoCαt'.upperAscii() == 'TACOCαT'", - }, - ast: '_==_(\n "tacoCαt"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n "TACOCαT"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacoCαt"~string.upperAscii()~string^string_upper_ascii,\n "TACOCαT"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "upperascii_unicode_with_space", - expr: "'TacoCÆt Xii'.upperAscii() == 'TACOCÆT XII'", - }, - ast: '_==_(\n "TacoCÆt Xii"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n "TACOCÆT XII"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "TacoCÆt Xii"~string.upperAscii()~string^string_upper_ascii,\n "TACOCÆT XII"~string\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "replace", - tests: [ - { - original: { - name: "no_placeholder", - expr: "'12 days 12 hours'.replace('{0}', '2') == '12 days 12 hours'", - }, - ast: '_==_(\n "12 days 12 hours"^#*expr.Constant_StringValue#.replace(\n "{0}"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "12 days 12 hours"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "12 days 12 hours"~string.replace(\n "{0}"~string,\n "2"~string\n )~string^string_replace_string_string,\n "12 days 12 hours"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "basic", - expr: "'{0} days {0} hours'.replace('{0}', '2') == '2 days 2 hours'", - }, - ast: '_==_(\n "{0} days {0} hours"^#*expr.Constant_StringValue#.replace(\n "{0}"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "2 days 2 hours"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "{0} days {0} hours"~string.replace(\n "{0}"~string,\n "2"~string\n )~string^string_replace_string_string,\n "2 days 2 hours"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "chained", - expr: "'{0} days {0} hours'.replace('{0}', '2', 1).replace('{0}', '23') == '2 days 23 hours'", - }, - ast: '_==_(\n "{0} days {0} hours"^#*expr.Constant_StringValue#.replace(\n "{0}"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.replace(\n "{0}"^#*expr.Constant_StringValue#,\n "23"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "2 days 23 hours"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "{0} days {0} hours"~string.replace(\n "{0}"~string,\n "2"~string,\n 1~int\n )~string^string_replace_string_string_int.replace(\n "{0}"~string,\n "23"~string\n )~string^string_replace_string_string,\n "2 days 23 hours"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode", - expr: "'1 ©αT taco'.replace('αT', 'o©α') == '1 ©o©α taco'", - }, - ast: '_==_(\n "1 ©αT taco"^#*expr.Constant_StringValue#.replace(\n "αT"^#*expr.Constant_StringValue#,\n "o©α"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "1 ©o©α taco"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "1 ©αT taco"~string.replace(\n "αT"~string,\n "o©α"~string\n )~string^string_replace_string_string,\n "1 ©o©α taco"~string\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "split", - tests: [ - { - original: { - name: "empty", - expr: "'hello world'.split(' ') == ['hello', 'world']", - }, - ast: '_==_(\n "hello world"^#*expr.Constant_StringValue#.split(\n " "^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "hello"^#*expr.Constant_StringValue#,\n "world"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello world"~string.split(\n " "~string\n )~list(string)^string_split_string,\n [\n "hello"~string,\n "world"~string\n ]~list(string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "zero_limit", - expr: "'hello world events!'.split(' ', 0) == []", - }, - ast: '_==_(\n "hello world events!"^#*expr.Constant_StringValue#.split(\n " "^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello world events!"~string.split(\n " "~string,\n 0~int\n )~list(string)^string_split_string_int,\n []~list(string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "one_limit", - expr: "'hello world events!'.split(' ', 1) == ['hello world events!']", - }, - ast: '_==_(\n "hello world events!"^#*expr.Constant_StringValue#.split(\n " "^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "hello world events!"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "hello world events!"~string.split(\n " "~string,\n 1~int\n )~list(string)^string_split_string_int,\n [\n "hello world events!"~string\n ]~list(string)\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_negative_limit", - expr: "'o©o©o©o'.split('©', -1) == ['o', 'o', 'o', 'o']", - }, - ast: '_==_(\n "o©o©o©o"^#*expr.Constant_StringValue#.split(\n "©"^#*expr.Constant_StringValue#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "o"^#*expr.Constant_StringValue#,\n "o"^#*expr.Constant_StringValue#,\n "o"^#*expr.Constant_StringValue#,\n "o"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "o©o©o©o"~string.split(\n "©"~string,\n -1~int\n )~list(string)^string_split_string_int,\n [\n "o"~string,\n "o"~string,\n "o"~string,\n "o"~string\n ]~list(string)\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "substring", - tests: [ - { - original: { - name: "start", - expr: "'tacocat'.substring(4) == 'cat'", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n 4~int\n )~string^string_substring_int,\n "cat"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "start_with_max_length", - expr: "'tacocat'.substring(7) == ''", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n 7~int\n )~string^string_substring_int,\n ""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "start_and_end", - expr: "'tacocat'.substring(0, 4) == 'taco'", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 0^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "taco"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n 0~int,\n 4~int\n )~string^string_substring_int_int,\n "taco"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "start_and_end_equal_value", - expr: "'tacocat'.substring(4, 4) == ''", - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n 4~int,\n 4~int\n )~string^string_substring_int_int,\n ""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_start_and_end", - expr: "'ta©o©αT'.substring(2, 6) == '©o©α'", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.substring(\n 2^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "©o©α"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.substring(\n 2~int,\n 6~int\n )~string^string_substring_int_int,\n "©o©α"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_start_and_end_equal_value", - expr: "'ta©o©αT'.substring(7, 7) == ''", - }, - ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.substring(\n 7^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "ta©o©αT"~string.substring(\n 7~int,\n 7~int\n )~string^string_substring_int_int,\n ""~string\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "trim", - tests: [ - { - original: { - name: "blank_spaces_escaped_chars", - expr: "' \\f\\n\\r\\t\\vtext '.trim() == 'text'", - }, - ast: '_==_(\n " \\f\\n\\r\\t\\vtext "^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "text"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n " \\f\\n\\r\\t\\vtext "~string.trim()~string^string_trim,\n "text"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_space_chars_1", - expr: "'\\u0085\\u00a0\\u1680text'.trim() == 'text'", - }, - ast: '_==_(\n "\\u0085\\u00a0\\u1680text"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "text"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "\\u0085\\u00a0\\u1680text"~string.trim()~string^string_trim,\n "text"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_space_chars_2", - expr: "'text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009'.trim() == 'text'", - }, - ast: '_==_(\n "text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "text"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009"~string.trim()~string^string_trim,\n "text"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_space_chars_3", - expr: "'\\u200atext\\u2028\\u2029\\u202F\\u205F\\u3000'.trim() == 'text'", - }, - ast: '_==_(\n "\\u200atext\\u2028\\u2029\\u202f\\u205f\\u3000"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "text"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "\\u200atext\\u2028\\u2029\\u202f\\u205f\\u3000"~string.trim()~string^string_trim,\n "text"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_no_trim", - expr: "'\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'.trim() == '\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'", - }, - ast: '_==_(\n "\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff"~string.trim()~string^string_trim,\n "\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff"~string\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "join", - tests: [ - { - original: { - name: "empty_separator", - expr: "['x', 'y'].join() == 'xy'", - }, - ast: '_==_(\n [\n "x"^#*expr.Constant_StringValue#,\n "y"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#.join()^#*expr.Expr_CallExpr#,\n "xy"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n [\n "x"~string,\n "y"~string\n ]~list(string).join()~string^list_join,\n "xy"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "dash_separator", - expr: "['x', 'y'].join('-') == 'x-y'", - }, - ast: '_==_(\n [\n "x"^#*expr.Constant_StringValue#,\n "y"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#.join(\n "-"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "x-y"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n [\n "x"~string,\n "y"~string\n ]~list(string).join(\n "-"~string\n )~string^list_join_string,\n "x-y"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "empty_string_empty_separator", - expr: "[].join() == ''", - }, - ast: '_==_(\n []^#*expr.Expr_ListExpr#.join()^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n []~list(string).join()~string^list_join,\n ""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "empty_string_dash_separator", - expr: "[].join('-') == ''", - }, - ast: '_==_(\n []^#*expr.Expr_ListExpr#.join(\n "-"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n []~list(string).join(\n "-"~string\n )~string^list_join_string,\n ""~string\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "quote", - tests: [ - { - original: { - name: "multiline", - expr: 'strings.quote("first\\nsecond") == "\\"first\\\\nsecond\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "first\\nsecond"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"first\\\\nsecond\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "first\\nsecond"~string\n )~string^strings_quote,\n "\\"first\\\\nsecond\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "escaped", - expr: 'strings.quote("bell\\a") == "\\"bell\\\\a\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "bell\\a"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"bell\\\\a\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "bell\\a"~string\n )~string^strings_quote,\n "\\"bell\\\\a\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "backspace", - expr: 'strings.quote("\\bbackspace") == "\\"\\\\bbackspace\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "\\bbackspace"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"\\\\bbackspace\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "\\bbackspace"~string\n )~string^strings_quote,\n "\\"\\\\bbackspace\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "form_feed", - expr: 'strings.quote("\\fform feed") == "\\"\\\\fform feed\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "\\fform feed"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"\\\\fform feed\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "\\fform feed"~string\n )~string^strings_quote,\n "\\"\\\\fform feed\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "carriage_return", - expr: 'strings.quote("carriage \\r return") == "\\"carriage \\\\r return\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "carriage \\r return"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"carriage \\\\r return\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "carriage \\r return"~string\n )~string^strings_quote,\n "\\"carriage \\\\r return\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "horizontal_tab", - expr: 'strings.quote("horizontal tab\\t") == "\\"horizontal tab\\\\t\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "horizontal tab\\t"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"horizontal tab\\\\t\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "horizontal tab\\t"~string\n )~string^strings_quote,\n "\\"horizontal tab\\\\t\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "vertical_tab", - expr: 'strings.quote("vertical \\v tab") == "\\"vertical \\\\v tab\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "vertical \\v tab"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"vertical \\\\v tab\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "vertical \\v tab"~string\n )~string^strings_quote,\n "\\"vertical \\\\v tab\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "double_slash", - expr: 'strings.quote("double \\\\\\\\ slash") == "\\"double \\\\\\\\\\\\\\\\ slash\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "double \\\\\\\\ slash"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"double \\\\\\\\\\\\\\\\ slash\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "double \\\\\\\\ slash"~string\n )~string^strings_quote,\n "\\"double \\\\\\\\\\\\\\\\ slash\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "two_escape_sequences", - expr: 'strings.quote("two escape sequences \\\\a\\\\n") == "\\"two escape sequences \\\\\\\\a\\\\\\\\n\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "two escape sequences \\\\a\\\\n"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"two escape sequences \\\\\\\\a\\\\\\\\n\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "two escape sequences \\\\a\\\\n"~string\n )~string^strings_quote,\n "\\"two escape sequences \\\\\\\\a\\\\\\\\n\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "verbatim", - expr: 'strings.quote("verbatim") == "\\"verbatim\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "verbatim"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"verbatim\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "verbatim"~string\n )~string^strings_quote,\n "\\"verbatim\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "ends_with", - expr: 'strings.quote("ends with \\\\") == "\\"ends with \\\\\\\\\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "ends with \\\\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"ends with \\\\\\\\\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "ends with \\\\"~string\n )~string^strings_quote,\n "\\"ends with \\\\\\\\\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "starts_with", - expr: 'strings.quote("\\\\ starts with") == "\\"\\\\\\\\ starts with\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "\\\\ starts with"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"\\\\\\\\ starts with\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "\\\\ starts with"~string\n )~string^strings_quote,\n "\\"\\\\\\\\ starts with\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "printable_unicode", - expr: 'strings.quote("printable unicode😀") == "\\"printable unicode😀\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "printable unicode😀"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"printable unicode😀\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "printable unicode😀"~string\n )~string^strings_quote,\n "\\"printable unicode😀\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "mid_string_quote", - expr: 'strings.quote("mid string \\" quote") == "\\"mid string \\\\\\" quote\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "mid string \\" quote"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"mid string \\\\\\" quote\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "mid string \\" quote"~string\n )~string^strings_quote,\n "\\"mid string \\\\\\" quote\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "single_quote_with_double_quote", - expr: 'strings.quote(\'single-quote with "double quote"\') == "\\"single-quote with \\\\\\"double quote\\\\\\"\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "single-quote with \\"double quote\\""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"single-quote with \\\\\\"double quote\\\\\\"\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "single-quote with \\"double quote\\""~string\n )~string^strings_quote,\n "\\"single-quote with \\\\\\"double quote\\\\\\"\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "size_unicode_char", - expr: 'strings.quote("size(\'ÿ\')") == "\\"size(\'ÿ\')\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "size(\'ÿ\')"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"size(\'ÿ\')\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "size(\'ÿ\')"~string\n )~string^strings_quote,\n "\\"size(\'ÿ\')\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "size_unicode_string", - expr: 'strings.quote("size(\'πέντε\')") == "\\"size(\'πέντε\')\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "size(\'πέντε\')"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"size(\'πέντε\')\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "size(\'πέντε\')"~string\n )~string^strings_quote,\n "\\"size(\'πέντε\')\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode", - expr: 'strings.quote("завтра") == "\\"завтра\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "завтра"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"завтра\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "завтра"~string\n )~string^strings_quote,\n "\\"завтра\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "unicode_code_points", - expr: 'strings.quote("\\U0001F431\\U0001F600\\U0001F61B")', - value: { stringValue: '"🐱😀😛"' }, - }, - ast: 'strings^#*expr.Expr_IdentExpr#.quote(\n "🐱😀😛"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'strings.quote(\n "🐱😀😛"~string\n)~string^strings_quote', - type: "string", - }, - { - original: { - name: "unicode_2", - expr: 'strings.quote("ta©o©αT") == "\\"ta©o©αT\\""', - }, - ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "ta©o©αT"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"ta©o©αT\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n strings.quote(\n "ta©o©αT"~string\n )~string^strings_quote,\n "\\"ta©o©αT\\""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "empty_quote", - expr: 'strings.quote("")', - value: { stringValue: '""' }, - }, - ast: 'strings^#*expr.Expr_IdentExpr#.quote(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: 'strings.quote(\n ""~string\n)~string^strings_quote', - type: "string", - }, - ], - }, - { - name: "format", - tests: [ - { - original: { - name: "no-op", - expr: '"no substitution".format([])', - value: { stringValue: "no substitution" }, - }, - ast: '"no substitution"^#*expr.Constant_StringValue#.format(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"no substitution"~string.format(\n []~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "mid-string substitution", - expr: '"str is %s and some more".format(["filler"])', - value: { stringValue: "str is filler and some more" }, - }, - ast: '"str is %s and some more"^#*expr.Constant_StringValue#.format(\n [\n "filler"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"str is %s and some more"~string.format(\n [\n "filler"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "percent escaping", - expr: '"%% and also %%".format([])', - value: { stringValue: "% and also %" }, - }, - ast: '"%% and also %%"^#*expr.Constant_StringValue#.format(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%% and also %%"~string.format(\n []~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "substitution inside escaped percent signs", - expr: '"%%%s%%".format(["text"])', - value: { stringValue: "%text%" }, - }, - ast: '"%%%s%%"^#*expr.Constant_StringValue#.format(\n [\n "text"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%%%s%%"~string.format(\n [\n "text"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "substitution with one escaped percent sign on the right", - expr: '"%s%%".format(["percent on the right"])', - value: { stringValue: "percent on the right%" }, - }, - ast: '"%s%%"^#*expr.Constant_StringValue#.format(\n [\n "percent on the right"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s%%"~string.format(\n [\n "percent on the right"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "substitution with one escaped percent sign on the left", - expr: '"%%%s".format(["percent on the left"])', - value: { stringValue: "%percent on the left" }, - }, - ast: '"%%%s"^#*expr.Constant_StringValue#.format(\n [\n "percent on the left"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%%%s"~string.format(\n [\n "percent on the left"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "multiple substitutions", - expr: '"%d %d %d, %s %s %s, %d %d %d, %s %s %s".format([1, 2, 3, "A", "B", "C", 4, 5, 6, "D", "E", "F"])', - value: { stringValue: "1 2 3, A B C, 4 5 6, D E F" }, - }, - ast: '"%d %d %d, %s %s %s, %d %d %d, %s %s %s"^#*expr.Constant_StringValue#.format(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n "A"^#*expr.Constant_StringValue#,\n "B"^#*expr.Constant_StringValue#,\n "C"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n "D"^#*expr.Constant_StringValue#,\n "E"^#*expr.Constant_StringValue#,\n "F"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%d %d %d, %s %s %s, %d %d %d, %s %s %s"~string.format(\n [\n 1~int,\n 2~int,\n 3~int,\n "A"~string,\n "B"~string,\n "C"~string,\n 4~int,\n 5~int,\n 6~int,\n "D"~string,\n "E"~string,\n "F"~string\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "percent sign escape sequence support", - expr: '"%%escaped %s%%".format(["percent"])', - value: { stringValue: "%escaped percent%" }, - }, - ast: '"%%escaped %s%%"^#*expr.Constant_StringValue#.format(\n [\n "percent"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%%escaped %s%%"~string.format(\n [\n "percent"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "fixed point formatting clause", - expr: '"%.3f".format([1.2345])', - value: { stringValue: "1.234" }, - }, - ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n 1.2345^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.3f"~string.format(\n [\n 1.2345~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "binary formatting clause", - expr: '"this is 5 in binary: %b".format([5])', - value: { stringValue: "this is 5 in binary: 101" }, - }, - ast: '"this is 5 in binary: %b"^#*expr.Constant_StringValue#.format(\n [\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"this is 5 in binary: %b"~string.format(\n [\n 5~int\n ]~list(int)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "uint support for binary formatting", - expr: '"unsigned 64 in binary: %b".format([uint(64)])', - value: { stringValue: "unsigned 64 in binary: 1000000" }, - }, - ast: '"unsigned 64 in binary: %b"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 64^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"unsigned 64 in binary: %b"~string.format(\n [\n uint(\n 64~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "bool support for binary formatting", - expr: '"bit set from bool: %b".format([true])', - value: { stringValue: "bit set from bool: 1" }, - }, - ast: '"bit set from bool: %b"^#*expr.Constant_StringValue#.format(\n [\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"bit set from bool: %b"~string.format(\n [\n true~bool\n ]~list(bool)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "octal formatting clause", - expr: '"%o".format([11])', - value: { stringValue: "13" }, - }, - ast: '"%o"^#*expr.Constant_StringValue#.format(\n [\n 11^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%o"~string.format(\n [\n 11~int\n ]~list(int)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "uint support for octal formatting clause", - expr: '"this is an unsigned octal: %o".format([uint(65535)])', - value: { stringValue: "this is an unsigned octal: 177777" }, - }, - ast: '"this is an unsigned octal: %o"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 65535^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"this is an unsigned octal: %o"~string.format(\n [\n uint(\n 65535~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "lowercase hexadecimal formatting clause", - expr: '"%x is 20 in hexadecimal".format([30])', - value: { stringValue: "1e is 20 in hexadecimal" }, - }, - ast: '"%x is 20 in hexadecimal"^#*expr.Constant_StringValue#.format(\n [\n 30^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%x is 20 in hexadecimal"~string.format(\n [\n 30~int\n ]~list(int)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "uppercase hexadecimal formatting clause", - expr: '"%X is 20 in hexadecimal".format([30])', - value: { stringValue: "1E is 20 in hexadecimal" }, - }, - ast: '"%X is 20 in hexadecimal"^#*expr.Constant_StringValue#.format(\n [\n 30^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%X is 20 in hexadecimal"~string.format(\n [\n 30~int\n ]~list(int)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "unsigned support for hexadecimal formatting clause", - expr: '"%X is 6000 in hexadecimal".format([uint(6000)])', - value: { stringValue: "1770 is 6000 in hexadecimal" }, - }, - ast: '"%X is 6000 in hexadecimal"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 6000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%X is 6000 in hexadecimal"~string.format(\n [\n uint(\n 6000~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "string support with hexadecimal formatting clause", - expr: '"%x".format(["Hello world!"])', - value: { stringValue: "48656c6c6f20776f726c6421" }, - }, - ast: '"%x"^#*expr.Constant_StringValue#.format(\n [\n "Hello world!"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%x"~string.format(\n [\n "Hello world!"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "string support with uppercase hexadecimal formatting clause", - expr: '"%X".format(["Hello world!"])', - value: { stringValue: "48656C6C6F20776F726C6421" }, - }, - ast: '"%X"^#*expr.Constant_StringValue#.format(\n [\n "Hello world!"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%X"~string.format(\n [\n "Hello world!"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "byte support with hexadecimal formatting clause", - expr: '"%x".format([b"byte string"])', - value: { stringValue: "6279746520737472696e67" }, - }, - ast: '"%x"^#*expr.Constant_StringValue#.format(\n [\n b"byte string"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%x"~string.format(\n [\n b"byte string"~bytes\n ]~list(bytes)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "byte support with uppercase hexadecimal formatting clause", - expr: '"%X".format([b"byte string"])', - value: { stringValue: "6279746520737472696E67" }, - }, - ast: '"%X"^#*expr.Constant_StringValue#.format(\n [\n b"byte string"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%X"~string.format(\n [\n b"byte string"~bytes\n ]~list(bytes)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "scientific notation formatting clause", - expr: '"%.6e".format([1052.032911275])', - value: { stringValue: "1.052033e+03" }, - }, - ast: '"%.6e"^#*expr.Constant_StringValue#.format(\n [\n 1052.032911275^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.6e"~string.format(\n [\n 1052.032911275~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "default precision for fixed-point clause", - expr: '"%f".format([2.71828])', - value: { stringValue: "2.718280" }, - }, - ast: '"%f"^#*expr.Constant_StringValue#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%f"~string.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "default precision for scientific notation", - expr: '"%e".format([2.71828])', - value: { stringValue: "2.718280e+00" }, - }, - ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%e"~string.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "NaN support for scientific notation", - expr: '"%e".format([double("NaN")])', - value: { stringValue: "NaN" }, - }, - ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%e"~string.format(\n [\n double(\n "NaN"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "positive infinity support for scientific notation", - expr: '"%e".format([double("Infinity")])', - value: { stringValue: "Infinity" }, - }, - ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n double(\n "Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%e"~string.format(\n [\n double(\n "Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "negative infinity support for scientific notation", - expr: '"%e".format([double("-Infinity")])', - value: { stringValue: "-Infinity" }, - }, - ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n double(\n "-Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%e"~string.format(\n [\n double(\n "-Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "NaN support for decimal", - expr: '"%d".format([double("NaN")])', - value: { stringValue: "NaN" }, - }, - ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%d"~string.format(\n [\n double(\n "NaN"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "positive infinity support for decimal", - expr: '"%d".format([double("Infinity")])', - value: { stringValue: "Infinity" }, - }, - ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n double(\n "Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%d"~string.format(\n [\n double(\n "Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "negative infinity support for decimal", - expr: '"%d".format([double("-Infinity")])', - value: { stringValue: "-Infinity" }, - }, - ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n double(\n "-Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%d"~string.format(\n [\n double(\n "-Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "NaN support for fixed-point", - expr: '"%f".format([double("NaN")])', - value: { stringValue: "NaN" }, - }, - ast: '"%f"^#*expr.Constant_StringValue#.format(\n [\n double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%f"~string.format(\n [\n double(\n "NaN"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "positive infinity support for fixed-point", - expr: '"%f".format([double("Infinity")])', - value: { stringValue: "Infinity" }, - }, - ast: '"%f"^#*expr.Constant_StringValue#.format(\n [\n double(\n "Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%f"~string.format(\n [\n double(\n "Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "negative infinity support for fixed-point", - expr: '"%f".format([double("-Infinity")])', - value: { stringValue: "-Infinity" }, - }, - ast: '"%f"^#*expr.Constant_StringValue#.format(\n [\n double(\n "-Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%f"~string.format(\n [\n double(\n "-Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "uint support for decimal clause", - expr: '"%d".format([uint(64)])', - value: { stringValue: "64" }, - }, - ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 64^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%d"~string.format(\n [\n uint(\n 64~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "null support for string", - expr: '"%s".format([null])', - value: { stringValue: "null" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n null~null\n ]~list(null)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "int support for string", - expr: '"%s".format([999999999999])', - value: { stringValue: "999999999999" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n 999999999999^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n 999999999999~int\n ]~list(int)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "bytes support for string", - expr: '"%s".format([b"xyz"])', - value: { stringValue: "xyz" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n b"xyz"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n b"xyz"~bytes\n ]~list(bytes)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "type() support for string", - expr: '"%s".format([type("test string")])', - value: { stringValue: "string" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n type(\n "test string"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n type(\n "test string"~string\n )~type(string)^type\n ]~list(type(string))\n)~string^string_format', - type: "string", - }, - { - original: { - name: "timestamp support for string", - expr: '"%s".format([timestamp("2023-02-03T23:31:20+00:00")])', - value: { stringValue: "2023-02-03T23:31:20Z" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n timestamp(\n "2023-02-03T23:31:20+00:00"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n timestamp(\n "2023-02-03T23:31:20+00:00"~string\n )~timestamp^string_to_timestamp\n ]~list(timestamp)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "duration support for string", - expr: '"%s".format([duration("1h45m47s")])', - value: { stringValue: "6347s" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n duration(\n "1h45m47s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n duration(\n "1h45m47s"~string\n )~duration^string_to_duration\n ]~list(duration)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "list support for string", - expr: '"%s".format([["abc", 3.14, null, [9, 8, 7, 6], timestamp("2023-02-03T23:31:20Z")]])', - value: { - stringValue: - "[abc, 3.14, null, [9, 8, 7, 6], 2023-02-03T23:31:20Z]", - }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n [\n "abc"^#*expr.Constant_StringValue#,\n 3.14^#*expr.Constant_DoubleValue#,\n null^#*expr.Constant_NullValue#,\n [\n 9^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n timestamp(\n "2023-02-03T23:31:20Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n [\n "abc"~string,\n 3.14~double,\n null~null,\n [\n 9~int,\n 8~int,\n 7~int,\n 6~int\n ]~list(int),\n timestamp(\n "2023-02-03T23:31:20Z"~string\n )~timestamp^string_to_timestamp\n ]~list(dyn)\n ]~list(list(dyn))\n)~string^string_format', - type: "string", - }, - { - original: { - name: "map support for string", - expr: '"%s".format([{"key1": b"xyz", "key5": null, "key2": duration("2h"), "key4": true, "key3": 2.71828}])', - value: { - stringValue: - "{key1: xyz, key2: 7200s, key3: 2.71828, key4: true, key5: null}", - }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n {\n "key1"^#*expr.Constant_StringValue#:b"xyz"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#,\n "key5"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:duration(\n "2h"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n "key4"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n "key3"^#*expr.Constant_StringValue#:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n {\n "key1"~string:b"xyz"~bytes,\n "key5"~string:null~null,\n "key2"~string:duration(\n "2h"~string\n )~duration^string_to_duration,\n "key4"~string:true~bool,\n "key3"~string:2.71828~double\n }~map(string, dyn)\n ]~list(map(string, dyn))\n)~string^string_format', - type: "string", - }, - { - original: { - name: "map support (all key types)", - expr: '"%s".format([{1: "value1", uint(2): "value2", true: double("NaN")}])', - value: { stringValue: "{1: value1, 2: value2, true: NaN}" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n {\n 1^#*expr.Constant_Int64Value#:"value1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n uint(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#:"value2"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n {\n 1~int:"value1"~string,\n uint(\n 2~int\n )~uint^int64_to_uint64:"value2"~string,\n true~bool:double(\n "NaN"~string\n )~double^string_to_double\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn))\n)~string^string_format', - type: "string", - }, - { - original: { - name: "boolean support for %s", - expr: '"%s, %s".format([true, false])', - value: { stringValue: "true, false" }, - }, - ast: '"%s, %s"^#*expr.Constant_StringValue#.format(\n [\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s, %s"~string.format(\n [\n true~bool,\n false~bool\n ]~list(bool)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for string formatting clause", - expr: '"%s".format([dyn("a string")])', - value: { stringValue: "a string" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n "a string"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n dyn(\n "a string"~string\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for numbers with string formatting clause", - expr: '"%s, %s".format([dyn(32), dyn(56.8)])', - value: { stringValue: "32, 56.8" }, - }, - ast: '"%s, %s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 32^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 56.8^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s, %s"~string.format(\n [\n dyn(\n 32~int\n )~dyn^to_dyn,\n dyn(\n 56.8~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for integer formatting clause", - expr: '"%d".format([dyn(128)])', - value: { stringValue: "128" }, - }, - ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 128^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%d"~string.format(\n [\n dyn(\n 128~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for integer formatting clause (unsigned)", - expr: '"%d".format([dyn(256u)])', - value: { stringValue: "256" }, - }, - ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 256u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%d"~string.format(\n [\n dyn(\n 256u~uint\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for hex formatting clause", - expr: '"%x".format([dyn(22)])', - value: { stringValue: "16" }, - }, - ast: '"%x"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%x"~string.format(\n [\n dyn(\n 22~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for hex formatting clause (uppercase)", - expr: '"%X".format([dyn(26)])', - value: { stringValue: "1A" }, - }, - ast: '"%X"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 26^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%X"~string.format(\n [\n dyn(\n 26~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for unsigned hex formatting clause", - expr: '"%x".format([dyn(500u)])', - value: { stringValue: "1f4" }, - }, - ast: '"%x"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 500u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%x"~string.format(\n [\n dyn(\n 500u~uint\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for fixed-point formatting clause", - expr: '"%.3f".format([dyn(4.5)])', - value: { stringValue: "4.500" }, - }, - ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 4.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.3f"~string.format(\n [\n dyn(\n 4.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for scientific notation", - expr: '"%e".format([dyn(2.71828)])', - value: { stringValue: "2.718280e+00" }, - }, - ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 2.71828^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%e"~string.format(\n [\n dyn(\n 2.71828~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype NaN/infinity support", - expr: '"%s".format([[double("NaN"), double("Infinity"), double("-Infinity")]])', - value: { stringValue: "[NaN, Infinity, -Infinity]" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n [\n double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n double(\n "Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n double(\n "-Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n [\n double(\n "NaN"~string\n )~double^string_to_double,\n double(\n "Infinity"~string\n )~double^string_to_double,\n double(\n "-Infinity"~string\n )~double^string_to_double\n ]~list(double)\n ]~list(list(double))\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for timestamp", - expr: '"%s".format([dyn(timestamp("2009-11-10T23:00:00Z"))])', - value: { stringValue: "2009-11-10T23:00:00Z" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n timestamp(\n "2009-11-10T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n dyn(\n timestamp(\n "2009-11-10T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for duration", - expr: '"%s".format([dyn(duration("8747s"))])', - value: { stringValue: "8747s" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n duration(\n "8747s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n dyn(\n duration(\n "8747s"~string\n )~duration^string_to_duration\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for lists", - expr: '"%s".format([dyn([6, 4.2, "a string"])])', - value: { stringValue: "[6, 4.2, a string]" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n [\n 6^#*expr.Constant_Int64Value#,\n 4.2^#*expr.Constant_DoubleValue#,\n "a string"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n dyn(\n [\n 6~int,\n 4.2~double,\n "a string"~string\n ]~list(dyn)\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "dyntype support for maps", - expr: '"%s".format([{"strKey":"x", 6:duration("422s"), true:42}])', - value: { stringValue: "{6: 422s, strKey: x, true: 42}" }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n {\n "strKey"^#*expr.Constant_StringValue#:"x"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 6^#*expr.Constant_Int64Value#:duration(\n "422s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%s"~string.format(\n [\n {\n "strKey"~string:"x"~string,\n 6~int:duration(\n "422s"~string\n )~duration^string_to_duration,\n true~bool:42~int\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn))\n)~string^string_format', - type: "string", - }, - { - original: { - name: "string substitution in a string variable", - expr: 'str_var.format(["filler"])', - typeEnv: [ - { name: "str_var", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { str_var: { value: { stringValue: "%s" } } }, - value: { stringValue: "filler" }, - }, - ast: 'str_var^#*expr.Expr_IdentExpr#.format(\n [\n "filler"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'str_var~string^str_var.format(\n [\n "filler"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "multiple substitutions in a string variable", - expr: 'str_var.format([1, 2, 3, "A", "B", "C", 4, 5, 6, "D", "E", "F"])', - typeEnv: [ - { name: "str_var", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { - str_var: { - value: { - stringValue: "%d %d %d, %s %s %s, %d %d %d, %s %s %s", - }, - }, - }, - value: { stringValue: "1 2 3, A B C, 4 5 6, D E F" }, - }, - ast: 'str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n "A"^#*expr.Constant_StringValue#,\n "B"^#*expr.Constant_StringValue#,\n "C"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n "D"^#*expr.Constant_StringValue#,\n "E"^#*expr.Constant_StringValue#,\n "F"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'str_var~string^str_var.format(\n [\n 1~int,\n 2~int,\n 3~int,\n "A"~string,\n "B"~string,\n "C"~string,\n 4~int,\n 5~int,\n 6~int,\n "D"~string,\n "E"~string,\n "F"~string\n ]~list(dyn)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "substitution inside escaped percent signs in a string variable", - expr: 'str_var.format(["text"])', - typeEnv: [ - { name: "str_var", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { str_var: { value: { stringValue: "%%%s%%" } } }, - value: { stringValue: "%text%" }, - }, - ast: 'str_var^#*expr.Expr_IdentExpr#.format(\n [\n "text"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'str_var~string^str_var.format(\n [\n "text"~string\n ]~list(string)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "fixed point formatting clause in a string variable", - expr: "str_var.format([1.2345])", - typeEnv: [ - { name: "str_var", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { str_var: { value: { stringValue: "%.3f" } } }, - value: { stringValue: "1.234" }, - }, - ast: "str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1.2345^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "str_var~string^str_var.format(\n [\n 1.2345~double\n ]~list(double)\n)~string^string_format", - type: "string", - }, - { - original: { - name: "binary formatting clause in a string variable", - expr: "str_var.format([5])", - typeEnv: [ - { name: "str_var", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { str_var: { value: { stringValue: "%b" } } }, - value: { stringValue: "101" }, - }, - ast: "str_var^#*expr.Expr_IdentExpr#.format(\n [\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "str_var~string^str_var.format(\n [\n 5~int\n ]~list(int)\n)~string^string_format", - type: "string", - }, - { - original: { - name: "scientific notation formatting clause in a string variable", - expr: "str_var.format([1052.032911275])", - typeEnv: [ - { name: "str_var", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { str_var: { value: { stringValue: "%.6e" } } }, - value: { stringValue: "1.052033e+03" }, - }, - ast: "str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1052.032911275^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "str_var~string^str_var.format(\n [\n 1052.032911275~double\n ]~list(double)\n)~string^string_format", - type: "string", - }, - { - original: { - name: "default precision for fixed-point clause in a string variable", - expr: "str_var.format([2.71828])", - typeEnv: [ - { name: "str_var", ident: { type: { primitive: "STRING" } } }, - ], - bindings: { str_var: { value: { stringValue: "%f" } } }, - value: { stringValue: "2.718280" }, - }, - ast: "str_var^#*expr.Expr_IdentExpr#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "str_var~string^str_var.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format", - type: "string", - }, - { - original: { - name: "format_%f_insignificant_zeroes_removed", - expr: '"%.0f".format([123.000000])', - value: { stringValue: "123" }, - }, - ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 123^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.0f"~string.format(\n [\n 123~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_positive_round_to_whole_number", - expr: '"%.0f".format([3.5001])', - value: { stringValue: "4" }, - }, - ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 3.5001^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.0f"~string.format(\n [\n 3.5001~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_negative_truncate_to_whole_number", - expr: '"%.0f".format([3.4999])', - value: { stringValue: "3" }, - }, - ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 3.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.0f"~string.format(\n [\n 3.4999~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_halfway_round_up_to_nearest_even", - expr: '"%.0f".format([1.5])', - value: { stringValue: "2" }, - }, - ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 1.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.0f"~string.format(\n [\n 1.5~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_halfway_truncate_to_nearest_even", - expr: '"%.0f".format([2.5])', - value: { stringValue: "2" }, - }, - ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 2.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.0f"~string.format(\n [\n 2.5~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_positive_round_up", - expr: '"%.3f".format([123.4999])', - value: { stringValue: "123.500" }, - }, - ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n 123.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.3f"~string.format(\n [\n 123.4999~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_positive_round_down", - expr: '"%.3f".format([123.4994])', - value: { stringValue: "123.499" }, - }, - ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n 123.4994^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.3f"~string.format(\n [\n 123.4994~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_negative_round_up", - expr: '"%.3f".format([-123.4999])', - value: { stringValue: "-123.500" }, - }, - ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n -123.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.3f"~string.format(\n [\n -123.4999~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_negative_round_down", - expr: '"%.3f".format([-123.4994])', - value: { stringValue: "-123.499" }, - }, - ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n -123.4994^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.3f"~string.format(\n [\n -123.4994~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - { - original: { - name: "format_%f_zero_padding", - expr: '"%.5f".format([-1.2])', - value: { stringValue: "-1.20000" }, - }, - ast: '"%.5f"^#*expr.Constant_StringValue#.format(\n [\n -1.2^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '"%.5f"~string.format(\n [\n -1.2~double\n ]~list(double)\n)~string^string_format', - type: "string", - }, - ], - }, - { - name: "format_errors", - tests: [ - { - original: { - name: "unrecognized formatting clause", - expr: '"%a".format([1])', - disableCheck: true, - evalError: { - errors: [ - { - message: - 'could not parse formatting clause: unrecognized formatting clause "a"', - }, - ], - }, - }, - ast: '"%a"^#*expr.Constant_StringValue#.format(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:12: could not parse formatting clause: unrecognized formatting clause "a"\n | "%a".format([1])\n | ...........^', - }, - { - original: { - name: "out of bounds arg index", - expr: '"%d %d %d".format([0, 1])', - disableCheck: true, - evalError: { errors: [{ message: "index 2 out of range" }] }, - }, - ast: '"%d %d %d"^#*expr.Constant_StringValue#.format(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:18: index 2 out of range\n | "%d %d %d".format([0, 1])\n | .................^', - }, - { - original: { - name: "string substitution is not allowed with binary clause", - expr: '"string is %b".format(["abc"])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: only integers and bools can be formatted as binary, was given string", - }, - ], - }, - }, - ast: '"string is %b"^#*expr.Constant_StringValue#.format(\n [\n "abc"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:24: error during formatting: only ints, uints, and bools can be formatted as binary, was given string\n | "string is %b".format(["abc"])\n | .......................^', - }, - { - original: { - name: "duration substitution not allowed with decimal clause", - expr: '"%d".format([duration("30m2s")])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: decimal clause can only be used on integers, was given google.protobuf.Duration", - }, - ], - }, - }, - ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n duration(\n "30m2s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:22: error during formatting: decimal clause can only be used on ints, uints, and doubles, was given google.protobuf.Duration\n | "%d".format([duration("30m2s")])\n | .....................^', - }, - { - original: { - name: "string substitution not allowed with octal clause", - expr: '"octal: %o".format(["a string"])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: octal clause can only be used on integers, was given string", - }, - ], - }, - }, - ast: '"octal: %o"^#*expr.Constant_StringValue#.format(\n [\n "a string"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:21: error during formatting: octal clause can only be used on ints and uints, was given string\n | "octal: %o".format(["a string"])\n | ....................^', - }, - { - original: { - name: "double substitution not allowed with hex clause", - expr: '"double is %x".format([0.5])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given double", - }, - ], - }, - }, - ast: '"double is %x"^#*expr.Constant_StringValue#.format(\n [\n 0.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:24: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given double\n | "double is %x".format([0.5])\n | .......................^', - }, - { - original: { - name: "uppercase not allowed for scientific clause", - expr: '"double is %E".format([0.5])', - disableCheck: true, - evalError: { - errors: [ - { - message: - 'could not parse formatting clause: unrecognized formatting clause "E"', - }, - ], - }, - }, - ast: '"double is %E"^#*expr.Constant_StringValue#.format(\n [\n 0.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:22: could not parse formatting clause: unrecognized formatting clause "E"\n | "double is %E".format([0.5])\n | .....................^', - }, - { - original: { - name: "object not allowed", - expr: '"object is %s".format([cel.expr.conformance.proto3.TestAllTypes{}])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - }, - ast: '"object is %s"^#*expr.Constant_StringValue#.format(\n [\n cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:64: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | "object is %s".format([cel.expr.conformance.proto3.TestAllTypes{}])\n | ...............................................................^', - }, - { - original: { - name: "object inside list", - expr: '"%s".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:61: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | "%s".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])\n | ............................................................^', - }, - { - original: { - name: "object inside map", - expr: '"%s".format([{1: "a", 2: cel.expr.conformance.proto3.TestAllTypes{}}])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - }, - ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n {\n 1^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:66: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | "%s".format([{1: "a", 2: cel.expr.conformance.proto3.TestAllTypes{}}])\n | .................................................................^', - }, - { - original: { - name: "null not allowed for %d", - expr: '"null: %d".format([null])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: decimal clause can only be used on integers, was given null_type", - }, - ], - }, - }, - ast: '"null: %d"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:20: error during formatting: decimal clause can only be used on ints, uints, and doubles, was given null_type\n | "null: %d".format([null])\n | ...................^', - }, - { - original: { - name: "null not allowed for %e", - expr: '"null: %e".format([null])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: scientific clause can only be used on doubles, was given null_type", - }, - ], - }, - }, - ast: '"null: %e"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:20: error during formatting: scientific clause can only be used on ints, uints, and doubles, was given null_type\n | "null: %e".format([null])\n | ...................^', - }, - { - original: { - name: "null not allowed for %f", - expr: '"null: %f".format([null])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: fixed-point clause can only be used on doubles, was given null_type", - }, - ], - }, - }, - ast: '"null: %f"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:20: error during formatting: fixed-point clause can only be used on ints, uints, and doubles, was given null_type\n | "null: %f".format([null])\n | ...................^', - }, - { - original: { - name: "null not allowed for %x", - expr: '"null: %x".format([null])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type", - }, - ], - }, - }, - ast: '"null: %x"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given null_type\n | "null: %x".format([null])\n | ...................^', - }, - { - original: { - name: "null not allowed for %X", - expr: '"null: %X".format([null])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type", - }, - ], - }, - }, - ast: '"null: %X"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given null_type\n | "null: %X".format([null])\n | ...................^', - }, - { - original: { - name: "null not allowed for %b", - expr: '"null: %b".format([null])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: only integers and bools can be formatted as binary, was given null_type", - }, - ], - }, - }, - ast: '"null: %b"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, and bools can be formatted as binary, was given null_type\n | "null: %b".format([null])\n | ...................^', - }, - { - original: { - name: "null not allowed for %o", - expr: '"null: %o".format([null])', - disableCheck: true, - evalError: { - errors: [ - { - message: - "error during formatting: octal clause can only be used on integers, was given null_type", - }, - ], - }, - }, - ast: '"null: %o"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - 'ERROR: \u003cinput\u003e:1:20: error during formatting: octal clause can only be used on ints and uints, was given null_type\n | "null: %o".format([null])\n | ...................^', - }, - ], - }, - { - name: "value_errors", - tests: [ - { - original: { - name: "charat_out_of_range", - expr: "'tacocat'.charAt(30) == ''", - evalError: { errors: [{ message: "index out of range: 30" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.charAt(\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.charAt(\n 30~int\n )~string^string_char_at_int,\n ""~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "indexof_out_of_range", - expr: "'tacocat'.indexOf('a', 30) == -1", - evalError: { errors: [{ message: "index out of range: 30" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n "a"^#*expr.Constant_StringValue#,\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.indexOf(\n "a"~string,\n 30~int\n )~int^string_index_of_string_int,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "lastindexof_negative_index", - expr: "'tacocat'.lastIndexOf('a', -1) == -1", - evalError: { errors: [{ message: "index out of range: -1" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "a"^#*expr.Constant_StringValue#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.lastIndexOf(\n "a"~string,\n -1~int\n )~int^string_last_index_of_string_int,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "lastindexof_out_of_range", - expr: "'tacocat'.lastIndexOf('a', 30) == -1", - evalError: { errors: [{ message: "index out of range: 30" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "a"^#*expr.Constant_StringValue#,\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.lastIndexOf(\n "a"~string,\n 30~int\n )~int^string_last_index_of_string_int,\n -1~int\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "substring_out_of_range", - expr: "'tacocat'.substring(40) == 'cat'", - evalError: { errors: [{ message: "index out of range: 40" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 40^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n 40~int\n )~string^string_substring_int,\n "cat"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "substring_negative_index", - expr: "'tacocat'.substring(-1) == 'cat'", - evalError: { errors: [{ message: "index out of range: -1" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n -1~int\n )~string^string_substring_int,\n "cat"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "substring_end_index_out_of_range", - expr: "'tacocat'.substring(1, 50) == 'cat'", - evalError: { errors: [{ message: "index out of range: 50" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 1^#*expr.Constant_Int64Value#,\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n 1~int,\n 50~int\n )~string^string_substring_int_int,\n "cat"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "substring_begin_index_out_of_range", - expr: "'tacocat'.substring(49, 50) == 'cat'", - evalError: { errors: [{ message: "index out of range: 49" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 49^#*expr.Constant_Int64Value#,\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n 49~int,\n 50~int\n )~string^string_substring_int_int,\n "cat"~string\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "substring_end_index_greater_than_begin_index", - expr: "'tacocat'.substring(4, 3) == ''", - evalError: { - errors: [ - { message: "invalid substring range. start: 4, end: 3" }, - ], - }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n "tacocat"~string.substring(\n 4~int,\n 3~int\n )~string^string_substring_int_int,\n ""~string\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "type_errors", - tests: [ - { - original: { - name: "charat_invalid_type", - expr: "42.charAt(2) == ''", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 42^#*expr.Constant_Int64Value#.charAt(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:10: found no matching overload for 'charAt' applied to 'int.(int)'\n | 42.charAt(2) == ''\n | .........^", - }, - { - original: { - name: "charat_invalid_argument", - expr: "'hello'.charAt(true) == ''", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "hello"^#*expr.Constant_StringValue#.charAt(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:15: found no matching overload for 'charAt' applied to 'string.(bool)'\n | 'hello'.charAt(true) == ''\n | ..............^", - }, - { - original: { - name: "indexof_unary_invalid_type", - expr: "24.indexOf('2') == 0", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 24^#*expr.Constant_Int64Value#.indexOf(\n "2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'indexOf' applied to 'int.(string)'\n | 24.indexOf('2') == 0\n | ..........^", - }, - { - original: { - name: "indexof_unary_invalid_argument", - expr: "'hello'.indexOf(true) == 1", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "hello"^#*expr.Constant_StringValue#.indexOf(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:16: found no matching overload for 'indexOf' applied to 'string.(bool)'\n | 'hello'.indexOf(true) == 1\n | ...............^", - }, - { - original: { - name: "indexof_binary_invalid_argument", - expr: "42.indexOf('4', 0) == 0", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 42^#*expr.Constant_Int64Value#.indexOf(\n "4"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'indexOf' applied to 'int.(string, int)'\n | 42.indexOf('4', 0) == 0\n | ..........^", - }, - { - original: { - name: "indexof_binary_invalid_argument_2", - expr: "'42'.indexOf(4, 0) == 0", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.indexOf(\n 4^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(int, int)'\n | '42'.indexOf(4, 0) == 0\n | ............^", - }, - { - original: { - name: "indexof_binary_both_invalid_arguments", - expr: "'42'.indexOf('4', '0') == 0", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.indexOf(\n "4"^#*expr.Constant_StringValue#,\n "0"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(string, string)'\n | '42'.indexOf('4', '0') == 0\n | ............^", - }, - { - original: { - name: "indexof_ternary_invalid_arguments", - expr: "'42'.indexOf('4', 0, 1) == 0", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.indexOf(\n "4"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(string, int, int)'\n | '42'.indexOf('4', 0, 1) == 0\n | ............^", - }, - { - original: { - name: "split_invalid_type", - expr: "42.split('2') == ['4']", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 42^#*expr.Constant_Int64Value#.split(\n "2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string)'\n | 42.split('2') == ['4']\n | ........^", - }, - { - original: { - name: "replace_invalid_type", - expr: "42.replace(2, 1) == '41'", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 42^#*expr.Constant_Int64Value#.replace(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'replace' applied to 'int.(int, int)'\n | 42.replace(2, 1) == '41'\n | ..........^", - }, - { - original: { - name: "replace_binary_invalid_argument", - expr: "'42'.replace(2, 1) == '41'", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(int, int)'\n | '42'.replace(2, 1) == '41'\n | ............^", - }, - { - original: { - name: "replace_binary_invalid_argument_2", - expr: "'42'.replace('2', 1) == '41'", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n "2"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, int)'\n | '42'.replace('2', 1) == '41'\n | ............^", - }, - { - original: { - name: "replace_ternary_invalid_argument", - expr: "42.replace('2', '1', 1) == '41'", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 42^#*expr.Constant_Int64Value#.replace(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'replace' applied to 'int.(string, string, int)'\n | 42.replace('2', '1', 1) == '41'\n | ..........^", - }, - { - original: { - name: "replace_ternary_invalid_argument_2", - expr: "'42'.replace(2, '1', 1) == '41'", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n 2^#*expr.Constant_Int64Value#,\n "1"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(int, string, int)'\n | '42'.replace(2, '1', 1) == '41'\n | ............^", - }, - { - original: { - name: "replace_ternary_invalid_argument_3", - expr: "'42'.replace('2', 1, 1) == '41'", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n "2"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, int, int)'\n | '42'.replace('2', 1, 1) == '41'\n | ............^", - }, - { - original: { - name: "replace_ternary_invalid_argument_4", - expr: "'42'.replace('2', '1', '1') == '41'", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, string, string)'\n | '42'.replace('2', '1', '1') == '41'\n | ............^", - }, - { - original: { - name: "replace_quaternary_invalid_argument", - expr: "'42'.replace('2', '1', 1, false) == '41'", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, string, int, bool)'\n | '42'.replace('2', '1', 1, false) == '41'\n | ............^", - }, - { - original: { - name: "split_invalid_type_empty_arg", - expr: "42.split('') == ['4', '2']", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 42^#*expr.Constant_Int64Value#.split(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string)'\n | 42.split('') == ['4', '2']\n | ........^", - }, - { - original: { - name: "split_invalid_argument", - expr: "'42'.split(2) == ['4']", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.split(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(int)'\n | '42'.split(2) == ['4']\n | ..........^", - }, - { - original: { - name: "split_binary_invalid_type", - expr: "42.split('2', '1') == ['4']", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 42^#*expr.Constant_Int64Value#.split(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string, string)'\n | 42.split('2', '1') == ['4']\n | ........^", - }, - { - original: { - name: "split_binary_invalid_argument", - expr: "'42'.split(2, 1) == ['4']", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.split(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(int, int)'\n | '42'.split(2, 1) == ['4']\n | ..........^", - }, - { - original: { - name: "split_binary_invalid_argument_2", - expr: "'42'.split('2', '1') == ['4']", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.split(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(string, string)'\n | '42'.split('2', '1') == ['4']\n | ..........^", - }, - { - original: { - name: "split_ternary_invalid_argument", - expr: "'42'.split('2', 1, 1) == ['4']", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "42"^#*expr.Constant_StringValue#.split(\n "2"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(string, int, int)'\n | '42'.split('2', 1, 1) == ['4']\n | ..........^", - }, - { - original: { - name: "substring_ternary_invalid_argument", - expr: "'hello'.substring(1, 2, 3) == ''", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "hello"^#*expr.Constant_StringValue#.substring(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:18: found no matching overload for 'substring' applied to 'string.(int, int, int)'\n | 'hello'.substring(1, 2, 3) == ''\n | .................^", - }, - { - original: { - name: "substring_binary_invalid_type", - expr: "30.substring(true, 3) == ''", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n 30^#*expr.Constant_Int64Value#.substring(\n true^#*expr.Constant_BoolValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'substring' applied to 'int.(bool, int)'\n | 30.substring(true, 3) == ''\n | ............^", - }, - { - original: { - name: "substring_binary_invalid_argument", - expr: "'tacocat'.substring(true, 3) == ''", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n true^#*expr.Constant_BoolValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:20: found no matching overload for 'substring' applied to 'string.(bool, int)'\n | 'tacocat'.substring(true, 3) == ''\n | ...................^", - }, - { - original: { - name: "substring_binary_invalid_argument_2", - expr: "'tacocat'.substring(0, false) == ''", - disableCheck: true, - evalError: { errors: [{ message: "no such overload" }] }, - }, - ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 0^#*expr.Constant_Int64Value#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - error: - "ERROR: \u003cinput\u003e:1:20: found no matching overload for 'substring' applied to 'string.(int, bool)'\n | 'tacocat'.substring(0, false) == ''\n | ...................^", - }, - ], - }, - ], - }, - { - name: "timestamps", - suites: [ - { - name: "timestamp_conversions", - tests: [ - { - original: { - name: "toInt_timestamp", - expr: "int(timestamp('2009-02-13T23:31:30Z'))", - value: { int64Value: "1234567890" }, - }, - ast: 'int(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'int(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~int^timestamp_to_int64', - type: "int", - }, - { - original: { - name: "toString_timestamp", - expr: "string(timestamp('2009-02-13T23:31:30Z'))", - value: { stringValue: "2009-02-13T23:31:30Z" }, - }, - ast: 'string(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'string(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~string^timestamp_to_string', - type: "string", - }, - { - original: { - name: "toString_timestamp_nanos", - expr: "string(timestamp('9999-12-31T23:59:59.999999999Z'))", - value: { stringValue: "9999-12-31T23:59:59.999999999Z" }, - }, - ast: 'string(\n timestamp(\n "9999-12-31T23:59:59.999999999Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'string(\n timestamp(\n "9999-12-31T23:59:59.999999999Z"~string\n )~timestamp^string_to_timestamp\n)~string^timestamp_to_string', - type: "string", - }, - { - original: { - name: "toType_timestamp", - expr: "type(timestamp('2009-02-13T23:31:30Z'))", - value: { typeValue: "google.protobuf.Timestamp" }, - }, - ast: 'type(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'type(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~type(timestamp)^type', - type: "type(timestamp)", - }, - { - original: { - name: "type_comparison", - expr: "google.protobuf.Timestamp == type(timestamp('2009-02-13T23:31:30Z'))", - value: { boolValue: true }, - }, - ast: '_==_(\n google^#*expr.Expr_IdentExpr#.protobuf^#*expr.Expr_SelectExpr#.Timestamp^#*expr.Expr_SelectExpr#,\n type(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n google.protobuf.Timestamp~type(timestamp)^google.protobuf.Timestamp,\n type(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n )~type(timestamp)^type\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "duration_conversions", - tests: [ - { - original: { - name: "toString_duration", - expr: "string(duration('1000000s'))", - value: { stringValue: "1000000s" }, - }, - ast: 'string(\n duration(\n "1000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'string(\n duration(\n "1000000s"~string\n )~duration^string_to_duration\n)~string^duration_to_string', - type: "string", - }, - { - original: { - name: "toType_duration", - expr: "type(duration('1000000s'))", - value: { typeValue: "google.protobuf.Duration" }, - }, - ast: 'type(\n duration(\n "1000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'type(\n duration(\n "1000000s"~string\n )~duration^string_to_duration\n)~type(duration)^type', - type: "type(duration)", - }, - { - original: { - name: "type_comparison", - expr: "google.protobuf.Duration == type(duration('1000000s'))", - value: { boolValue: true }, - }, - ast: '_==_(\n google^#*expr.Expr_IdentExpr#.protobuf^#*expr.Expr_SelectExpr#.Duration^#*expr.Expr_SelectExpr#,\n type(\n duration(\n "1000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n google.protobuf.Duration~type(duration)^google.protobuf.Duration,\n type(\n duration(\n "1000000s"~string\n )~duration^string_to_duration\n )~type(duration)^type\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "timestamp_selectors", - tests: [ - { - original: { - name: "getDate", - expr: "timestamp('2009-02-13T23:31:30Z').getDate()", - value: { int64Value: "13" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDate()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDate()~int^timestamp_to_day_of_month_1_based', - type: "int", - }, - { - original: { - name: "getDayOfMonth", - expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth()", - value: { int64Value: "12" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth()~int^timestamp_to_day_of_month', - type: "int", - }, - { - original: { - name: "getDayOfWeek", - expr: "timestamp('2009-02-13T23:31:30Z').getDayOfWeek()", - value: { int64Value: "5" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfWeek()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfWeek()~int^timestamp_to_day_of_week', - type: "int", - }, - { - original: { - name: "getDayOfYear", - expr: "timestamp('2009-02-13T23:31:30Z').getDayOfYear()", - value: { int64Value: "43" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfYear()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfYear()~int^timestamp_to_day_of_year', - type: "int", - }, - { - original: { - name: "getFullYear", - expr: "timestamp('2009-02-13T23:31:30Z').getFullYear()", - value: { int64Value: "2009" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getFullYear()~int^timestamp_to_year', - type: "int", - }, - { - original: { - name: "getHours", - expr: "timestamp('2009-02-13T23:31:30Z').getHours()", - value: { int64Value: "23" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getHours()~int^timestamp_to_hours', - type: "int", - }, - { - original: { - name: "getMilliseconds", - expr: "timestamp('2009-02-13T23:31:20.123456789Z').getMilliseconds()", - value: { int64Value: "123" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:20.123456789Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMilliseconds()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:20.123456789Z"~string\n)~timestamp^string_to_timestamp.getMilliseconds()~int^timestamp_to_milliseconds', - type: "int", - }, - { - original: { - name: "getMinutes", - expr: "timestamp('2009-02-13T23:31:30Z').getMinutes()", - value: { int64Value: "31" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getMinutes()~int^timestamp_to_minutes', - type: "int", - }, - { - original: { - name: "getMonth", - expr: "timestamp('2009-02-13T23:31:30Z').getMonth()", - value: { int64Value: "1" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMonth()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getMonth()~int^timestamp_to_month', - type: "int", - }, - { - original: { - name: "getSeconds", - expr: "timestamp('2009-02-13T23:31:30Z').getSeconds()", - value: { int64Value: "30" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getSeconds()~int^timestamp_to_seconds', - type: "int", - }, - ], - }, - { - name: "timestamp_selectors_tz", - tests: [ - { - original: { - name: "getDate", - expr: "timestamp('2009-02-13T23:31:30Z').getDate('Australia/Sydney')", - value: { int64Value: "14" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDate(\n "Australia/Sydney"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDate(\n "Australia/Sydney"~string\n)~int^timestamp_to_day_of_month_1_based_with_tz', - type: "int", - }, - { - original: { - name: "getDayOfMonth_name_pos", - expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth('US/Central')", - value: { int64Value: "12" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n "US/Central"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n "US/Central"~string\n)~int^timestamp_to_day_of_month_with_tz', - type: "int", - }, - { - original: { - name: "getDayOfMonth_numerical_pos", - expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth('+11:00')", - value: { int64Value: "13" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n "+11:00"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n "+11:00"~string\n)~int^timestamp_to_day_of_month_with_tz', - type: "int", - }, - { - original: { - name: "getDayOfMonth_numerical_neg", - expr: "timestamp('2009-02-13T02:00:00Z').getDayOfMonth('-02:30')", - value: { int64Value: "11" }, - }, - ast: 'timestamp(\n "2009-02-13T02:00:00Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n "-02:30"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T02:00:00Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n "-02:30"~string\n)~int^timestamp_to_day_of_month_with_tz', - type: "int", - }, - { - original: { - name: "getDayOfMonth_name_neg", - expr: "timestamp('2009-02-13T02:00:00Z').getDayOfMonth('America/St_Johns')", - value: { int64Value: "11" }, - }, - ast: 'timestamp(\n "2009-02-13T02:00:00Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n "America/St_Johns"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T02:00:00Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n "America/St_Johns"~string\n)~int^timestamp_to_day_of_month_with_tz', - type: "int", - }, - { - original: { - name: "getDayOfWeek", - expr: "timestamp('2009-02-13T23:31:30Z').getDayOfWeek('UTC')", - value: { int64Value: "5" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfWeek(\n "UTC"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfWeek(\n "UTC"~string\n)~int^timestamp_to_day_of_week_with_tz', - type: "int", - }, - { - original: { - name: "getDayOfYear", - expr: "timestamp('2009-02-13T23:31:30Z').getDayOfYear('US/Central')", - value: { int64Value: "43" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfYear(\n "US/Central"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfYear(\n "US/Central"~string\n)~int^timestamp_to_day_of_year_with_tz', - type: "int", - }, - { - original: { - name: "getFullYear", - expr: "timestamp('2009-02-13T23:31:30Z').getFullYear('-09:30')", - value: { int64Value: "2009" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getFullYear(\n "-09:30"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getFullYear(\n "-09:30"~string\n)~int^timestamp_to_year_with_tz', - type: "int", - }, - { - original: { - name: "getHours", - expr: "timestamp('2009-02-13T23:31:30Z').getHours('02:00')", - value: { int64Value: "1" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours(\n "02:00"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getHours(\n "02:00"~string\n)~int^timestamp_to_hours_with_tz', - type: "int", - }, - { - original: { - name: "getMinutes", - expr: "timestamp('2009-02-13T23:31:30Z').getMinutes('Asia/Kathmandu')", - value: { int64Value: "16" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes(\n "Asia/Kathmandu"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getMinutes(\n "Asia/Kathmandu"~string\n)~int^timestamp_to_minutes_with_tz', - type: "int", - }, - { - original: { - name: "getMonth", - expr: "timestamp('2009-02-13T23:31:30Z').getMonth('UTC')", - value: { int64Value: "1" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMonth(\n "UTC"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getMonth(\n "UTC"~string\n)~int^timestamp_to_month_with_tz', - type: "int", - }, - { - original: { - name: "getSeconds", - expr: "timestamp('2009-02-13T23:31:30Z').getSeconds('-00:00')", - value: { int64Value: "30" }, - }, - ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds(\n "-00:00"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getSeconds(\n "-00:00"~string\n)~int^timestamp_to_seconds_tz', - type: "int", - }, - ], - }, - { - name: "timestamp_equality", - tests: [ - { - original: { - name: "eq_same", - expr: "timestamp('2009-02-13T23:31:30Z') == timestamp('2009-02-13T23:31:30Z')", - value: { boolValue: true }, - }, - ast: '_==_(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_diff", - expr: "timestamp('2009-02-13T23:31:29Z') == timestamp('2009-02-13T23:31:30Z')", - value: { boolValue: false }, - }, - ast: '_==_(\n timestamp(\n "2009-02-13T23:31:29Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n timestamp(\n "2009-02-13T23:31:29Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "neq_same", - expr: "timestamp('1945-05-07T02:41:00Z') != timestamp('1945-05-07T02:41:00Z')", - value: { boolValue: false }, - }, - ast: '_!=_(\n timestamp(\n "1945-05-07T02:41:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "1945-05-07T02:41:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n timestamp(\n "1945-05-07T02:41:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "1945-05-07T02:41:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "neq_diff", - expr: "timestamp('2000-01-01T00:00:00Z') != timestamp('2001-01-01T00:00:00Z')", - value: { boolValue: true }, - }, - ast: '_!=_(\n timestamp(\n "2000-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n timestamp(\n "2000-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^not_equals', - type: "bool", - }, - ], - }, - { - name: "duration_equality", - tests: [ - { - original: { - name: "eq_same", - expr: "duration('123s') == duration('123s')", - value: { boolValue: true }, - }, - ast: '_==_(\n duration(\n "123s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "123s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n duration(\n "123s"~string\n )~duration^string_to_duration,\n duration(\n "123s"~string\n )~duration^string_to_duration\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "eq_diff", - expr: "duration('60s') == duration('3600s')", - value: { boolValue: false }, - }, - ast: '_==_(\n duration(\n "60s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "3600s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n duration(\n "60s"~string\n )~duration^string_to_duration,\n duration(\n "3600s"~string\n )~duration^string_to_duration\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "neq_same", - expr: "duration('604800s') != duration('604800s')", - value: { boolValue: false }, - }, - ast: '_!=_(\n duration(\n "604800s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "604800s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n duration(\n "604800s"~string\n )~duration^string_to_duration,\n duration(\n "604800s"~string\n )~duration^string_to_duration\n)~bool^not_equals', - type: "bool", - }, - { - original: { - name: "neq_diff", - expr: "duration('86400s') != duration('86164s')", - value: { boolValue: true }, - }, - ast: '_!=_(\n duration(\n "86400s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "86164s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_!=_(\n duration(\n "86400s"~string\n )~duration^string_to_duration,\n duration(\n "86164s"~string\n )~duration^string_to_duration\n)~bool^not_equals', - type: "bool", - }, - ], - }, - { - name: "timestamp_arithmetic", - tests: [ - { - original: { - name: "add_duration_to_time", - expr: "timestamp('2009-02-13T23:00:00Z') + duration('240s') == timestamp('2009-02-13T23:04:00Z')", - value: { boolValue: true }, - }, - ast: '_==_(\n _+_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "240s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:04:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _+_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "240s"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n "2009-02-13T23:04:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "add_time_to_duration", - expr: "duration('120s') + timestamp('2009-02-13T23:01:00Z') == timestamp('2009-02-13T23:03:00Z')", - value: { boolValue: true }, - }, - ast: '_==_(\n _+_(\n duration(\n "120s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:01:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:03:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _+_(\n duration(\n "120s"~string\n )~duration^string_to_duration,\n timestamp(\n "2009-02-13T23:01:00Z"~string\n )~timestamp^string_to_timestamp\n )~timestamp^add_duration_timestamp,\n timestamp(\n "2009-02-13T23:03:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "add_duration_to_duration", - expr: "duration('600s') + duration('50s') == duration('650s')", - value: { boolValue: true }, - }, - ast: '_==_(\n _+_(\n duration(\n "600s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "50s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n "650s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _+_(\n duration(\n "600s"~string\n )~duration^string_to_duration,\n duration(\n "50s"~string\n )~duration^string_to_duration\n )~duration^add_duration_duration,\n duration(\n "650s"~string\n )~duration^string_to_duration\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "add_time_to_duration_nanos_negative", - expr: "timestamp('0001-01-01T00:00:01.000000001Z') + duration('-999999999ns') == timestamp('0001-01-01T00:00:00.000000002Z')", - value: { boolValue: true }, - }, - ast: '_==_(\n _+_(\n timestamp(\n "0001-01-01T00:00:01.000000001Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-999999999ns"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "0001-01-01T00:00:00.000000002Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _+_(\n timestamp(\n "0001-01-01T00:00:01.000000001Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "-999999999ns"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n "0001-01-01T00:00:00.000000002Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "add_time_to_duration_nanos_positive", - expr: "timestamp('0001-01-01T00:00:01.999999999Z') + duration('999999999ns') == timestamp('0001-01-01T00:00:02.999999998Z')", - value: { boolValue: true }, - }, - ast: '_==_(\n _+_(\n timestamp(\n "0001-01-01T00:00:01.999999999Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "999999999ns"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "0001-01-01T00:00:02.999999998Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _+_(\n timestamp(\n "0001-01-01T00:00:01.999999999Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "999999999ns"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n "0001-01-01T00:00:02.999999998Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "subtract_duration_from_time", - expr: "timestamp('2009-02-13T23:10:00Z') - duration('600s') == timestamp('2009-02-13T23:00:00Z')", - value: { boolValue: true }, - }, - ast: '_==_(\n _-_(\n timestamp(\n "2009-02-13T23:10:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "600s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _-_(\n timestamp(\n "2009-02-13T23:10:00Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "600s"~string\n )~duration^string_to_duration\n )~timestamp^subtract_timestamp_duration,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "subtract_time_from_time", - expr: "timestamp('2009-02-13T23:31:00Z') - timestamp('2009-02-13T23:29:00Z') == duration('120s')", - value: { boolValue: true }, - }, - ast: '_==_(\n _-_(\n timestamp(\n "2009-02-13T23:31:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:29:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n "120s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _-_(\n timestamp(\n "2009-02-13T23:31:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:29:00Z"~string\n )~timestamp^string_to_timestamp\n )~duration^subtract_timestamp_timestamp,\n duration(\n "120s"~string\n )~duration^string_to_duration\n)~bool^equals', - type: "bool", - }, - { - original: { - name: "subtract_duration_from_duration", - expr: "duration('900s') - duration('42s') == duration('858s')", - value: { boolValue: true }, - }, - ast: '_==_(\n _-_(\n duration(\n "900s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "42s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n "858s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_==_(\n _-_(\n duration(\n "900s"~string\n )~duration^string_to_duration,\n duration(\n "42s"~string\n )~duration^string_to_duration\n )~duration^subtract_duration_duration,\n duration(\n "858s"~string\n )~duration^string_to_duration\n)~bool^equals', - type: "bool", - }, - ], - }, - { - name: "comparisons", - tests: [ - { - original: { - name: "leq_timestamp_true", - expr: "timestamp('2009-02-13T23:00:00Z') \u003c= timestamp('2009-02-13T23:00:00Z')", - value: { boolValue: true }, - }, - ast: '_\u003c=_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^less_equals_timestamp', - type: "bool", - }, - { - original: { - name: "leq_timestamp_false", - expr: "timestamp('2009-02-13T23:00:00Z') \u003c= timestamp('2009-02-13T22:59:59Z')", - value: { boolValue: false }, - }, - ast: '_\u003c=_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T22:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T22:59:59Z"~string\n )~timestamp^string_to_timestamp\n)~bool^less_equals_timestamp', - type: "bool", - }, - { - original: { - name: "leq_duration_true", - expr: "duration('200s') \u003c= duration('200s')", - value: { boolValue: true }, - }, - ast: '_\u003c=_(\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n duration(\n "200s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^less_equals_duration', - type: "bool", - }, - { - original: { - name: "leq_duration_false", - expr: "duration('300s') \u003c= duration('200s')", - value: { boolValue: false }, - }, - ast: '_\u003c=_(\n duration(\n "300s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c=_(\n duration(\n "300s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^less_equals_duration', - type: "bool", - }, - { - original: { - name: "less_timestamp_true", - expr: "timestamp('2009-02-13T23:00:00Z') \u003c timestamp('2009-03-13T23:00:00Z')", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-03-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-03-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^less_timestamp', - type: "bool", - }, - { - original: { - name: "less_duration_true", - expr: "duration('200s') \u003c duration('300s')", - value: { boolValue: true }, - }, - ast: '_\u003c_(\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "300s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003c_(\n duration(\n "200s"~string\n )~duration^string_to_duration,\n duration(\n "300s"~string\n )~duration^string_to_duration\n)~bool^less_duration', - type: "bool", - }, - { - original: { - name: "geq_timestamp_true", - expr: "timestamp('2009-02-13T23:00:00Z') \u003e= timestamp('2009-02-13T23:00:00Z')", - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_equals_timestamp', - type: "bool", - }, - { - original: { - name: "geq_timestamp_false", - expr: "timestamp('2009-02-13T22:58:00Z') \u003e= timestamp('2009-02-13T23:00:00Z')", - value: { boolValue: false }, - }, - ast: '_\u003e=_(\n timestamp(\n "2009-02-13T22:58:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n timestamp(\n "2009-02-13T22:58:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_equals_timestamp', - type: "bool", - }, - { - original: { - name: "geq_duration_true", - expr: "duration('200s') \u003e= duration('200s')", - value: { boolValue: true }, - }, - ast: '_\u003e=_(\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n duration(\n "200s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^greater_equals_duration', - type: "bool", - }, - { - original: { - name: "geq_duration_false", - expr: "duration('120s') \u003e= duration('200s')", - value: { boolValue: false }, - }, - ast: '_\u003e=_(\n duration(\n "120s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e=_(\n duration(\n "120s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^greater_equals_duration', - type: "bool", - }, - { - original: { - name: "greater_timestamp_true", - expr: "timestamp('2009-02-13T23:59:00Z') \u003e timestamp('2009-02-13T23:00:00Z')", - value: { boolValue: true }, - }, - ast: '_\u003e_(\n timestamp(\n "2009-02-13T23:59:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n timestamp(\n "2009-02-13T23:59:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_timestamp', - type: "bool", - }, - { - original: { - name: "greater_duration_true", - expr: "duration('300s') \u003e duration('200s')", - value: { boolValue: true }, - }, - ast: '_\u003e_(\n duration(\n "300s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_\u003e_(\n duration(\n "300s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^greater_duration', - type: "bool", - }, - ], - }, - { - name: "duration_converters", - tests: [ - { - original: { - name: "get_hours", - expr: "duration('10000s').getHours()", - value: { int64Value: "2" }, - }, - ast: 'duration(\n "10000s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours()^#*expr.Expr_CallExpr#', - checkedAst: - 'duration(\n "10000s"~string\n)~duration^string_to_duration.getHours()~int^duration_to_hours', - type: "int", - }, - { - original: { - name: "get_milliseconds", - description: - "Obtain the milliseconds component of the duration. Note, this is not the same as converting the duration to milliseconds. This behavior will be deprecated.", - expr: "x.getMilliseconds()", - typeEnv: [ - { - name: "x", - ident: { - type: { messageType: "google.protobuf.Duration" }, - }, - }, - ], - bindings: { - x: { - value: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Duration", - value: "123.321456789s", - }, - }, - }, - }, - value: { int64Value: "321" }, - }, - ast: "x^#*expr.Expr_IdentExpr#.getMilliseconds()^#*expr.Expr_CallExpr#", - checkedAst: - "x~duration^x.getMilliseconds()~int^duration_to_milliseconds", - type: "int", - }, - { - original: { - name: "get_minutes", - expr: "duration('3730s').getMinutes()", - value: { int64Value: "62" }, - }, - ast: 'duration(\n "3730s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#', - checkedAst: - 'duration(\n "3730s"~string\n)~duration^string_to_duration.getMinutes()~int^duration_to_minutes', - type: "int", - }, - { - original: { - name: "get_seconds", - expr: "duration('3730s').getSeconds()", - value: { int64Value: "3730" }, - }, - ast: 'duration(\n "3730s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#', - checkedAst: - 'duration(\n "3730s"~string\n)~duration^string_to_duration.getSeconds()~int^duration_to_seconds', - type: "int", - }, - ], - }, - { - name: "timestamp_range", - tests: [ - { - original: { - name: "from_string_under", - expr: "timestamp('0000-01-01T00:00:00Z')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: 'timestamp(\n "0000-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "0000-01-01T00:00:00Z"~string\n)~timestamp^string_to_timestamp', - type: "timestamp", - }, - { - original: { - name: "from_string_over", - expr: "timestamp('10000-01-01T00:00:00Z')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: 'timestamp(\n "10000-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'timestamp(\n "10000-01-01T00:00:00Z"~string\n)~timestamp^string_to_timestamp', - type: "timestamp", - }, - { - original: { - name: "add_duration_under", - expr: "timestamp('0001-01-01T00:00:00Z') + duration('-1s')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_+_(\n timestamp(\n "0001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-1s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n timestamp(\n "0001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "-1s"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration', - type: "timestamp", - }, - { - original: { - name: "add_duration_over", - expr: "timestamp('9999-12-31T23:59:59Z') + duration('1s')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_+_(\n timestamp(\n "9999-12-31T23:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "1s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n timestamp(\n "9999-12-31T23:59:59Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "1s"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration', - type: "timestamp", - }, - { - original: { - name: "add_duration_nanos_over", - expr: "timestamp('9999-12-31T23:59:59.999999999Z') + duration('1ns')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_+_(\n timestamp(\n "9999-12-31T23:59:59.999999999Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "1ns"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n timestamp(\n "9999-12-31T23:59:59.999999999Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "1ns"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration', - type: "timestamp", - }, - { - original: { - name: "add_duration_nanos_under", - expr: "timestamp('0001-01-01T00:00:00Z') + duration('-1ns')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_+_(\n timestamp(\n "0001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-1ns"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n timestamp(\n "0001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "-1ns"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration', - type: "timestamp", - }, - { - original: { - name: "sub_time_duration_over", - expr: "timestamp('9999-12-31T23:59:59Z') - timestamp('0001-01-01T00:00:00Z')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_-_(\n timestamp(\n "9999-12-31T23:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "0001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_-_(\n timestamp(\n "9999-12-31T23:59:59Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "0001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~duration^subtract_timestamp_timestamp', - type: "duration", - }, - { - original: { - name: "sub_time_duration_under", - expr: "timestamp('0001-01-01T00:00:00Z') - timestamp('9999-12-31T23:59:59Z')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_-_(\n timestamp(\n "0001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "9999-12-31T23:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_-_(\n timestamp(\n "0001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "9999-12-31T23:59:59Z"~string\n )~timestamp^string_to_timestamp\n)~duration^subtract_timestamp_timestamp', - type: "duration", - }, - ], - }, - { - name: "duration_range", - tests: [ - { - original: { - name: "from_string_under", - expr: "duration('-320000000000s')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: 'duration(\n "-320000000000s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'duration(\n "-320000000000s"~string\n)~duration^string_to_duration', - type: "duration", - }, - { - original: { - name: "from_string_over", - expr: "duration('320000000000s')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: 'duration(\n "320000000000s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'duration(\n "320000000000s"~string\n)~duration^string_to_duration', - type: "duration", - }, - { - original: { - name: "add_under", - expr: "duration('-200000000000s') + duration('-200000000000s')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_+_(\n duration(\n "-200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n duration(\n "-200000000000s"~string\n )~duration^string_to_duration,\n duration(\n "-200000000000s"~string\n )~duration^string_to_duration\n)~duration^add_duration_duration', - type: "duration", - }, - { - original: { - name: "add_over", - expr: "duration('200000000000s') + duration('200000000000s')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_+_(\n duration(\n "200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n duration(\n "200000000000s"~string\n )~duration^string_to_duration,\n duration(\n "200000000000s"~string\n )~duration^string_to_duration\n)~duration^add_duration_duration', - type: "duration", - }, - { - original: { - name: "sub_under", - expr: "duration('-200000000000s') - duration('200000000000s')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_-_(\n duration(\n "-200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_-_(\n duration(\n "-200000000000s"~string\n )~duration^string_to_duration,\n duration(\n "200000000000s"~string\n )~duration^string_to_duration\n)~duration^subtract_duration_duration', - type: "duration", - }, - { - original: { - name: "sub_over", - expr: "duration('200000000000s') - duration('-200000000000s')", - evalError: { errors: [{ message: "range" }] }, - }, - ast: '_-_(\n duration(\n "200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_-_(\n duration(\n "200000000000s"~string\n )~duration^string_to_duration,\n duration(\n "-200000000000s"~string\n )~duration^string_to_duration\n)~duration^subtract_duration_duration', - type: "duration", - }, - ], - }, - ], - }, - { - name: "type_deductions", - suites: [ - { - name: "constant_literals", - tests: [ - { - original: { - name: "bool", - expr: "true", - typedResult: { - result: { boolValue: true }, - deducedType: { primitive: "BOOL" }, - }, - }, - ast: "true^#*expr.Constant_BoolValue#", - checkedAst: "true~bool", - type: "bool", - }, - { - original: { - name: "int", - expr: "42", - typedResult: { - result: { int64Value: "42" }, - deducedType: { primitive: "INT64" }, - }, - }, - ast: "42^#*expr.Constant_Int64Value#", - checkedAst: "42~int", - type: "int", - }, - { - original: { - name: "uint", - expr: "42u", - typedResult: { - result: { uint64Value: "42" }, - deducedType: { primitive: "UINT64" }, - }, - }, - ast: "42u^#*expr.Constant_Uint64Value#", - checkedAst: "42u~uint", - type: "uint", - }, - { - original: { - name: "double", - expr: "0.1", - typedResult: { - result: { doubleValue: 0.1 }, - deducedType: { primitive: "DOUBLE" }, - }, - }, - ast: "0.1^#*expr.Constant_DoubleValue#", - checkedAst: "0.1~double", - type: "double", - }, - { - original: { - name: "string", - expr: '"test"', - typedResult: { - result: { stringValue: "test" }, - deducedType: { primitive: "STRING" }, - }, - }, - ast: '"test"^#*expr.Constant_StringValue#', - checkedAst: '"test"~string', - type: "string", - }, - { - original: { - name: "bytes", - expr: 'b"test"', - typedResult: { - result: { bytesValue: "dGVzdA==" }, - deducedType: { primitive: "BYTES" }, - }, - }, - ast: 'b"test"^#*expr.Constant_BytesValue#', - checkedAst: 'b"test"~bytes', - type: "bytes", - }, - { - original: { - name: "null", - expr: "null", - typedResult: { - result: { nullValue: null }, - deducedType: { null: null }, - }, - }, - ast: "null^#*expr.Constant_NullValue#", - checkedAst: "null~null", - type: "null", - }, - ], - }, - { - name: "complex_initializers", - tests: [ - { - original: { - name: "list", - expr: "[1]", - typedResult: { - result: { listValue: { values: [{ int64Value: "1" }] } }, - deducedType: { - listType: { elemType: { primitive: "INT64" } }, - }, - }, - }, - ast: "[\n 1^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#", - checkedAst: "[\n 1~int\n]~list(int)", - type: "list(int)", - }, - { - original: { - name: "map", - expr: "{'abc': 123}", - typedResult: { - result: { - mapValue: { - entries: [ - { - key: { stringValue: "abc" }, - value: { int64Value: "123" }, - }, - ], - }, - }, - deducedType: { - mapType: { - keyType: { primitive: "STRING" }, - valueType: { primitive: "INT64" }, - }, - }, - }, - }, - ast: '{\n "abc"^#*expr.Constant_StringValue#:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', - checkedAst: '{\n "abc"~string:123~int\n}~map(string, int)', - type: "map(string, int)", - }, - { - original: { - name: "struct", - expr: "TestAllTypes{single_int64: 1}", - container: "cel.expr.conformance.proto3", - typedResult: { - result: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - singleInt64: "1", - }, - }, - deducedType: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ast: "TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", - type: "cel.expr.conformance.proto3.TestAllTypes", - }, - ], - }, - { - name: "field_access", - tests: [ - { - original: { - name: "int_field", - expr: "TestAllTypes{single_int64: 1}.single_int64", - container: "cel.expr.conformance.proto3", - typedResult: { - result: { int64Value: "1" }, - deducedType: { primitive: "INT64" }, - }, - }, - ast: "TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int", - type: "int", - }, - { - original: { - name: "repeated_int_field", - expr: "TestAllTypes{}.repeated_int64", - container: "cel.expr.conformance.proto3", - typedResult: { - result: { listValue: {} }, - deducedType: { - listType: { elemType: { primitive: "INT64" } }, - }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int64~list(int)", - type: "list(int)", - }, - { - original: { - name: "map_bool_int", - expr: "TestAllTypes{}.map_bool_int64", - container: "cel.expr.conformance.proto3", - typedResult: { - result: { mapValue: {} }, - deducedType: { - mapType: { - keyType: { primitive: "BOOL" }, - valueType: { primitive: "INT64" }, - }, - }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_bool_int64^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_bool_int64~map(bool, int)", - type: "map(bool, int)", - }, - { - original: { - name: "enum_field", - expr: "TestAllTypes{}.standalone_enum", - container: "cel.expr.conformance.proto3", - typedResult: { - result: { int64Value: "0" }, - deducedType: { primitive: "INT64" }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int", - type: "int", - }, - { - original: { - name: "repeated_enum_field", - expr: "TestAllTypes{}.repeated_nested_enum", - container: "cel.expr.conformance.proto3", - typedResult: { - result: { listValue: {} }, - deducedType: { - listType: { elemType: { primitive: "INT64" } }, - }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)", - type: "list(int)", - }, - { - original: { - name: "enum_map_field", - expr: "TestAllTypes{}.map_int32_enum", - container: "cel.expr.conformance.proto3", - typedResult: { - result: { mapValue: {} }, - deducedType: { - mapType: { - keyType: { primitive: "INT64" }, - valueType: { primitive: "INT64" }, - }, - }, - }, - }, - ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_int32_enum^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_int32_enum~map(int, int)", - type: "map(int, int)", - }, - ], - }, - { - name: "indexing", - tests: [ - { - original: { - name: "list", - expr: "['foo'][0]", - typedResult: { - result: { stringValue: "foo" }, - deducedType: { primitive: "STRING" }, - }, - }, - ast: '_[_](\n [\n "foo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n [\n "foo"~string\n ]~list(string),\n 0~int\n)~string^index_list', - type: "string", - }, - { - original: { - name: "map", - expr: "{'abc': 123}['abc']", - typedResult: { - result: { int64Value: "123" }, - deducedType: { primitive: "INT64" }, - }, - }, - ast: '_[_](\n {\n "abc"^#*expr.Constant_StringValue#:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_[_](\n {\n "abc"~string:123~int\n }~map(string, int),\n "abc"~string\n)~int^index_map', - type: "int", - }, - ], - }, - { - name: "functions", - tests: [ - { - original: { - name: "nested_calls", - expr: "('foo' + 'bar').startsWith('foo')", - typedResult: { - result: { boolValue: true }, - deducedType: { primitive: "BOOL" }, - }, - }, - ast: '_+_(\n "foo"^#*expr.Constant_StringValue#,\n "bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.startsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', - checkedAst: - '_+_(\n "foo"~string,\n "bar"~string\n)~string^add_string.startsWith(\n "foo"~string\n)~bool^starts_with_string', - type: "bool", - }, - { - original: { - name: "function_result_type", - expr: "fn('abc', 123)", - checkOnly: true, - typeEnv: [ - { - name: "fn", - function: { - overloads: [ - { - overloadId: "fn_string_int", - params: [ - { primitive: "STRING" }, - { primitive: "INT64" }, - ], - resultType: { primitive: "STRING" }, - }, - ], - }, - }, - ], - typedResult: { deducedType: { primitive: "STRING" } }, - }, - ast: 'fn(\n "abc"^#*expr.Constant_StringValue#,\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', - checkedAst: - 'fn(\n "abc"~string,\n 123~int\n)~string^fn_string_int', - type: "string", - }, - ], - }, - { - name: "flexible_type_parameter_assignment", - tests: [ - { - original: { - name: "list_parameter", - expr: "[[], [[]], [[[]]], [[[[]]]]]", - checkOnly: true, - typedResult: { - deducedType: { - listType: { - elemType: { - listType: { - elemType: { - listType: { - elemType: { - listType: { - elemType: { - listType: { elemType: { dyn: {} } }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - ast: "[\n []^#*expr.Expr_ListExpr#,\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n []~list(list(list(list(dyn)))),\n [\n []~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n [\n [\n []~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n [\n [\n [\n []~list(dyn)\n ]~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn))))\n]~list(list(list(list(list(dyn)))))", - type: "list(list(list(list(list(dyn)))))", - }, - { - original: { - name: "list_parameter_order_independent", - expr: "[[[[[]]]], [], [[[]]]]", - checkOnly: true, - typedResult: { - deducedType: { - listType: { - elemType: { - listType: { - elemType: { - listType: { - elemType: { - listType: { - elemType: { - listType: { elemType: { dyn: {} } }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - ast: "[\n [\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#,\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n [\n [\n [\n []~list(dyn)\n ]~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n []~list(list(list(list(dyn)))),\n [\n [\n []~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn))))\n]~list(list(list(list(list(dyn)))))", - type: "list(list(list(list(list(dyn)))))", - }, - { - original: { - name: "comprehension_type_var_aliasing", - expr: "msg.repeated_nested_message.map(x, x).map(y, y.bb)", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { - deducedType: { - listType: { elemType: { primitive: "INT64" } }, - }, - }, - }, - ast: "__comprehension__(\n // Variable\n y,\n // Target\n __comprehension__(\n // Variable\n x,\n // Target\n msg^#*expr.Expr_IdentExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n y^#*expr.Expr_IdentExpr#.bb^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", - checkedAst: - "__comprehension__(\n // Variable\n y,\n // Target\n __comprehension__(\n // Variable\n x,\n // Target\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // Accumulator\n @result,\n // Init\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^@result,\n [\n x~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^x\n ]~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n // Result\n @result~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^@result)~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n y~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^y.bb~int\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", - type: "list(int)", - }, - { - original: { - name: "overload_type_var_aliasing", - expr: "([] + msg.repeated_nested_message + [])[0].bb", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { deducedType: { primitive: "INT64" } }, - }, - ast: "_[_](\n _+_(\n _+_(\n []^#*expr.Expr_ListExpr#,\n msg^#*expr.Expr_IdentExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.bb^#*expr.Expr_SelectExpr#", - checkedAst: - "_[_](\n _+_(\n _+_(\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n 0~int\n)~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^index_list.bb~int", - type: "int", - }, - { - original: { - name: "unconstrained_type_var_as_dyn", - expr: "([].map(x,x))[0].foo", - checkOnly: true, - typedResult: { deducedType: { dyn: {} } }, - }, - ast: "_[_](\n __comprehension__(\n // Variable\n x,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.foo^#*expr.Expr_SelectExpr#", - checkedAst: - "_[_](\n __comprehension__(\n // Variable\n x,\n // Target\n []~list(dyn),\n // Accumulator\n @result,\n // Init\n []~list(dyn),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(dyn)^@result,\n [\n x~dyn^x\n ]~list(dyn)\n )~list(dyn)^add_list,\n // Result\n @result~list(dyn)^@result)~list(dyn),\n 0~int\n)~dyn^index_list.foo~dyn", - type: "dyn", - }, - { - original: { - name: "list_parameters_do_not_unify", - expr: "[msg.single_int64_wrapper, msg.single_string_wrapper]", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { - deducedType: { listType: { elemType: { dyn: {} } } }, - }, - }, - ast: "[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_string_wrapper~wrapper(string)\n]~list(dyn)", - type: "list(dyn)", - }, - { - original: { - name: "optional_none", - expr: "[optional.none(), optional.of(1)]", - checkOnly: true, - typedResult: { - deducedType: { - listType: { - elemType: { - abstractType: { - name: "optional_type", - parameterTypes: [{ primitive: "INT64" }], - }, - }, - }, - }, - }, - }, - ast: "[\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n]~list(optional_type(int))", - type: "list(optional_type(int))", - }, - { - original: { - name: "optional_none_2", - expr: "[optional.of(1), optional.none()]", - checkOnly: true, - typedResult: { - deducedType: { - listType: { - elemType: { - abstractType: { - name: "optional_type", - parameterTypes: [{ primitive: "INT64" }], - }, - }, - }, - }, - }, - }, - ast: "[\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n]~list(optional_type(int))", - type: "list(optional_type(int))", - }, - { - original: { - name: "optional_dyn_promotion", - expr: "[optional.of(1), optional.of(dyn(1))]", - checkOnly: true, - typedResult: { - deducedType: { - listType: { - elemType: { - abstractType: { - name: "optional_type", - parameterTypes: [{ dyn: {} }], - }, - }, - }, - }, - }, - }, - ast: "[\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of\n]~list(optional_type(dyn))", - type: "list(optional_type(dyn))", - }, - { - original: { - name: "optional_dyn_promotion_2", - expr: "[optional.of(dyn(1)), optional.of(1)]", - checkOnly: true, - typedResult: { - deducedType: { - listType: { - elemType: { - abstractType: { - name: "optional_type", - parameterTypes: [{ dyn: {} }], - }, - }, - }, - }, - }, - }, - ast: "[\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n]~list(optional_type(dyn))", - type: "list(optional_type(dyn))", - }, - { - original: { - name: "optional_in_ternary", - expr: "true ? optional.of(dyn(1)) : optional.of(1)", - checkOnly: true, - typedResult: { - deducedType: { - abstractType: { - name: "optional_type", - parameterTypes: [{ dyn: {} }], - }, - }, - }, - }, - ast: "_?_:_(\n true^#*expr.Constant_BoolValue#,\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n true~bool,\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~optional_type(dyn)^conditional", - type: "optional_type(dyn)", - }, - ], - }, - { - name: "wrappers", - tests: [ - { - original: { - name: "wrapper_promotion", - expr: "[msg.single_int64_wrapper, msg.single_int64]", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { - deducedType: { listType: { elemType: { wrapper: "INT64" } } }, - }, - }, - ast: "[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int\n]~list(wrapper(int))", - type: "list(wrapper(int))", - }, - { - original: { - name: "wrapper_promotion_2", - expr: "[msg.single_int64, msg.single_int64_wrapper]", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { - deducedType: { listType: { elemType: { wrapper: "INT64" } } }, - }, - }, - ast: "[\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int)\n]~list(int)", - type: "list(int)", - }, - { - original: { - name: "wrapper_dyn_promotion", - expr: "[msg.single_int64_wrapper, msg.single_int64, dyn(1)]", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { - deducedType: { listType: { elemType: { dyn: {} } } }, - }, - }, - ast: "[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n dyn(\n 1~int\n )~dyn^to_dyn\n]~list(dyn)", - type: "list(dyn)", - }, - { - original: { - name: "wrapper_dyn_promotion_2", - expr: "[dyn(1), msg.single_int64_wrapper, msg.single_int64]", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { - deducedType: { listType: { elemType: { dyn: {} } } }, - }, - }, - ast: "[\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#", - checkedAst: - "[\n dyn(\n 1~int\n )~dyn^to_dyn,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int\n]~list(dyn)", - type: "list(dyn)", - }, - { - original: { - name: "wrapper_primitive_assignable", - expr: "msg.single_int64_wrapper + 1", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { deducedType: { primitive: "INT64" } }, - }, - ast: "_+_(\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_+_(\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n 1~int\n)~int^add_int64", - type: "int", - }, - { - original: { - name: "wrapper_null_assignable", - expr: "msg.single_int64_wrapper == null", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { deducedType: { primitive: "BOOL" } }, - }, - ast: "_==_(\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "wrapper_ternary_parameter_assignment", - expr: "false ? msg.single_int64_wrapper : null", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { deducedType: { wrapper: "INT64" } }, - }, - ast: "_?_:_(\n false^#*expr.Constant_BoolValue#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n false~bool,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n null~null\n)~wrapper(int)^conditional", - type: "wrapper(int)", - }, - { - original: { - name: "wrapper_ternary_parameter_assignment_2", - expr: "true ? msg.single_int64_wrapper : 42", - checkOnly: true, - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - typedResult: { deducedType: { wrapper: "INT64" } }, - }, - ast: "_?_:_(\n true^#*expr.Constant_BoolValue#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_?_:_(\n true~bool,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n 42~int\n)~wrapper(int)^conditional", - type: "wrapper(int)", - }, - ], - }, - { - name: "type_parameters", - tests: [ - { - original: { - name: "multiple_parameters_generality", - expr: "[tuple(1, 2u, 3.0), tuple(dyn(1), dyn(2u), dyn(3.0))][0]", - checkOnly: true, - typeEnv: [ - { - name: "tuple", - function: { - overloads: [ - { - overloadId: "tuple_T_U_V", - params: [ - { typeParam: "T" }, - { typeParam: "U" }, - { typeParam: "V" }, - ], - resultType: { - abstractType: { - name: "tuple", - parameterTypes: [ - { typeParam: "T" }, - { typeParam: "U" }, - { typeParam: "V" }, - ], - }, - }, - }, - ], - }, - }, - ], - typedResult: { - deducedType: { - abstractType: { - name: "tuple", - parameterTypes: [{ dyn: {} }, { dyn: {} }, { dyn: {} }], - }, - }, - }, - }, - ast: "_[_](\n [\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V,\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n dyn(\n 3~double\n )~dyn^to_dyn\n )~tuple(dyn, dyn, dyn)^tuple_T_U_V\n ]~list(tuple(dyn, dyn, dyn)),\n 0~int\n)~tuple(dyn, dyn, dyn)^index_list", - type: "tuple(dyn, dyn, dyn)", - }, - { - original: { - name: "multiple_parameters_generality_2", - expr: "sort(tuple(dyn(1), 2u, 3.0))", - checkOnly: true, - typeEnv: [ - { - name: "tuple", - function: { - overloads: [ - { - overloadId: "tuple_T_U_V", - params: [ - { typeParam: "T" }, - { typeParam: "U" }, - { typeParam: "V" }, - ], - resultType: { - abstractType: { - name: "tuple", - parameterTypes: [ - { typeParam: "T" }, - { typeParam: "U" }, - { typeParam: "V" }, - ], - }, - }, - }, - ], - }, - }, - { - name: "sort", - function: { - overloads: [ - { - overloadId: "sort_tuple_T_T_T", - params: [ - { - abstractType: { - name: "tuple", - parameterTypes: [ - { typeParam: "T" }, - { typeParam: "T" }, - { typeParam: "T" }, - ], - }, - }, - ], - resultType: { - abstractType: { - name: "tuple", - parameterTypes: [ - { typeParam: "T" }, - { typeParam: "T" }, - { typeParam: "T" }, - ], - }, - }, - }, - ], - }, - }, - ], - typedResult: { - deducedType: { - abstractType: { - name: "tuple", - parameterTypes: [{ dyn: {} }, { dyn: {} }, { dyn: {} }], - }, - }, - }, - }, - ast: "sort(\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "sort(\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint,\n 3~double\n )~tuple(dyn, uint, double)^tuple_T_U_V\n)~tuple(dyn, dyn, dyn)^sort_tuple_T_T_T", - type: "tuple(dyn, dyn, dyn)", - }, - { - original: { - name: "multiple_parameters_parameterized_ovl", - expr: "tuple(1, 2u, 3.0) == tuple(1, dyn(2u), dyn(3.0))", - checkOnly: true, - typeEnv: [ - { - name: "tuple", - function: { - overloads: [ - { - overloadId: "tuple_T_U_V", - params: [ - { typeParam: "T" }, - { typeParam: "U" }, - { typeParam: "V" }, - ], - resultType: { - abstractType: { - name: "tuple", - parameterTypes: [ - { typeParam: "T" }, - { typeParam: "U" }, - { typeParam: "V" }, - ], - }, - }, - }, - ], - }, - }, - ], - typedResult: { deducedType: { primitive: "BOOL" } }, - }, - ast: "_==_(\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n 1^#*expr.Constant_Int64Value#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V,\n tuple(\n 1~int,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n dyn(\n 3~double\n )~dyn^to_dyn\n )~tuple(int, dyn, dyn)^tuple_T_U_V\n)~bool^equals", - type: "bool", - }, - { - original: { - name: "multiple_parameters_parameterized_ovl_2", - expr: "tuple(dyn(1), dyn(2u), 3.0) == tuple(1, 2u, 3.0)", - checkOnly: true, - typeEnv: [ - { - name: "tuple", - function: { - overloads: [ - { - overloadId: "tuple_T_U_V", - params: [ - { typeParam: "T" }, - { typeParam: "U" }, - { typeParam: "V" }, - ], - resultType: { - abstractType: { - name: "tuple", - parameterTypes: [ - { typeParam: "T" }, - { typeParam: "U" }, - { typeParam: "V" }, - ], - }, - }, - }, - ], - }, - }, - ], - typedResult: { deducedType: { primitive: "BOOL" } }, - }, - ast: "_==_(\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 3~double\n )~tuple(dyn, dyn, double)^tuple_T_U_V,\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "legacy_nullable_types", - tests: [ - { - original: { - name: "null_assignable_to_message_parameter_candidate", - expr: "[msg, null][0]", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - }, - typedResult: { - result: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - }, - }, - deducedType: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ast: "_[_](\n [\n msg^#*expr.Expr_IdentExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list", - type: "null", - }, - { - original: { - name: "null_assignable_to_duration_parameter_candidate", - expr: "[msg.single_duration, null][0]", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - }, - typedResult: { - result: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Duration", - value: "0s", - }, - }, - deducedType: { wellKnown: "DURATION" }, - }, - }, - ast: "_[_](\n [\n msg^#*expr.Expr_IdentExpr#.single_duration^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_duration~duration,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list", - type: "null", - }, - { - original: { - name: "null_assignable_to_timestamp_parameter_candidate", - expr: "[msg.single_timestamp, null][0]", - typeEnv: [ - { - name: "msg", - ident: { - type: { - messageType: "cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - ], - bindings: { - msg: { - value: { - objectValue: { - "@type": - "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", - }, - }, - }, - }, - typedResult: { - result: { - objectValue: { - "@type": "type.googleapis.com/google.protobuf.Timestamp", - value: "1970-01-01T00:00:00Z", - }, - }, - deducedType: { wellKnown: "TIMESTAMP" }, - }, - }, - ast: "_[_](\n [\n msg^#*expr.Expr_IdentExpr#.single_timestamp^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_timestamp~timestamp,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list", - type: "null", - }, - { - original: { - name: "null_assignable_to_abstract_parameter_candidate", - expr: "[optional.of(1), null][0]", - checkOnly: true, - typedResult: { - deducedType: { - abstractType: { - name: "optional_type", - parameterTypes: [{ primitive: "INT64" }], - }, - }, - }, - }, - ast: "_[_](\n [\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_[_](\n [\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list", - type: "null", - }, - ], - }, - ], - }, - { name: "unknowns" }, - { - name: "wrappers", - suites: [ - { - name: "bool", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.BoolValue{value: true}}.single_any", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_any:google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.BoolValue{value: true}}.single_value", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_bool_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_bool_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "int32", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.Int32Value{value: 1}}.single_any", - container: "cel.expr.conformance.proto3", - value: { int64Value: "1" }, - }, - ast: "TestAllTypes{\n single_any:google.protobuf.Int32Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Int32Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.Int32Value{value: 1}}.single_value", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 1 }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.Int32Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int32Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_int32_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_int32_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "int64", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.Int64Value{value: 1}}.single_any", - container: "cel.expr.conformance.proto3", - value: { int64Value: "1" }, - }, - ast: "TestAllTypes{\n single_any:google.protobuf.Int64Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Int64Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "to_json_number", - expr: "TestAllTypes{single_value: google.protobuf.Int64Value{value: 1}}.single_value", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 1 }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_json_string", - expr: "TestAllTypes{single_value: google.protobuf.Int64Value{value: 9223372036854775807}}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "9223372036854775807" }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:9223372036854775807^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:9223372036854775807~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_int64_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_int64_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "uint32", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.UInt32Value{value: 1u}}.single_any", - container: "cel.expr.conformance.proto3", - value: { uint64Value: "1" }, - }, - ast: "TestAllTypes{\n single_any:google.protobuf.UInt32Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.UInt32Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.UInt32Value{value: 1u}}.single_value", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 1 }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.UInt32Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt32Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_uint32_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_uint32_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "uint64", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.UInt64Value{value: 1u}}.single_any", - container: "cel.expr.conformance.proto3", - value: { uint64Value: "1" }, - }, - ast: "TestAllTypes{\n single_any:google.protobuf.UInt64Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.UInt64Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "to_json_number", - expr: "TestAllTypes{single_value: google.protobuf.UInt64Value{value: 1u}}.single_value", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 1 }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_json_string", - expr: "TestAllTypes{single_value: google.protobuf.UInt64Value{value: 18446744073709551615u}}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "18446744073709551615" }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_uint64_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_uint64_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "float", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.FloatValue{value: 1.0}}.single_any", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 1 }, - }, - ast: "TestAllTypes{\n single_any:google.protobuf.FloatValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.FloatValue{\n value:1~double\n }~wrapper(double)^google.protobuf.FloatValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.FloatValue{value: 1.0}}.single_value", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 1 }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.FloatValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.FloatValue{\n value:1~double\n }~wrapper(double)^google.protobuf.FloatValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_float_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_float_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "double", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.DoubleValue{value: 1.0}}.single_any", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 1 }, - }, - ast: "TestAllTypes{\n single_any:google.protobuf.DoubleValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.DoubleValue{\n value:1~double\n }~wrapper(double)^google.protobuf.DoubleValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.DoubleValue{value: 1.0}}.single_value", - container: "cel.expr.conformance.proto3", - value: { doubleValue: 1 }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.DoubleValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.DoubleValue{\n value:1~double\n }~wrapper(double)^google.protobuf.DoubleValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_double_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_double_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "bytes", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.BytesValue{value: b'foo'}}.single_any", - container: "cel.expr.conformance.proto3", - value: { bytesValue: "Zm9v" }, - }, - ast: 'TestAllTypes{\n single_any:google.protobuf.BytesValue{\n value:b"foo"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.BytesValue{\n value:b"foo"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any', - type: "any", - }, - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.BytesValue{value: b'foo'}}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "Zm9v" }, - }, - ast: 'TestAllTypes{\n single_value:google.protobuf.BytesValue{\n value:b"foo"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.BytesValue{\n value:b"foo"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_bytes_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_bytes_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "string", - tests: [ - { - original: { - name: "to_any", - expr: "TestAllTypes{single_any: google.protobuf.StringValue{value: 'foo'}}.single_any", - container: "cel.expr.conformance.proto3", - value: { stringValue: "foo" }, - }, - ast: 'TestAllTypes{\n single_any:google.protobuf.StringValue{\n value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.StringValue{\n value:"foo"~string\n }~wrapper(string)^google.protobuf.StringValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any', - type: "any", - }, - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.StringValue{value: 'foo'}}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "foo" }, - }, - ast: 'TestAllTypes{\n single_value:google.protobuf.StringValue{\n value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.StringValue{\n value:"foo"~string\n }~wrapper(string)^google.protobuf.StringValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - { - original: { - name: "to_null", - expr: "TestAllTypes{single_string_wrapper: null} == TestAllTypes{}", - container: "cel.expr.conformance.proto3", - value: { boolValue: true }, - }, - ast: "_==_(\n TestAllTypes{\n single_string_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", - checkedAst: - "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", - type: "bool", - }, - ], - }, - { - name: "value", - tests: [ - { - original: { - name: "default_to_json", - expr: "TestAllTypes{single_any: TestAllTypes{}.single_value}.single_any", - container: "cel.expr.conformance.proto3", - value: { nullValue: null }, - }, - ast: "TestAllTypes{\n single_any:TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - ], - }, - { - name: "list_value", - tests: [ - { - original: { - name: "literal_to_any", - expr: "TestAllTypes{single_any: []}.single_any", - container: "cel.expr.conformance.proto3", - value: { listValue: {} }, - }, - ast: "TestAllTypes{\n single_any:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - ], - }, - { - name: "struct", - tests: [ - { - original: { - name: "literal_to_any", - expr: "TestAllTypes{single_any: {}}.single_any", - container: "cel.expr.conformance.proto3", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{\n single_any:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_any:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", - type: "any", - }, - ], - }, - { - name: "field_mask", - tests: [ - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.FieldMask{paths: ['foo', 'bar']}}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "foo,bar" }, - }, - ast: 'TestAllTypes{\n single_value:google.protobuf.FieldMask{\n paths:[\n "foo"^#*expr.Constant_StringValue#,\n "bar"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.FieldMask{\n paths:[\n "foo"~string,\n "bar"~string\n ]~list(string)\n }~google.protobuf.FieldMask^google.protobuf.FieldMask\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - ], - }, - { - name: "duration", - tests: [ - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: duration('1000000s')}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "1000000s" }, - }, - ast: 'TestAllTypes{\n single_value:duration(\n "1000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:duration(\n "1000000s"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - ], - }, - { - name: "timestamp", - tests: [ - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: timestamp('9999-12-31T23:59:59.999999999Z')}.single_value", - container: "cel.expr.conformance.proto3", - value: { stringValue: "9999-12-31T23:59:59.999999999Z" }, - }, - ast: 'TestAllTypes{\n single_value:timestamp(\n "9999-12-31T23:59:59.999999999Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', - checkedAst: - 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:timestamp(\n "9999-12-31T23:59:59.999999999Z"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', - type: "dyn", - }, - ], - }, - { - name: "empty", - tests: [ - { - original: { - name: "to_json", - expr: "TestAllTypes{single_value: google.protobuf.Empty{}}.single_value", - container: "cel.expr.conformance.proto3", - value: { mapValue: {} }, - }, - ast: "TestAllTypes{\n single_value:google.protobuf.Empty{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", - checkedAst: - "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Empty{}~google.protobuf.Empty^google.protobuf.Empty\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", - type: "dyn", - }, - ], - }, - ], - }, - ], -} as const; +import type { SerializedIncrementalTestSuite } from './tests.js';export const tests: SerializedIncrementalTestSuite = {"name":"conformance","suites":[{"name":"basic","suites":[{"name":"self_eval_zeroish","tests":[{"original":{"name":"self_eval_int_zero","expr":"0","value":{"int64Value":"0"}},"ast":"0^#*expr.Constant_Int64Value#","checkedAst":"0~int","type":"int"},{"original":{"name":"self_eval_uint_zero","expr":"0u","value":{"uint64Value":"0"}},"ast":"0u^#*expr.Constant_Uint64Value#","checkedAst":"0u~uint","type":"uint"},{"original":{"name":"self_eval_uint_alias_zero","expr":"0U","value":{"uint64Value":"0"}},"ast":"0u^#*expr.Constant_Uint64Value#","checkedAst":"0u~uint","type":"uint"},{"original":{"name":"self_eval_float_zero","expr":"0.0","value":{"doubleValue":0}},"ast":"0^#*expr.Constant_DoubleValue#","checkedAst":"0~double","type":"double"},{"original":{"name":"self_eval_float_zerowithexp","expr":"0e+0","value":{"doubleValue":0}},"ast":"0^#*expr.Constant_DoubleValue#","checkedAst":"0~double","type":"double"},{"original":{"name":"self_eval_string_empty","expr":"''","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"},{"original":{"name":"self_eval_string_empty_quotes","expr":"\"\"","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"},{"original":{"name":"self_eval_string_raw_prefix","expr":"r\"\"","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"},{"original":{"name":"self_eval_bytes_empty","expr":"b\"\"","value":{"bytesValue":""}},"ast":"b\"\"^#*expr.Constant_BytesValue#","checkedAst":"b\"\"~bytes","type":"bytes"},{"original":{"name":"self_eval_bool_false","expr":"false","value":{"boolValue":false}},"ast":"false^#*expr.Constant_BoolValue#","checkedAst":"false~bool","type":"bool"},{"original":{"name":"self_eval_null","expr":"null","value":{"nullValue":null}},"ast":"null^#*expr.Constant_NullValue#","checkedAst":"null~null","type":"null"},{"original":{"name":"self_eval_empty_list","expr":"[]","value":{"listValue":{}}},"ast":"[]^#*expr.Expr_ListExpr#","checkedAst":"[]~list(dyn)","type":"list(dyn)"},{"original":{"name":"self_eval_empty_map","expr":"{}","value":{"mapValue":{}}},"ast":"{}^#*expr.Expr_StructExpr#","checkedAst":"{}~map(dyn, dyn)","type":"map(dyn, dyn)"},{"original":{"name":"self_eval_string_raw_prefix_triple_double","expr":"r\"\"\"\"\"\"","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"},{"original":{"name":"self_eval_string_raw_prefix_triple_single","expr":"r''''''","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"}]},{"name":"self_eval_nonzeroish","tests":[{"original":{"name":"self_eval_int_nonzero","expr":"42","value":{"int64Value":"42"}},"ast":"42^#*expr.Constant_Int64Value#","checkedAst":"42~int","type":"int"},{"original":{"name":"self_eval_uint_nonzero","expr":"123456789u","value":{"uint64Value":"123456789"}},"ast":"123456789u^#*expr.Constant_Uint64Value#","checkedAst":"123456789u~uint","type":"uint"},{"original":{"name":"self_eval_uint_alias_nonzero","expr":"123456789U","value":{"uint64Value":"123456789"}},"ast":"123456789u^#*expr.Constant_Uint64Value#","checkedAst":"123456789u~uint","type":"uint"},{"original":{"name":"self_eval_int_negative_min","expr":"-9223372036854775808","value":{"int64Value":"-9223372036854775808"}},"ast":"-9223372036854775808^#*expr.Constant_Int64Value#","checkedAst":"-9223372036854775808~int","type":"int"},{"original":{"name":"self_eval_float_negative_exp","expr":"-2.3e+1","value":{"doubleValue":-23}},"ast":"-23^#*expr.Constant_DoubleValue#","checkedAst":"-23~double","type":"double"},{"original":{"name":"self_eval_string_excl","expr":"\"!\"","value":{"stringValue":"!"}},"ast":"\"!\"^#*expr.Constant_StringValue#","checkedAst":"\"!\"~string","type":"string"},{"original":{"name":"self_eval_string_escape","expr":"'\\''","value":{"stringValue":"'"}},"ast":"\"'\"^#*expr.Constant_StringValue#","checkedAst":"\"'\"~string","type":"string"},{"original":{"name":"self_eval_bytes_escape","expr":"b'ÿ'","value":{"bytesValue":"w78="}},"ast":"b\"ÿ\"^#*expr.Constant_BytesValue#","checkedAst":"b\"ÿ\"~bytes","type":"bytes"},{"original":{"name":"self_eval_bytes_invalid_utf8","expr":"b'\\000\\xff'","value":{"bytesValue":"AP8="}},"ast":"b\"\\x00\\xff\"^#*expr.Constant_BytesValue#","checkedAst":"b\"\\x00\\xff\"~bytes","type":"bytes"},{"original":{"name":"self_eval_list_singleitem","expr":"[-1]","value":{"listValue":{"values":[{"int64Value":"-1"}]}}},"ast":"[\n -1^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n -1~int\n]~list(int)","type":"list(int)"},{"original":{"name":"self_eval_map_singleitem","expr":"{\"k\":\"v\"}","value":{"mapValue":{"entries":[{"key":{"stringValue":"k"},"value":{"stringValue":"v"}}]}}},"ast":"{\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"{\n \"k\"~string:\"v\"~string\n}~map(string, string)","type":"map(string, string)"},{"original":{"name":"self_eval_bool_true","expr":"true","value":{"boolValue":true}},"ast":"true^#*expr.Constant_BoolValue#","checkedAst":"true~bool","type":"bool"},{"original":{"name":"self_eval_int_hex","expr":"0x55555555","value":{"int64Value":"1431655765"}},"ast":"1431655765^#*expr.Constant_Int64Value#","checkedAst":"1431655765~int","type":"int"},{"original":{"name":"self_eval_int_hex_negative","expr":"-0x55555555","value":{"int64Value":"-1431655765"}},"ast":"-1431655765^#*expr.Constant_Int64Value#","checkedAst":"-1431655765~int","type":"int"},{"original":{"name":"self_eval_uint_hex","expr":"0x55555555u","value":{"uint64Value":"1431655765"}},"ast":"1431655765u^#*expr.Constant_Uint64Value#","checkedAst":"1431655765u~uint","type":"uint"},{"original":{"name":"self_eval_uint_alias_hex","expr":"0x55555555U","value":{"uint64Value":"1431655765"}},"ast":"1431655765u^#*expr.Constant_Uint64Value#","checkedAst":"1431655765u~uint","type":"uint"},{"original":{"name":"self_eval_unicode_escape_four","expr":"\"\\u270c\"","value":{"stringValue":"✌"}},"ast":"\"✌\"^#*expr.Constant_StringValue#","checkedAst":"\"✌\"~string","type":"string"},{"original":{"name":"self_eval_unicode_escape_eight","expr":"\"\\U0001f431\"","value":{"stringValue":"🐱"}},"ast":"\"🐱\"^#*expr.Constant_StringValue#","checkedAst":"\"🐱\"~string","type":"string"},{"original":{"name":"self_eval_ascii_escape_seq","expr":"\"\\a\\b\\f\\n\\r\\t\\v\\\"\\'\\\\\"","value":{"stringValue":"\u0007\b\f\n\r\t\u000b\"'\\"}},"ast":"\"\\a\\b\\f\\n\\r\\t\\v\\\"'\\\\\"^#*expr.Constant_StringValue#","checkedAst":"\"\\a\\b\\f\\n\\r\\t\\v\\\"'\\\\\"~string","type":"string"}]},{"name":"variables","tests":[{"original":{"name":"self_eval_bound_lookup","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"x":{"value":{"int64Value":"123"}}},"value":{"int64Value":"123"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~int^x","type":"int"},{"original":{"name":"self_eval_unbound_lookup","description":"An unbound variable should be marked as an error during execution. See google/cel-go#154","expr":"x","disableCheck":true,"evalError":{"errors":[{"message":"undeclared reference to 'x' (in container '')"}]}},"ast":"x^#*expr.Expr_IdentExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'x' (in container '')\n | x\n | ^"},{"original":{"name":"unbound_is_runtime_error","description":"Make sure we can short-circuit around an unbound variable.","expr":"x || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n x^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'x' (in container '')\n | x || true\n | ^"}]},{"name":"functions","tests":[{"original":{"name":"binop","expr":"1 + 1","value":{"int64Value":"2"}},"ast":"_+_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 1~int,\n 1~int\n)~int^add_int64","type":"int"},{"original":{"name":"unbound","expr":"f_unknown(17)","disableCheck":true,"evalError":{"errors":[{"message":"unbound function"}]}},"ast":"f_unknown(\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: undeclared reference to 'f_unknown' (in container '')\n | f_unknown(17)\n | .........^"},{"original":{"name":"unbound_is_runtime_error","expr":"f_unknown(17) || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n f_unknown(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: undeclared reference to 'f_unknown' (in container '')\n | f_unknown(17) || true\n | .........^"}]},{"name":"reserved_const","tests":[{"original":{"name":"false","expr":"false","typeEnv":[{"name":"false","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"false":{"value":{"boolValue":true}}},"value":{"boolValue":false}},"ast":"false^#*expr.Constant_BoolValue#","checkedAst":"false~bool","type":"bool"},{"original":{"name":"true","expr":"true","typeEnv":[{"name":"true","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"true":{"value":{"boolValue":false}}},"value":{"boolValue":true}},"ast":"true^#*expr.Constant_BoolValue#","checkedAst":"true~bool","type":"bool"},{"original":{"name":"null","expr":"null","typeEnv":[{"name":"null","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"null":{"value":{"boolValue":true}}},"value":{"nullValue":null}},"ast":"null^#*expr.Constant_NullValue#","checkedAst":"null~null","type":"null"}]}]},{"name":"bindings_ext","suites":[{"name":"bind","tests":[{"original":{"name":"boolean_literal","expr":"cel.bind(t, true, t)","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n t^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n t^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t~bool^t,\n // Result\n t~bool^t)~bool","type":"bool"},{"original":{"name":"string_concat","expr":"cel.bind(msg, \"hello\", msg + msg + msg)","value":{"stringValue":"hellohellohello"}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n msg^#*expr.Expr_IdentExpr#,\n \"hello\"^#*expr.Constant_StringValue#,\n _+_(\n _+_(\n msg^#*expr.Expr_IdentExpr#,\n msg^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n msg,\n // Init\n \"hello\"~string,\n // LoopCondition\n false~bool,\n // LoopStep\n msg~string^msg,\n // Result\n _+_(\n _+_(\n msg~string^msg,\n msg~string^msg\n )~string^add_string,\n msg~string^msg\n )~string^add_string)~string","type":"string"},{"original":{"name":"bind_nested","expr":"cel.bind(t1, true, cel.bind(t2, true, t1 \u0026\u0026 t2))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n t1^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n cel^#*expr.Expr_IdentExpr#.bind(\n t2^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n _\u0026\u0026_(\n t1^#*expr.Expr_IdentExpr#,\n t2^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t1,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t1~bool^t1,\n // Result\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t2,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t2~bool^t2,\n // Result\n _\u0026\u0026_(\n t1~bool^t1,\n t2~bool^t2\n )~bool^logical_and)~bool)~bool","type":"bool"},{"original":{"name":"macro_exists","expr":"cel.bind(valid_elems, [1, 2, 3], [3, 4, 5].exists(e, e in valid_elems))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n valid_elems^#*expr.Expr_IdentExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n @in(\n e^#*expr.Expr_IdentExpr#,\n valid_elems^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n valid_elems,\n // Init\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // LoopCondition\n false~bool,\n // LoopStep\n valid_elems~list(int)^valid_elems,\n // Result\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n @in(\n e~int^e,\n valid_elems~list(int)^valid_elems\n )~bool^in_list\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool)~bool","type":"bool"},{"original":{"name":"macro_not_exists","expr":"cel.bind(valid_elems, [1, 2, 3], ![4, 5].exists(e, e in valid_elems))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n valid_elems^#*expr.Expr_IdentExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n !_(\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n @in(\n e^#*expr.Expr_IdentExpr#,\n valid_elems^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n valid_elems,\n // Init\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // LoopCondition\n false~bool,\n // LoopStep\n valid_elems~list(int)^valid_elems,\n // Result\n !_(\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 4~int,\n 5~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n @in(\n e~int^e,\n valid_elems~list(int)^valid_elems\n )~bool^in_list\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n )~bool^logical_not)~bool","type":"bool"}]}]},{"name":"block_ext","suites":[{"name":"basic","tests":[{"original":{"name":"int_add","expr":"cel.block([1, cel.index(0) + 1, cel.index(1) + 1, cel.index(2) + 1], cel.index(3))","value":{"int64Value":"4"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n 1^#*expr.Constant_Int64Value#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n 1~int,\n _+_(\n @index0~dyn^@index0,\n 1~int\n )~int^add_int64,\n _+_(\n @index1~dyn^@index1,\n 1~int\n )~int^add_int64,\n _+_(\n @index2~dyn^@index2,\n 1~int\n )~int^add_int64\n ]~list(int),\n @index3~dyn^@index3\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"size_1","expr":"cel.block([[1, 2], size(cel.index(0)), cel.index(1) + cel.index(1), cel.index(2) + 1], cel.index(3))","value":{"int64Value":"5"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index2~dyn^@index2,\n 1~int\n )~int^add_int64\n ]~list(dyn),\n @index3~dyn^@index3\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"size_2","expr":"cel.block([[1, 2], size(cel.index(0)), 2 + cel.index(1), cel.index(2) + cel.index(1), cel.index(3) + 1], cel.index(4))","value":{"int64Value":"7"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n 2~int,\n @index1~dyn^@index1\n )~int^add_int64,\n _+_(\n @index2~dyn^@index2,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index3~dyn^@index3,\n 1~int\n )~int^add_int64\n ]~list(dyn),\n @index4~dyn^@index4\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"size_3","expr":"cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), cel.index(1) + cel.index(1), cel.index(4) + cel.index(3), cel.index(5) + cel.index(3)], cel.index(6))","value":{"int64Value":"6"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 0~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index2~dyn^@index2\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index5~dyn^@index5,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index6~dyn^@index6\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"size_4","expr":"cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), [1, 2, 3], size(cel.index(4)), 5 + cel.index(1), cel.index(6) + cel.index(1), cel.index(7) + cel.index(3), cel.index(8) + cel.index(3), cel.index(9) + cel.index(5), cel.index(10) + cel.index(5)], cel.index(11))","value":{"int64Value":"17"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 5^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 0~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index2~dyn^@index2\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n size(\n @index4~dyn^@index4\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n 5~int,\n @index1~dyn^@index1\n )~int^add_int64,\n _+_(\n @index6~dyn^@index6,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index7~dyn^@index7,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index8~dyn^@index8,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index9~dyn^@index9,\n @index5~dyn^@index5\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index10~dyn^@index10,\n @index5~dyn^@index5\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index11~dyn^@index11\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"timestamp","expr":"cel.block([timestamp(1000000000), int(cel.index(0)), timestamp(cel.index(1)), cel.index(2).getFullYear(), timestamp(50), int(cel.index(4)), timestamp(cel.index(5)), timestamp(200), int(cel.index(7)), timestamp(cel.index(8)), cel.index(9).getFullYear(), timestamp(75), int(cel.index(11)), timestamp(cel.index(12)), cel.index(13).getFullYear(), cel.index(3) + cel.index(14), cel.index(6).getFullYear(), cel.index(15) + cel.index(16), cel.index(17) + cel.index(3), cel.index(6).getSeconds(), cel.index(18) + cel.index(19), cel.index(20) + cel.index(10), cel.index(21) + cel.index(10), cel.index(13).getMinutes(), cel.index(22) + cel.index(23), cel.index(24) + cel.index(3)], cel.index(25))","value":{"int64Value":"13934"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n timestamp(\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n 200^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n timestamp(\n 75^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 14^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 16^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 18^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 19^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 21^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 23^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp,\n int(\n @index0~dyn^@index0\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index1~dyn^@index1\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index2~dyn^@index2.getFullYear()~int^timestamp_to_year,\n timestamp(\n 50~int\n )~timestamp^int64_to_timestamp,\n int(\n @index4~dyn^@index4\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index5~dyn^@index5\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n timestamp(\n 200~int\n )~timestamp^int64_to_timestamp,\n int(\n @index7~dyn^@index7\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index8~dyn^@index8\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index9~dyn^@index9.getFullYear()~int^timestamp_to_year,\n timestamp(\n 75~int\n )~timestamp^int64_to_timestamp,\n int(\n @index11~dyn^@index11\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index12~dyn^@index12\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index13~dyn^@index13.getFullYear()~int^timestamp_to_year,\n _+_(\n @index3~dyn^@index3,\n @index14~dyn^@index14\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index6~dyn^@index6.getFullYear()~int^timestamp_to_year,\n _+_(\n @index15~dyn^@index15,\n @index16~dyn^@index16\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index17~dyn^@index17,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index6~dyn^@index6.getSeconds()~int^duration_to_seconds|timestamp_to_seconds,\n _+_(\n @index18~dyn^@index18,\n @index19~dyn^@index19\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index20~dyn^@index20,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index21~dyn^@index21,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index13~dyn^@index13.getMinutes()~int^duration_to_minutes|timestamp_to_minutes,\n _+_(\n @index22~dyn^@index22,\n @index23~dyn^@index23\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index24~dyn^@index24,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index25~dyn^@index25\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"map_index","expr":"cel.block([{\"a\": 2}, cel.index(0)[\"a\"], cel.index(1) * cel.index(1), cel.index(1) + cel.index(2)], cel.index(3))","value":{"int64Value":"6"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n \"a\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"a\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n \"a\"~string:2~int\n }~map(string, int),\n _[_](\n @index0~dyn^@index0,\n \"a\"~string\n )~dyn^index_map|optional_map_index_value,\n _*_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^multiply_double|multiply_int64|multiply_uint64,\n _+_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index3~dyn^@index3\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"nested_map_construction","expr":"cel.block([{\"b\": 1}, {\"e\": cel.index(0)}], {\"a\": cel.index(0), \"c\": cel.index(0), \"d\": cel.index(1), \"e\": cel.index(1)})","value":{"mapValue":{"entries":[{"key":{"stringValue":"a"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"b"},"value":{"int64Value":"1"}}]}}},{"key":{"stringValue":"c"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"b"},"value":{"int64Value":"1"}}]}}},{"key":{"stringValue":"d"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"e"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"b"},"value":{"int64Value":"1"}}]}}}]}}},{"key":{"stringValue":"e"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"e"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"b"},"value":{"int64Value":"1"}}]}}}]}}}]}}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n \"b\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"e\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#,\n {\n \"a\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"c\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"d\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"e\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n \"b\"~string:1~int\n }~map(string, int),\n {\n \"e\"~string:@index0~dyn^@index0\n }~map(string, dyn)\n ]~list(map(string, dyn)),\n {\n \"a\"~string:@index0~dyn^@index0,\n \"c\"~string:@index0~dyn^@index0,\n \"d\"~string:@index1~dyn^@index1,\n \"e\"~string:@index1~dyn^@index1\n }~map(string, dyn)\n)~map(string, dyn)^cel_block_list","type":"map(string, dyn)"},{"original":{"name":"nested_list_construction","expr":"cel.block([[1, 2, 3, 4], [1, 2], [cel.index(1), cel.index(0)]], [1, cel.index(0), 2, cel.index(0), 5, cel.index(0), 7, cel.index(2), cel.index(1)])","value":{"listValue":{"values":[{"int64Value":"1"},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"int64Value":"2"},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"int64Value":"5"},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"int64Value":"7"},{"listValue":{"values":[{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"}]}},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}}]}},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"}]}}]}}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n [\n 1~int,\n 2~int\n ]~list(int),\n [\n @index1~dyn^@index1,\n @index0~dyn^@index0\n ]~list(dyn)\n ]~list(list(dyn)),\n [\n 1~int,\n @index0~dyn^@index0,\n 2~int,\n @index0~dyn^@index0,\n 5~int,\n @index0~dyn^@index0,\n 7~int,\n @index2~dyn^@index2,\n @index1~dyn^@index1\n ]~list(dyn)\n)~list(dyn)^cel_block_list","type":"list(dyn)"},{"original":{"name":"select","expr":"cel.block([msg.single_int64, cel.index(0) + cel.index(0)], cel.index(1))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"6"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _+_(\n @index0~dyn^@index0,\n @index0~dyn^@index0\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index1~dyn^@index1\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"select_nested_1","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, cel.index(1).single_int32, cel.index(2) + cel.index(3), cel.index(4) + cel.index(2), msg.single_int64, cel.index(5) + cel.index(6), cel.index(1).oneof_type, cel.index(8).payload, cel.index(9).single_int64, cel.index(7) + cel.index(10)], cel.index(11))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"31"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int32^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index1~dyn^@index1.single_int32~dyn,\n _+_(\n @index2~dyn^@index2,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index2~dyn^@index2\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _+_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index1~dyn^@index1.oneof_type~dyn,\n @index8~dyn^@index8.payload~dyn,\n @index9~dyn^@index9.single_int64~dyn,\n _+_(\n @index7~dyn^@index7,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index11~dyn^@index11\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"select_nested_2","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).oneof_type, cel.index(2).payload, cel.index(3).oneof_type, cel.index(4).payload, cel.index(5).oneof_type, cel.index(6).payload, cel.index(7).single_bool, true || cel.index(8), cel.index(4).child, cel.index(10).child, cel.index(11).payload, cel.index(12).single_bool], cel.index(9) || cel.index(13))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_bool^#*expr.Expr_SelectExpr#,\n _||_(\n true^#*expr.Constant_BoolValue#,\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.child^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.child^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_bool^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n _||_(\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.oneof_type~dyn,\n @index2~dyn^@index2.payload~dyn,\n @index3~dyn^@index3.oneof_type~dyn,\n @index4~dyn^@index4.payload~dyn,\n @index5~dyn^@index5.oneof_type~dyn,\n @index6~dyn^@index6.payload~dyn,\n @index7~dyn^@index7.single_bool~dyn,\n _||_(\n true~bool,\n @index8~dyn^@index8\n )~bool^logical_or,\n @index4~dyn^@index4.child~dyn,\n @index10~dyn^@index10.child~dyn,\n @index11~dyn^@index11.payload~dyn,\n @index12~dyn^@index12.single_bool~dyn\n ]~list(dyn),\n _||_(\n @index9~dyn^@index9,\n @index13~dyn^@index13\n )~bool^logical_or\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"select_nested_message_map_index_1","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[1], cel.index(3) + cel.index(3), cel.index(4) + cel.index(3)], cel.index(5))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"15"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_int32_int64^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_int32_int64~dyn,\n _[_](\n @index2~dyn^@index2,\n 1~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index3~dyn^@index3,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"select_nested_message_map_index_2","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[0], cel.index(2)[1], cel.index(3) + cel.index(4), cel.index(2)[2], cel.index(5) + cel.index(6)], cel.index(7))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"8"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_int32_int64^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_int32_int64~dyn,\n _[_](\n @index2~dyn^@index2,\n 0~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _[_](\n @index2~dyn^@index2,\n 1~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index3~dyn^@index3,\n @index4~dyn^@index4\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _[_](\n @index2~dyn^@index2,\n 2~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index7~dyn^@index7\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"ternary","expr":"cel.block([msg.single_int64, cel.index(0) \u003e 0, cel.index(1) ? cel.index(0) : 0], cel.index(2))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"3"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _\u003e_(\n @index0~dyn^@index0,\n 0~int\n )~bool^greater_int64,\n _?_:_(\n @index1~dyn^@index1,\n @index0~dyn^@index0,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index2~dyn^@index2\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"nested_ternary","expr":"cel.block([msg.single_int64, msg.single_int32, cel.index(0) \u003e 0, cel.index(1) \u003e 0, cel.index(0) + cel.index(1), cel.index(3) ? cel.index(4) : 0, cel.index(2) ? cel.index(5) : 0], cel.index(6))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"8"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int32~int,\n _\u003e_(\n @index0~dyn^@index0,\n 0~int\n )~bool^greater_int64,\n _\u003e_(\n @index1~dyn^@index1,\n 0~int\n )~bool^greater_int64,\n _+_(\n @index0~dyn^@index0,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _?_:_(\n @index3~dyn^@index3,\n @index4~dyn^@index4,\n 0~int\n )~dyn^conditional,\n _?_:_(\n @index2~dyn^@index2,\n @index5~dyn^@index5,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index6~dyn^@index6\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"multiple_macros_1","expr":"cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))","value":{"int64Value":"4"}},"error":"ERROR: multiple_macros_1:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .................................^\nERROR: multiple_macros_1:1:110: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .............................................................................................................^"},{"original":{"name":"multiple_macros_2","expr":"cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))","value":{"listValue":{"values":[{"boolValue":true},{"boolValue":true},{"boolValue":true},{"boolValue":true}]}}},"error":"ERROR: multiple_macros_2:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .................................^\nERROR: multiple_macros_2:1:106: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .........................................................................................................^"},{"original":{"name":"multiple_macros_3","expr":"cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))","value":{"boolValue":false}},"error":"ERROR: multiple_macros_3:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | .................................^\nERROR: multiple_macros_3:1:121: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | ........................................................................................................................^\nERROR: multiple_macros_3:1:177: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | ................................................................................................................................................................................^"},{"original":{"name":"nested_macros_1","expr":"cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))","value":{"listValue":{"values":[{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}}]}}},"error":"ERROR: nested_macros_1:1:52: argument is not an identifier\n | cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))\n | ...................................................^\nERROR: nested_macros_1:1:88: argument is not an identifier\n | cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))\n | .......................................................................................^"},{"original":{"name":"nested_macros_2","expr":"[1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))","value":{"listValue":{"values":[{"listValue":{"values":[{"int64Value":"1"}]}},{"listValue":{"values":[{"int64Value":"2"}]}}]}}},"error":"ERROR: nested_macros_2:1:23: argument is not an identifier\n | [1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))\n | ......................^\nERROR: nested_macros_2:1:59: argument is not an identifier\n | [1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))\n | ..........................................................^"},{"original":{"name":"adjacent_macros","expr":"cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))","value":{"boolValue":true}},"error":"ERROR: adjacent_macros:1:51: argument is not an identifier\n | cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))\n | ..................................................^\nERROR: adjacent_macros:1:87: argument is not an identifier\n | cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))\n | ......................................................................................^"},{"original":{"name":"macro_shadowed_variable_1","expr":"cel.block([x - 1, cel.index(0) \u003e 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 \u003e 3) || cel.index(1))","typeEnv":[{"name":"x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"x":{"value":{"int64Value":"5"}}},"value":{"boolValue":true}},"error":"ERROR: macro_shadowed_variable_1:1:90: argument must be a simple name\n | cel.block([x - 1, cel.index(0) \u003e 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 \u003e 3) || cel.index(1))\n | .........................................................................................^"},{"original":{"name":"macro_shadowed_variable_2","expr":"['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])","typeEnv":[{"name":"x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"x":{"value":{"int64Value":"5"}}},"value":{"listValue":{"values":[{"listValue":{"values":[{"listValue":{"values":[{"stringValue":"foofoo"},{"stringValue":"foofoo"},{"stringValue":"foofoo"},{"stringValue":"foofoo"}]}},{"listValue":{"values":[{"stringValue":"foofoo"},{"stringValue":"foofoo"},{"stringValue":"foofoo"},{"stringValue":"foofoo"}]}}]}},{"listValue":{"values":[{"listValue":{"values":[{"stringValue":"barbar"},{"stringValue":"barbar"},{"stringValue":"barbar"},{"stringValue":"barbar"}]}},{"listValue":{"values":[{"stringValue":"barbar"},{"stringValue":"barbar"},{"stringValue":"barbar"},{"stringValue":"barbar"}]}}]}}]}}},"error":"ERROR: macro_shadowed_variable_2:1:31: argument is not an identifier\n | ['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])\n | ..............................^\nERROR: macro_shadowed_variable_2:1:134: argument is not an identifier\n | ['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])\n | .....................................................................................................................................^"},{"original":{"name":"inclusion_list","expr":"cel.block([[1, 2, 3], 1 in cel.index(0), 2 in cel.index(0), cel.index(1) \u0026\u0026 cel.index(2), [3, cel.index(0)], 3 in cel.index(4), cel.index(5) \u0026\u0026 cel.index(1)], cel.index(3) \u0026\u0026 cel.index(6))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 1^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 3^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n @in(\n 1~int,\n @index0~dyn^@index0\n )~bool^in_list|in_map,\n @in(\n 2~int,\n @index0~dyn^@index0\n )~bool^in_list|in_map,\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~bool^logical_and,\n [\n 3~int,\n @index0~dyn^@index0\n ]~list(dyn),\n @in(\n 3~int,\n @index4~dyn^@index4\n )~bool^in_list|in_map,\n _\u0026\u0026_(\n @index5~dyn^@index5,\n @index1~dyn^@index1\n )~bool^logical_and\n ]~list(dyn),\n _\u0026\u0026_(\n @index3~dyn^@index3,\n @index6~dyn^@index6\n )~bool^logical_and\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"inclusion_map","expr":"cel.block([{true: false}, {\"a\": 1, 2: cel.index(0), 3: cel.index(0)}], 2 in cel.index(1))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n true^#*expr.Constant_BoolValue#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n true~bool:false~bool\n }~map(bool, bool),\n {\n \"a\"~string:1~int,\n 2~int:@index0~dyn^@index0,\n 3~int:@index0~dyn^@index0\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn)),\n @in(\n 2~int,\n @index1~dyn^@index1\n )~bool^in_list|in_map\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"presence_test","expr":"cel.block([{\"a\": true}, has(cel.index(0).a), cel.index(0)[\"a\"]], cel.index(1) \u0026\u0026 cel.index(2))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n \"a\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.a~test-only~^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"a\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n \"a\"~string:true~bool\n }~map(string, bool),\n @index0~dyn^@index0.a~test-only~~bool,\n _[_](\n @index0~dyn^@index0,\n \"a\"~string\n )~dyn^index_map|optional_map_index_value\n ]~list(dyn),\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~bool^logical_and\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"presence_test_2","expr":"cel.block([{\"a\": true}, has(cel.index(0).a)], cel.index(1) \u0026\u0026 cel.index(1))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n \"a\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.a~test-only~^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n \"a\"~string:true~bool\n }~map(string, bool),\n @index0~dyn^@index0.a~test-only~~bool\n ]~list(dyn),\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~bool^logical_and\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"presence_test_with_ternary","expr":"cel.block([msg.oneof_type, has(cel.index(0).payload), cel.index(0).payload, cel.index(2).single_int64, cel.index(1) ? cel.index(3) : 0], cel.index(4))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"10"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~test-only~~bool,\n @index0~dyn^@index0.payload~dyn,\n @index2~dyn^@index2.single_int64~dyn,\n _?_:_(\n @index1~dyn^@index1,\n @index3~dyn^@index3,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index4~dyn^@index4\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"presence_test_with_ternary_2","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(0).payload), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"10"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index0~dyn^@index0.payload~test-only~~bool,\n _*_(\n @index2~dyn^@index2,\n 0~int\n )~int^multiply_int64,\n _?_:_(\n @index3~dyn^@index3,\n @index2~dyn^@index2,\n @index4~dyn^@index4\n )~dyn^conditional\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"presence_test_with_ternary_3","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(1).single_int64), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"10"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64~test-only~^#*expr.Expr_SelectExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index1~dyn^@index1.single_int64~test-only~~bool,\n _*_(\n @index2~dyn^@index2,\n 0~int\n )~int^multiply_int64,\n _?_:_(\n @index3~dyn^@index3,\n @index2~dyn^@index2,\n @index4~dyn^@index4\n )~dyn^conditional\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"presence_test_with_ternary_nested","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_string_string, has(msg.oneof_type), has(cel.index(0).payload), cel.index(3) \u0026\u0026 cel.index(4), has(cel.index(1).single_int64), cel.index(5) \u0026\u0026 cel.index(6), has(cel.index(1).map_string_string), has(cel.index(2).key), cel.index(8) \u0026\u0026 cel.index(9), cel.index(2).key, cel.index(11) == \"A\", cel.index(10) ? cel.index(12) : false], cel.index(7) ? cel.index(13) : false)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_string_string^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.oneof_type~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.key~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.key^#*expr.Expr_SelectExpr#,\n _==_(\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"A\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_string_string~dyn,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~test-only~~bool,\n @index0~dyn^@index0.payload~test-only~~bool,\n _\u0026\u0026_(\n @index3~dyn^@index3,\n @index4~dyn^@index4\n )~bool^logical_and,\n @index1~dyn^@index1.single_int64~test-only~~bool,\n _\u0026\u0026_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~bool^logical_and,\n @index1~dyn^@index1.map_string_string~test-only~~bool,\n @index2~dyn^@index2.key~test-only~~bool,\n _\u0026\u0026_(\n @index8~dyn^@index8,\n @index9~dyn^@index9\n )~bool^logical_and,\n @index2~dyn^@index2.key~dyn,\n _==_(\n @index11~dyn^@index11,\n \"A\"~string\n )~bool^equals,\n _?_:_(\n @index10~dyn^@index10,\n @index12~dyn^@index12,\n false~bool\n )~dyn^conditional\n ]~list(dyn),\n _?_:_(\n @index7~dyn^@index7,\n @index13~dyn^@index13,\n false~bool\n )~dyn^conditional\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"optional_list","expr":"cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))","typeEnv":[{"name":"opt_x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"opt_x":{"value":{"int64Value":"5"}}},"value":{"boolValue":true}},"error":"ERROR: optional_list:1:30: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | .............................^\nERROR: optional_list:1:45: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | ............................................^\nERROR: optional_list:1:77: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | ............................................................................^"},{"original":{"name":"optional_map","expr":"cel.block([optional.of(\"hello\"), {?\"hello\": cel.index(0)}, cel.index(1)[\"hello\"], cel.index(2) + cel.index(2)], cel.index(3) == \"hellohello\")","value":{"boolValue":true}},"error":"ERROR: optional_map:1:35: unsupported syntax '?'\n | cel.block([optional.of(\"hello\"), {?\"hello\": cel.index(0)}, cel.index(1)[\"hello\"], cel.index(2) + cel.index(2)], cel.index(3) == \"hellohello\")\n | ..................................^"},{"original":{"name":"optional_map_chained","expr":"cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))","value":{"stringValue":"test"}},"error":"ERROR: optional_map_chained:1:51: unsupported syntax '?'\n | cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | ..................................................^\nERROR: optional_map_chained:1:86: unsupported syntax '[?'\n | cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | .....................................................................................^\nERROR: optional_map_chained:1:110: unsupported syntax '[?'\n | cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | .............................................................................................................^"},{"original":{"name":"optional_message","expr":"cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))","container":"cel.expr.conformance.proto3","value":{"int64Value":"5"}},"error":"ERROR: optional_message:1:69: unsupported syntax '?'\n | cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))\n | ....................................................................^\nERROR: optional_message:1:98: unsupported syntax '?'\n | cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))\n | .................................................................................................^"},{"original":{"name":"call","expr":"cel.block([\"h\" + \"e\", cel.index(0) + \"l\", cel.index(1) + \"l\", cel.index(2) + \"o\", cel.index(3) + \" world\"], cel.index(4).matches(cel.index(3)))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n _+_(\n \"h\"^#*expr.Constant_StringValue#,\n \"e\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"l\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"l\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"o\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \" world\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.matches(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n _+_(\n \"h\"~string,\n \"e\"~string\n )~string^add_string,\n _+_(\n @index0~dyn^@index0,\n \"l\"~string\n )~string^add_string,\n _+_(\n @index1~dyn^@index1,\n \"l\"~string\n )~string^add_string,\n _+_(\n @index2~dyn^@index2,\n \"o\"~string\n )~string^add_string,\n _+_(\n @index3~dyn^@index3,\n \" world\"~string\n )~string^add_string\n ]~list(string),\n @index4~dyn^@index4.matches(\n @index3~dyn^@index3\n )~bool^matches_string\n)~bool^cel_block_list","type":"bool"}]}]},{"name":"comparisons","suites":[{"name":"eq_literal","tests":[{"original":{"name":"eq_int","expr":"1 == 1","value":{"boolValue":true}},"ast":"_==_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 1~int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_int","expr":"-1 == 1","value":{"boolValue":false}},"ast":"_==_(\n -1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n -1~int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int_uint","expr":"dyn(1) == 1u","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_int_uint","expr":"dyn(2) == 1u","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int_double","expr":"dyn(1) == 1.0","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_int_double","expr":"dyn(2) == 1.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint","expr":"2u == 2u","value":{"boolValue":true}},"ast":"_==_(\n 2u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 2u~uint,\n 2u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_uint","expr":"1u == 2u","value":{"boolValue":false}},"ast":"_==_(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 1u~uint,\n 2u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint_int","expr":"dyn(1u) == 1","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_uint_int","expr":"dyn(2u) == 1","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint_double","expr":"dyn(1u) == 1.0","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_uint_double","expr":"dyn(2u) == 1.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double","expr":"1.0 == 1.0e+0","value":{"boolValue":true}},"ast":"_==_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 1~double,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_double","expr":"-1.0 == 1.0","value":{"boolValue":false}},"ast":"_==_(\n -1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n -1~double,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_double_nan","expr":"0.0/0.0 == 0.0/0.0","value":{"boolValue":false}},"ast":"_==_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_int_double_nan","expr":"dyn(1) == 0.0/0.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_uint_double_nan","expr":"dyn(1u) == 0.0/0.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_int","expr":"dyn(1.0) == 1","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_double_int","expr":"dyn(2.0) == 1","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_uint","expr":"dyn(1.0) == 1u","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_double_uint","expr":"dyn(2.0) == 1u","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string","expr":"'' == \"\"","value":{"boolValue":true}},"ast":"_==_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\"~string,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_string","expr":"'a' == 'b'","value":{"boolValue":false}},"ast":"_==_(\n \"a\"^#*expr.Constant_StringValue#,\n \"b\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"a\"~string,\n \"b\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_raw_string","expr":"'abc' == r'abc'","value":{"boolValue":true}},"ast":"_==_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"abc\"~string,\n \"abc\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_string_case","expr":"'abc' == 'ABC'","value":{"boolValue":false}},"ast":"_==_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"ABC\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"abc\"~string,\n \"ABC\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string_unicode","expr":"'ίσος' == 'ίσος'","value":{"boolValue":true}},"ast":"_==_(\n \"ίσος\"^#*expr.Constant_StringValue#,\n \"ίσος\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ίσος\"~string,\n \"ίσος\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_string_unicode_ascii","expr":"'a' == 'à'","value":{"boolValue":false}},"ast":"_==_(\n \"a\"^#*expr.Constant_StringValue#,\n \"à\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"a\"~string,\n \"à\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"no_string_normalization","description":"Should not normalize Unicode.","expr":"'Am\\u00E9lie' == 'Ame\\u0301lie'","value":{"boolValue":false}},"ast":"_==_(\n \"Amélie\"^#*expr.Constant_StringValue#,\n \"Amélie\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"Amélie\"~string,\n \"Amélie\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_null","expr":"null == null","value":{"boolValue":true}},"ast":"_==_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n null~null,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bool","expr":"true == true","value":{"boolValue":true}},"ast":"_==_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n true~bool,\n true~bool\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_bool","expr":"false == true","value":{"boolValue":false}},"ast":"_==_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n false~bool,\n true~bool\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes","description":"Test bytes literal equality with encoding","expr":"b'ÿ' == b'\\303\\277'","value":{"boolValue":true}},"ast":"_==_(\n b\"ÿ\"^#*expr.Constant_BytesValue#,\n b\"ÿ\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n b\"ÿ\"~bytes,\n b\"ÿ\"~bytes\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_bytes","expr":"b'abc' == b'abcd'","value":{"boolValue":false}},"ast":"_==_(\n b\"abc\"^#*expr.Constant_BytesValue#,\n b\"abcd\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n b\"abc\"~bytes,\n b\"abcd\"~bytes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_list_empty","expr":"[] == []","value":{"boolValue":true}},"ast":"_==_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n []~list(dyn),\n []~list(dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_list_null","expr":"[null] == [null]","value":{"boolValue":true}},"ast":"_==_(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n null~null\n ]~list(null),\n [\n null~null\n ]~list(null)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_null","expr":"['1', '2', null] == ['1', '2', '3']","value":{"boolValue":false}},"ast":"_==_(\n [\n \"1\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n \"1\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#,\n \"3\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n \"1\"~string,\n \"2\"~string,\n null~null\n ]~list(dyn),\n [\n \"1\"~string,\n \"2\"~string,\n \"3\"~string\n ]~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_list_numbers","expr":"[1, 2, 3] == [1, 2, 3]","value":{"boolValue":true}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_list_mixed_type_numbers","expr":"[1.0, 2.0, 3] == [1u, 2, 3u]","value":{"boolValue":true}},"ast":"_==_(\n [\n 1^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~double,\n 2~double,\n 3~int\n ]~list(dyn),\n [\n 1u~uint,\n 2~int,\n 3u~uint\n ]~list(dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_mixed_type_numbers","expr":"[1.0, 2.1] == [1u, 2]","value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_DoubleValue#,\n 2.1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~double,\n 2.1~double\n ]~list(double),\n [\n 1u~uint,\n 2~int\n ]~list(dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_order","expr":"[1, 2, 3] == [1, 3, 2]","value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n [\n 1~int,\n 3~int,\n 2~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_string_case","expr":"['case'] == ['cAse']","value":{"boolValue":false}},"ast":"_==_(\n [\n \"case\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n \"cAse\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n \"case\"~string\n ]~list(string),\n [\n \"cAse\"~string\n ]~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_length","expr":"['one'] == [2, 3]","disableCheck":true,"value":{"boolValue":false}},"ast":"_==_(\n [\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_==_' applied to '(list(string), list(int))'\n | ['one'] == [2, 3]\n | ........^"},{"original":{"name":"not_eq_list_false_vs_types","expr":"[1, 'dos', 3] == [1, 2, 4]","value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n \"dos\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n \"dos\"~string,\n 3~int\n ]~list(dyn),\n [\n 1~int,\n 2~int,\n 4~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_empty","expr":"{} == {}","value":{"boolValue":true}},"ast":"_==_(\n {}^#*expr.Expr_StructExpr#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {}~map(dyn, dyn),\n {}~map(dyn, dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_null","expr":"{'k': null} == {'k': null}","value":{"boolValue":true}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:null~null\n }~map(string, null),\n {\n \"k\"~string:null~null\n }~map(string, null)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_null","expr":"{'k': 1, 'j': 2} == {'k': 1, 'j': null}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"j\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"j\"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:1~int,\n \"j\"~string:2~int\n }~map(string, int),\n {\n \"k\"~string:1~int,\n \"j\"~string:null~null\n }~map(string, dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_onekey","expr":"{'k':'v'} == {\"k\":\"v\"}","value":{"boolValue":true}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:\"v\"~string\n }~map(string, string),\n {\n \"k\"~string:\"v\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_double_value","expr":"{'k':1.0} == {'k':1e+0}","value":{"boolValue":true}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:1~double\n }~map(string, double),\n {\n \"k\"~string:1~double\n }~map(string, double)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_mixed_type_numbers","expr":"{1: 1.0, 2u: 3u} == {1u: 1, 2: 3.0}","value":{"boolValue":true}},"ast":"_==_(\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n 1~int:1~double,\n 2u~uint:3u~uint\n }~map(dyn, dyn),\n {\n 1u~uint:1~int,\n 2~int:3~double\n }~map(dyn, dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_value","expr":"{'k':'v'} == {'k':'v1'}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:\"v\"~string\n }~map(string, string),\n {\n \"k\"~string:\"v1\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_extra_key","expr":"{'k':'v','k1':'v1'} == {'k':'v'}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k1\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:\"v\"~string,\n \"k1\"~string:\"v1\"~string\n }~map(string, string),\n {\n \"k\"~string:\"v\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_key_order","expr":"{'k1':'v1','k2':'v2'} == {'k2':'v2','k1':'v1'}","value":{"boolValue":true}},"ast":"_==_(\n {\n \"k1\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k2\"^#*expr.Constant_StringValue#:\"v2\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k2\"^#*expr.Constant_StringValue#:\"v2\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k1\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k1\"~string:\"v1\"~string,\n \"k2\"~string:\"v2\"~string\n }~map(string, string),\n {\n \"k2\"~string:\"v2\"~string,\n \"k1\"~string:\"v1\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_key_casing","expr":"{'key':'value'} == {'Key':'value'}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"key\"^#*expr.Constant_StringValue#:\"value\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"Key\"^#*expr.Constant_StringValue#:\"value\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"key\"~string:\"value\"~string\n }~map(string, string),\n {\n \"Key\"~string:\"value\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_false_vs_types","expr":"{'k1': 1, 'k2': 'dos', 'k3': 3} == {'k1': 1, 'k2': 2, 'k3': 4}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"k2\"^#*expr.Constant_StringValue#:\"dos\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k3\"^#*expr.Constant_StringValue#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"k2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"k3\"^#*expr.Constant_StringValue#:4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k1\"~string:1~int,\n \"k2\"~string:\"dos\"~string,\n \"k3\"~string:3~int\n }~map(string, dyn),\n {\n \"k1\"~string:1~int,\n \"k2\"~string:2~int,\n \"k3\"~string:4~int\n }~map(string, int)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_mixed_types","expr":"1.0 == 1","disableCheck":true,"value":{"boolValue":true}},"ast":"_==_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_==_' applied to '(double, int)'\n | 1.0 == 1\n | ....^"},{"original":{"name":"eq_list_elem_mixed_types","expr":"[1] == [1.0]","disableCheck":true,"value":{"boolValue":true}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_==_' applied to '(list(int), list(double))'\n | [1] == [1.0]\n | ....^"},{"original":{"name":"eq_map_value_mixed_types","expr":"{'k':'v', 1:1} == {'k':'v', 1:'v1'}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:\"v\"~string,\n 1~int:1~int\n }~map(dyn, dyn),\n {\n \"k\"~string:\"v\"~string,\n 1~int:\"v1\"~string\n }~map(dyn, string)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_json_null","expr":"dyn(google.protobuf.Value{}) == null","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n google.protobuf.Value{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n google.protobuf.Value{}~dyn^google.protobuf.Value\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_bool_null","expr":"dyn(false) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n false~bool\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_bytes_null","expr":"dyn(b'') == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_double_null","expr":"dyn(2.1) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2.1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2.1~double\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_duration_null","expr":"dyn(duration('0s')) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n duration(\n \"0s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n duration(\n \"0s\"~string\n )~duration^string_to_duration\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_int_null","expr":"dyn(1) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_list_null","expr":"dyn([]) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n []~list(dyn)\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_map_null","expr":"dyn({}) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n {}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n {}~map(dyn, dyn)\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_proto2_msg_null","expr":"dyn(TestAllTypes{}) == null","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_proto3_msg_null","expr":"dyn(TestAllTypes{}) == null","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_string_null","expr":"dyn('') == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n \"\"~string\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_timestamp_null","expr":"dyn(timestamp(0)) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n timestamp(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n timestamp(\n 0~int\n )~timestamp^int64_to_timestamp\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_elem_null","expr":"[1, 2, null] == [1, null, 3]","value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n null^#*expr.Constant_NullValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n 2~int,\n null~null\n ]~list(dyn),\n [\n 1~int,\n null~null,\n 3~int\n ]~list(dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_value_null","expr":"{1:'hello', 2:'world'} == {1:'goodbye', 2:null}","value":{"boolValue":false}},"ast":"_==_(\n {\n 1^#*expr.Constant_Int64Value#:\"hello\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:\"world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n 1~int:\"hello\"~string,\n 2~int:\"world\"~string\n }~map(int, string),\n {\n 1~int:\"goodbye\"~string,\n 2~int:null~null\n }~map(int, dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_int_uint","expr":"dyn(1) == 1u","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_int_double","expr":"dyn(1) == 1.0","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_uint_int","expr":"dyn(1u) == 1","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_uint_double","expr":"dyn(1u) == 1.0","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_double_int","expr":"dyn(1.0) == 1","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_double_uint","expr":"dyn(1.0) == 1u","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_int_uint","expr":"dyn(1) == 2u","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_int_double","expr":"dyn(1) == 2.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_uint_int","expr":"dyn(1u) == 2","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_uint_double","expr":"dyn(1u) == 120","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 120^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 120~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_double_int","expr":"dyn(1.0) == 2","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_double_uint","expr":"dyn(1.0) == 2u","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^equals","type":"bool"}]},{"name":"eq_wrapper","tests":[{"original":{"name":"eq_bool","expr":"google.protobuf.BoolValue{value: true} == true","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue,\n true~bool\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bool_empty","expr":"google.protobuf.BoolValue{} == false","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue,\n false~bool\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bool_not_null","expr":"google.protobuf.BoolValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_bool_proto2_null","expr":"TestAllTypes{}.single_bool_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bool_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_bool_wrapper~wrapper(bool),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bool_proto3_null","expr":"TestAllTypes{}.single_bool_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bool_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_bool_wrapper~wrapper(bool),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes","expr":"google.protobuf.BytesValue{value: b'set'} == b'set'","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.BytesValue{\n value:b\"set\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n b\"set\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.BytesValue{\n value:b\"set\"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue,\n b\"set\"~bytes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes_empty","expr":"google.protobuf.BytesValue{} == b''","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue,\n b\"\"~bytes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes_not_null","expr":"google.protobuf.BytesValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_bytes_proto2_null","expr":"TestAllTypes{}.single_bytes_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bytes_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_bytes_wrapper~wrapper(bytes),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes_proto3_null","expr":"TestAllTypes{}.single_bytes_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bytes_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_bytes_wrapper~wrapper(bytes),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double","expr":"google.protobuf.DoubleValue{value: -1.175494e-40} == -1.175494e-40","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.DoubleValue{\n value:-1.175494e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n -1.175494e-40^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.DoubleValue{\n value:-1.175494e-40~double\n }~wrapper(double)^google.protobuf.DoubleValue,\n -1.175494e-40~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_empty","expr":"google.protobuf.DoubleValue{} == 0.0","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue,\n 0~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_not_null","expr":"google.protobuf.DoubleValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_double_proto2_null","expr":"TestAllTypes{}.single_double_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_proto3_null","expr":"TestAllTypes{}.single_double_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_float","expr":"google.protobuf.FloatValue{value: -1.5} == -1.5","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.FloatValue{\n value:-1.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:-1.5~double\n }~wrapper(double)^google.protobuf.FloatValue,\n -1.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_float_empty","expr":"google.protobuf.FloatValue{} == 0.0","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue,\n 0~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_float_not_null","expr":"google.protobuf.FloatValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_float_proto2_null","expr":"TestAllTypes{}.single_float_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_float_proto3_null","expr":"TestAllTypes{}.single_float_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int32","expr":"google.protobuf.Int32Value{value: 123} == 123","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.Int32Value{\n value:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:123~int\n }~wrapper(int)^google.protobuf.Int32Value,\n 123~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int32_empty","expr":"google.protobuf.Int32Value{} == 0","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int32_not_null","expr":"google.protobuf.Int32Value{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_int32_proto2_null","expr":"TestAllTypes{}.single_int32_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int32_proto3_null","expr":"TestAllTypes{}.single_int32_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int64","expr":"google.protobuf.Int64Value{value: 2147483650} == 2147483650","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.Int64Value{\n value:2147483650^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2147483650^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int64Value{\n value:2147483650~int\n }~wrapper(int)^google.protobuf.Int64Value,\n 2147483650~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int64_empty","expr":"google.protobuf.Int64Value{} == 0","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int64_not_null","expr":"google.protobuf.Int64Value{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_int64_proto2_null","expr":"TestAllTypes{}.single_int64_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int64_proto3_null","expr":"TestAllTypes{}.single_int64_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string","expr":"google.protobuf.StringValue{value: 'set'} == 'set'","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.StringValue{\n value:\"set\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"set\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.StringValue{\n value:\"set\"~string\n }~wrapper(string)^google.protobuf.StringValue,\n \"set\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string_empty","expr":"google.protobuf.StringValue{} == ''","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.StringValue{}^#*expr.Expr_StructExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string_not_null","expr":"google.protobuf.StringValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.StringValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_string_proto2_null","expr":"TestAllTypes{}.single_string_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_string_wrapper~wrapper(string),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string_proto3_null","expr":"TestAllTypes{}.single_string_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_string_wrapper~wrapper(string),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint32","expr":"google.protobuf.UInt32Value{value: 42u} == 42u","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.UInt32Value{\n value:42u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:42u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n 42u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint32_empty","expr":"google.protobuf.UInt32Value{} == 0u","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value,\n 0u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint32_not_null","expr":"google.protobuf.UInt32Value{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_uint32_proto2_null","expr":"TestAllTypes{}.single_uint32_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint32_proto3_null","expr":"TestAllTypes{}.single_uint32_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_uint32_wrapper~wrapper(uint),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint64","expr":"google.protobuf.UInt64Value{value: 4294967296u} == 4294967296u","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.UInt64Value{\n value:4294967296u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 4294967296u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt64Value{\n value:4294967296u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value,\n 4294967296u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint64_empty","expr":"google.protobuf.UInt64Value{} == 0u","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value,\n 0u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint64_not_null","expr":"google.protobuf.UInt64Value{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_uint64_proto2_null","expr":"TestAllTypes{}.single_uint64_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint64_proto3_null","expr":"TestAllTypes{}.single_uint64_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_uint64_wrapper~wrapper(uint),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2","expr":"TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3","expr":"TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_missing_fields_neq","expr":"TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_missing_fields_neq","expr":"TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto_nan_equal","description":"For proto equality, fields with NaN value are treated as not equal.","expr":"TestAllTypes{single_double: double('NaN')} == TestAllTypes{single_double: double('NaN')}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_double:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_double:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n \"NaN\"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n \"NaN\"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto_different_types","description":"At runtime, differently typed messages are treated as not equal.","expr":"dyn(TestAllTypes{}) == dyn(NestedTestAllTypes{})","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n NestedTestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n dyn(\n cel.expr.conformance.proto2.NestedTestAllTypes{}~cel.expr.conformance.proto2.NestedTestAllTypes^cel.expr.conformance.proto2.NestedTestAllTypes\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_any_unpack_equal","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_any_unpack_not_equal","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_any_unpack_bytewise_fallback_not_equal","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_any_unpack_bytewise_fallback_equal","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_any_unpack_equal","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_any_unpack_not_equal","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_any_unpack_bytewise_fallback_not_equal","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_any_unpack_bytewise_fallback_equal","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"ne_literal","tests":[{"original":{"name":"ne_int","expr":"24 != 42","value":{"boolValue":true}},"ast":"_!=_(\n 24^#*expr.Constant_Int64Value#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 24~int,\n 42~int\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_int","expr":"1 != 1","value":{"boolValue":false}},"ast":"_!=_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 1~int,\n 1~int\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_int_double","expr":"dyn(24) != 24.1","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 24.1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 24~int\n )~dyn^to_dyn,\n 24.1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_int_double","expr":"dyn(1) != 1.0","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_int_uint","expr":"dyn(24) != 42u","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 24~int\n )~dyn^to_dyn,\n 42u~uint\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_int_uint","expr":"dyn(1) != 1u","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_uint","expr":"1u != 2u","value":{"boolValue":true}},"ast":"_!=_(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 1u~uint,\n 2u~uint\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_uint","expr":"99u != 99u","value":{"boolValue":false}},"ast":"_!=_(\n 99u^#*expr.Constant_Uint64Value#,\n 99u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 99u~uint,\n 99u~uint\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_uint_double","expr":"dyn(1u) != 2.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_uint_double","expr":"dyn(99u) != 99.0","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 99u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 99u~uint\n )~dyn^to_dyn,\n 99~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_double","expr":"9.0e+3 != 9001.0","value":{"boolValue":true}},"ast":"_!=_(\n 9000^#*expr.Constant_DoubleValue#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 9000~double,\n 9001~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_double_nan","expr":"0.0/0.0 != 0.0/0.0","value":{"boolValue":true}},"ast":"_!=_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_int_double_nan","expr":"dyn(1) != 0.0/0.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_uint_double_nan","expr":"dyn(1u) != 0.0/0.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_double","expr":"1.0 != 1e+0","value":{"boolValue":false}},"ast":"_!=_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 1~double,\n 1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_double_int","expr":"dyn(9000) != 9001.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 9000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 9000~int\n )~dyn^to_dyn,\n 9001~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_double_int","expr":"dyn(1) != 1e+0","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_double_uint","expr":"dyn(9000u) != 9001.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 9000u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 9000u~uint\n )~dyn^to_dyn,\n 9001~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_double_uint","expr":"dyn(1u) != 1e+0","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_double_nan","expr":"0.0/0.0 != 0.0/0.0","value":{"boolValue":true}},"ast":"_!=_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_string","expr":"'abc' != ''","value":{"boolValue":true}},"ast":"_!=_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n \"abc\"~string,\n \"\"~string\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_string","expr":"'abc' != 'abc'","value":{"boolValue":false}},"ast":"_!=_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n \"abc\"~string,\n \"abc\"~string\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_string_unicode","expr":"'résumé' != 'resume'","value":{"boolValue":true}},"ast":"_!=_(\n \"résumé\"^#*expr.Constant_StringValue#,\n \"resume\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n \"résumé\"~string,\n \"resume\"~string\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_string_unicode","expr":"'ίδιο' != 'ίδιο'","value":{"boolValue":false}},"ast":"_!=_(\n \"ίδιο\"^#*expr.Constant_StringValue#,\n \"ίδιο\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n \"ίδιο\"~string,\n \"ίδιο\"~string\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_bytes","expr":"b'\\x00\\xFF' != b'ÿ'","value":{"boolValue":true}},"ast":"_!=_(\n b\"\\x00\\xff\"^#*expr.Constant_BytesValue#,\n b\"ÿ\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n b\"\\x00\\xff\"~bytes,\n b\"ÿ\"~bytes\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_bytes","expr":"b'\\303\\277' != b'ÿ'","value":{"boolValue":false}},"ast":"_!=_(\n b\"ÿ\"^#*expr.Constant_BytesValue#,\n b\"ÿ\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n b\"ÿ\"~bytes,\n b\"ÿ\"~bytes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_bool","expr":"false != true","value":{"boolValue":true}},"ast":"_!=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n false~bool,\n true~bool\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_bool","expr":"true != true","value":{"boolValue":false}},"ast":"_!=_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n true~bool,\n true~bool\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_null","description":"null can only be equal to null, or else it won't match","expr":"null != null","value":{"boolValue":false}},"ast":"_!=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n null~null,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_list_empty","expr":"[] != [1]","value":{"boolValue":true}},"ast":"_!=_(\n []^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n []~list(int),\n [\n 1~int\n ]~list(int)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_list_empty","expr":"[] != []","value":{"boolValue":false}},"ast":"_!=_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n []~list(dyn),\n []~list(dyn)\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_list_bool","expr":"[true, false, true] != [true, true, false]","value":{"boolValue":true}},"ast":"_!=_(\n [\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#,\n [\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n [\n true~bool,\n false~bool,\n true~bool\n ]~list(bool),\n [\n true~bool,\n true~bool,\n false~bool\n ]~list(bool)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_list_bool","expr":"[false, true] != [false, true]","value":{"boolValue":false}},"ast":"_!=_(\n [\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#,\n [\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n [\n false~bool,\n true~bool\n ]~list(bool),\n [\n false~bool,\n true~bool\n ]~list(bool)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_list_of_list","expr":"[[]] != [[]]","value":{"boolValue":false}},"ast":"_!=_(\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n [\n []~list(dyn)\n ]~list(list(dyn)),\n [\n []~list(dyn)\n ]~list(list(dyn))\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_map_by_value","expr":"{'k':'v'} != {'k':'v1'}","value":{"boolValue":true}},"ast":"_!=_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n \"k\"~string:\"v\"~string\n }~map(string, string),\n {\n \"k\"~string:\"v1\"~string\n }~map(string, string)\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_map_by_key","expr":"{'k':true} != {'k1':true}","value":{"boolValue":true}},"ast":"_!=_(\n {\n \"k\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k1\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n \"k\"~string:true~bool\n }~map(string, bool),\n {\n \"k1\"~string:true~bool\n }~map(string, bool)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_map_int_to_float","expr":"{1:1.0} != {1:1.0}","value":{"boolValue":false}},"ast":"_!=_(\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n 1~int:1~double\n }~map(int, double),\n {\n 1~int:1~double\n }~map(int, double)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_map_key_order","expr":"{'a':'b','c':'d'} != {'c':'d','a':'b'}","value":{"boolValue":false}},"ast":"_!=_(\n {\n \"a\"^#*expr.Constant_StringValue#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"c\"^#*expr.Constant_StringValue#:\"d\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"c\"^#*expr.Constant_StringValue#:\"d\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"a\"^#*expr.Constant_StringValue#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n \"a\"~string:\"b\"~string,\n \"c\"~string:\"d\"~string\n }~map(string, string),\n {\n \"c\"~string:\"d\"~string,\n \"a\"~string:\"b\"~string\n }~map(string, string)\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_mixed_types","expr":"2u != 2","disableCheck":true,"value":{"boolValue":false}},"ast":"_!=_(\n 2u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:4: found no matching overload for '_!=_' applied to '(uint, int)'\n | 2u != 2\n | ...^"},{"original":{"name":"ne_proto2","expr":"TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto3","expr":"TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto2_missing_fields_neq","expr":"TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto3_missing_fields_neq","expr":"TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto_nan_not_equal","description":"For proto equality, NaN field values are not considered equal.","expr":"TestAllTypes{single_double: double('NaN')} != TestAllTypes{single_double: double('NaN')}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_double:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_double:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n \"NaN\"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n \"NaN\"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto_different_types","description":"At runtime, comparing differently typed messages is false.","expr":"dyn(TestAllTypes{}) != dyn(NestedTestAllTypes{})","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n NestedTestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n dyn(\n cel.expr.conformance.proto2.NestedTestAllTypes{}~cel.expr.conformance.proto2.NestedTestAllTypes^cel.expr.conformance.proto2.NestedTestAllTypes\n )~dyn^to_dyn\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto2_any_unpack","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto2_any_unpack_bytewise_fallback","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto3_any_unpack","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto3_any_unpack_bytewise_fallback","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals","type":"bool"}]},{"name":"lt_literal","tests":[{"original":{"name":"lt_int","expr":"-1 \u003c 0","value":{"boolValue":true}},"ast":"_\u003c_(\n -1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n -1~int,\n 0~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_int","expr":"0 \u003c 0","value":{"boolValue":false}},"ast":"_\u003c_(\n 0^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n 0~int,\n 0~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"lt_uint","expr":"0u \u003c 1u","value":{"boolValue":true}},"ast":"_\u003c_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n 0u~uint,\n 1u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_uint","expr":"2u \u003c 2u","value":{"boolValue":false}},"ast":"_\u003c_(\n 2u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n 2u~uint,\n 2u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"lt_double","expr":"1.0 \u003c 1.0000001","value":{"boolValue":true}},"ast":"_\u003c_(\n 1^#*expr.Constant_DoubleValue#,\n 1.0000001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n 1~double,\n 1.0000001~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_double","description":"Following IEEE 754, negative zero compares equal to zero","expr":"-0.0 \u003c 0.0","value":{"boolValue":false}},"ast":"_\u003c_(\n -0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n -0~double,\n 0~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_string","expr":"'a' \u003c 'b'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"a\"^#*expr.Constant_StringValue#,\n \"b\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"a\"~string,\n \"b\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_string_empty_to_nonempty","expr":"'' \u003c 'a'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"\"^#*expr.Constant_StringValue#,\n \"a\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"\"~string,\n \"a\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_string_case","expr":"'Abc' \u003c 'aBC'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"Abc\"^#*expr.Constant_StringValue#,\n \"aBC\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"Abc\"~string,\n \"aBC\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_string_length","expr":"'abc' \u003c 'abcd'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abcd\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"abc\"~string,\n \"abcd\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_string_diacritical_mark_sensitive","description":"Verifies that the we're not using a string comparison function that strips diacritical marks (á)","expr":"'a' \u003c '\\u00E1'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"a\"^#*expr.Constant_StringValue#,\n \"á\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"a\"~string,\n \"á\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"not_lt_string_empty","expr":"'' \u003c ''","value":{"boolValue":false}},"ast":"_\u003c_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"\"~string,\n \"\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"not_lt_string_same","expr":"'abc' \u003c 'abc'","value":{"boolValue":false}},"ast":"_\u003c_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"abc\"~string,\n \"abc\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"not_lt_string_case_length","expr":"'a' \u003c 'AB'","value":{"boolValue":false}},"ast":"_\u003c_(\n \"a\"^#*expr.Constant_StringValue#,\n \"AB\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"a\"~string,\n \"AB\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"unicode_order_lexical","description":"Compare the actual code points of the string, instead of decomposing ế into 'e' plus accent modifiers.","expr":"'f' \u003c '\\u1EBF'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"f\"^#*expr.Constant_StringValue#,\n \"ế\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"f\"~string,\n \"ế\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_bytes","expr":"b'a' \u003c b'b'","value":{"boolValue":true}},"ast":"_\u003c_(\n b\"a\"^#*expr.Constant_BytesValue#,\n b\"b\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n b\"a\"~bytes,\n b\"b\"~bytes\n)~bool^less_bytes","type":"bool"},{"original":{"name":"not_lt_bytes_same","expr":"b'abc' \u003c b'abc'","value":{"boolValue":false}},"ast":"_\u003c_(\n b\"abc\"^#*expr.Constant_BytesValue#,\n b\"abc\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n b\"abc\"~bytes,\n b\"abc\"~bytes\n)~bool^less_bytes","type":"bool"},{"original":{"name":"not_lt_bytes_width","expr":"b'á' \u003c b'b'","value":{"boolValue":false}},"ast":"_\u003c_(\n b\"á\"^#*expr.Constant_BytesValue#,\n b\"b\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n b\"á\"~bytes,\n b\"b\"~bytes\n)~bool^less_bytes","type":"bool"},{"original":{"name":"lt_bool_false_first","expr":"false \u003c true","value":{"boolValue":true}},"ast":"_\u003c_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n false~bool,\n true~bool\n)~bool^less_bool","type":"bool"},{"original":{"name":"not_lt_bool_same","expr":"true \u003c true","value":{"boolValue":false}},"ast":"_\u003c_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n true~bool,\n true~bool\n)~bool^less_bool","type":"bool"},{"original":{"name":"not_lt_bool_true_first","expr":"true \u003c false","value":{"boolValue":false}},"ast":"_\u003c_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n true~bool,\n false~bool\n)~bool^less_bool","type":"bool"},{"original":{"name":"lt_list_unsupported","expr":"[0] \u003c [1]","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003c_' applied to '(list(int), list(int))'\n | [0] \u003c [1]\n | ....^"},{"original":{"name":"lt_map_unsupported","expr":"{0:'a'} \u003c {1:'b'}","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n {\n 0^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003c_' applied to '(map(int, string), map(int, string))'\n | {0:'a'} \u003c {1:'b'}\n | ........^"},{"original":{"name":"lt_null_unsupported","description":"Ensure _\u003c_ doesn't have a binding for null","expr":"null \u003c null","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n null~null,\n null~null\n)~bool^less_duration|less_timestamp","type":"bool"},{"original":{"name":"lt_mixed_types_error","expr":"'foo' \u003c 1024","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n \"foo\"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003c_' applied to '(string, int)'\n | 'foo' \u003c 1024\n | ......^"},{"original":{"name":"lt_dyn_int_uint","expr":"dyn(1) \u003c 2u","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"lt_dyn_int_double","expr":"dyn(1) \u003c 2.0","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_dyn_uint_int","expr":"dyn(1u) \u003c 2","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"lt_dyn_uint_double","expr":"dyn(1u) \u003c 2.0","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_dyn_double_int","expr":"dyn(1.0) \u003c 2","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"lt_dyn_double_uint","expr":"dyn(1.0) \u003c 2u","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_dyn_int_uint","expr":"dyn(1) \u003c 1u","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_dyn_int_double","expr":"dyn(1) \u003c 1.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_uint_int","expr":"dyn(1u) \u003c 1","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_uint_double","expr":"dyn(1u) \u003c 1.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_double_int","expr":"dyn(1.0) \u003c 1","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_double_uint","expr":"dyn(1.0) \u003c 1u","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"lt_dyn_int_big_uint","expr":"dyn(1) \u003c 9223372036854775808u","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"lt_dyn_small_int_uint","expr":"dyn(-1) \u003c 0u","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_dyn_int_big_lossy_double","expr":"dyn(9223372036854775807) \u003c 9223372036854775808.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_dyn_int_big_lossy_double","expr":"dyn(9223372036854775807) \u003c 9223372036854777857.0","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854778e+18~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_int_small_double","expr":"dyn(9223372036854775807) \u003c -9223372036854777857.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_int_small_lossy_double","expr":"dyn(-9223372036854775808) \u003c -9223372036854775809.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_uint_small_int","expr":"dyn(1u) \u003c -9223372036854775808","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_big_uint_int","expr":"dyn(9223372036854775808u) \u003c 1","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_uint_small_double","expr":"dyn(18446744073709551615u) \u003c -1.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_dyn_uint_big_double","expr":"dyn(18446744073709551615u) \u003c 18446744073709590000.0","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_big_double_uint","expr":"dyn(18446744073709553665.0) \u003c 18446744073709551615u","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_dyn_big_double_int","expr":"dyn(9223372036854775808.0) \u003c 9223372036854775807","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_small_double_int","expr":"dyn(-9223372036854775809.0) \u003c -9223372036854775808","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_int64","type":"bool"}]},{"name":"gt_literal","tests":[{"original":{"name":"gt_int","expr":"42 \u003e -42","value":{"boolValue":true}},"ast":"_\u003e_(\n 42^#*expr.Constant_Int64Value#,\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 42~int,\n -42~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"not_gt_int","expr":"0 \u003e 0","value":{"boolValue":false}},"ast":"_\u003e_(\n 0^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 0~int,\n 0~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_uint","expr":"48u \u003e 46u","value":{"boolValue":true}},"ast":"_\u003e_(\n 48u^#*expr.Constant_Uint64Value#,\n 46u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 48u~uint,\n 46u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_uint","expr":"0u \u003e 999u","value":{"boolValue":false}},"ast":"_\u003e_(\n 0u^#*expr.Constant_Uint64Value#,\n 999u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 0u~uint,\n 999u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"gt_double","expr":"1e+1 \u003e 1e+0","value":{"boolValue":true}},"ast":"_\u003e_(\n 10^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 10~double,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_double","expr":".99 \u003e 9.9e-1","value":{"boolValue":false}},"ast":"_\u003e_(\n 0.99^#*expr.Constant_DoubleValue#,\n 0.99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 0.99~double,\n 0.99~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_string_case","expr":"'abc' \u003e 'aBc'","value":{"boolValue":true}},"ast":"_\u003e_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"aBc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n \"abc\"~string,\n \"aBc\"~string\n)~bool^greater_string","type":"bool"},{"original":{"name":"gt_string_to_empty","expr":"'A' \u003e ''","value":{"boolValue":true}},"ast":"_\u003e_(\n \"A\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n \"A\"~string,\n \"\"~string\n)~bool^greater_string","type":"bool"},{"original":{"name":"not_gt_string_empty_to_empty","expr":"'' \u003e ''","value":{"boolValue":false}},"ast":"_\u003e_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n \"\"~string,\n \"\"~string\n)~bool^greater_string","type":"bool"},{"original":{"name":"gt_string_unicode","expr":"'α' \u003e 'omega'","value":{"boolValue":true}},"ast":"_\u003e_(\n \"α\"^#*expr.Constant_StringValue#,\n \"omega\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n \"α\"~string,\n \"omega\"~string\n)~bool^greater_string","type":"bool"},{"original":{"name":"gt_bytes_one","expr":"b'\u0001' \u003e b'\u0000'","value":{"boolValue":true}},"ast":"_\u003e_(\n b\"\\x01\"^#*expr.Constant_BytesValue#,\n b\"\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n b\"\\x01\"~bytes,\n b\"\\x00\"~bytes\n)~bool^greater_bytes","type":"bool"},{"original":{"name":"gt_bytes_one_to_empty","expr":"b'\u0000' \u003e b''","value":{"boolValue":true}},"ast":"_\u003e_(\n b\"\\x00\"^#*expr.Constant_BytesValue#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n b\"\\x00\"~bytes,\n b\"\"~bytes\n)~bool^greater_bytes","type":"bool"},{"original":{"name":"not_gt_bytes_sorting","expr":"b'\u0000\u0001' \u003e b'\u0001'","value":{"boolValue":false}},"ast":"_\u003e_(\n b\"\\x00\\x01\"^#*expr.Constant_BytesValue#,\n b\"\\x01\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n b\"\\x00\\x01\"~bytes,\n b\"\\x01\"~bytes\n)~bool^greater_bytes","type":"bool"},{"original":{"name":"gt_bool_true_false","expr":"true \u003e false","value":{"boolValue":true}},"ast":"_\u003e_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n true~bool,\n false~bool\n)~bool^greater_bool","type":"bool"},{"original":{"name":"not_gt_bool_false_true","expr":"false \u003e true","value":{"boolValue":false}},"ast":"_\u003e_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n false~bool,\n true~bool\n)~bool^greater_bool","type":"bool"},{"original":{"name":"not_gt_bool_same","expr":"true \u003e true","value":{"boolValue":false}},"ast":"_\u003e_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n true~bool,\n true~bool\n)~bool^greater_bool","type":"bool"},{"original":{"name":"gt_null_unsupported","expr":"null \u003e null","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n null~null,\n null~null\n)~bool^greater_duration|greater_timestamp","type":"bool"},{"original":{"name":"gt_list_unsupported","expr":"[1] \u003e [0]","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e_(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003e_' applied to '(list(int), list(int))'\n | [1] \u003e [0]\n | ....^"},{"original":{"name":"gt_map_unsupported","expr":"{1:'b'} \u003e {0:'a'}","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e_(\n {\n 1^#*expr.Constant_Int64Value#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 0^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003e_' applied to '(map(int, string), map(int, string))'\n | {1:'b'} \u003e {0:'a'}\n | ........^"},{"original":{"name":"gt_mixed_types_error","expr":"'foo' \u003e 1024","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e_(\n \"foo\"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e_' applied to '(string, int)'\n | 'foo' \u003e 1024\n | ......^"},{"original":{"name":"gt_dyn_int_uint","expr":"dyn(2) \u003e 1u","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"gt_dyn_int_double","expr":"dyn(2) \u003e 1.0","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_uint_int","expr":"dyn(2u) \u003e 1","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_dyn_uint_double","expr":"dyn(2u) \u003e 1.0","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_double_int","expr":"dyn(2.0) \u003e 1","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_dyn_double_uint","expr":"dyn(2.0) \u003e 1u","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_int_uint","expr":"dyn(1) \u003e 1u","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_int_double","expr":"dyn(1) \u003e 1.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_dyn_uint_int","expr":"dyn(1u) \u003e 1","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"not_gt_dyn_uint_double","expr":"dyn(1u) \u003e 1.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_dyn_double_int","expr":"dyn(1.0) \u003e 1","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"not_gt_dyn_double_uint","expr":"dyn(1.0) \u003e 1u","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_int_big_uint","expr":"dyn(1) \u003e 9223372036854775808u","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_small_int_uint","expr":"dyn(-1) \u003e 0u","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_int_big_double","expr":"dyn(9223372036854775807) \u003e 9223372036854775808.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_dyn_int_small_lossy_double","description":"The conversion of the int to double is lossy and the numbers end up being equal","expr":"dyn(-9223372036854775808) \u003e -9223372036854775809.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_int_small_lossy_double_greater","expr":"dyn(-9223372036854775808) \u003e -9223372036854777857.0","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_uint_small_int","expr":"dyn(1u) \u003e -1","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_dyn_big_uint_int","expr":"dyn(9223372036854775808u) \u003e 1","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_dyn_uint_small_double","expr":"dyn(9223372036854775807u) \u003e -1.0","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 9223372036854775807u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_dyn_uint_big_double","expr":"dyn(18446744073709551615u) \u003e 18446744073709590000.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_big_double_uint","expr":"dyn(18446744073709553665.0) \u003e 18446744073709551615u","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_big_double_int","expr":"dyn(9223372036854775808.0) \u003e 9223372036854775807","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"not_gt_dyn_small_double_int","expr":"dyn(-9223372036854775809.0) \u003e -9223372036854775808","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^greater_int64","type":"bool"}]},{"name":"lte_literal","tests":[{"original":{"name":"lte_int_lt","expr":"0 \u003c= 1","value":{"boolValue":true}},"ast":"_\u003c=_(\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 0~int,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_int_eq","expr":"1 \u003c= 1","value":{"boolValue":true}},"ast":"_\u003c=_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1~int,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_int_gt","expr":"1 \u003c= -1","value":{"boolValue":false}},"ast":"_\u003c=_(\n 1^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1~int,\n -1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_uint_lt","expr":"0u \u003c= 1u","value":{"boolValue":true}},"ast":"_\u003c=_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 0u~uint,\n 1u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_uint_eq","expr":"1u \u003c= 1u","value":{"boolValue":true}},"ast":"_\u003c=_(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1u~uint,\n 1u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"not_lte_uint_gt","expr":"1u \u003c= 0u","value":{"boolValue":false}},"ast":"_\u003c=_(\n 1u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1u~uint,\n 0u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_double_lt","expr":"0.0 \u003c= 0.1e-31","value":{"boolValue":true}},"ast":"_\u003c=_(\n 0^#*expr.Constant_DoubleValue#,\n 1e-32^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 0~double,\n 1e-32~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_double_eq","expr":"0.0 \u003c= 0e-1","value":{"boolValue":true}},"ast":"_\u003c=_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 0~double,\n 0~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_double_gt","expr":"1.0 \u003c= 0.99","value":{"boolValue":false}},"ast":"_\u003c=_(\n 1^#*expr.Constant_DoubleValue#,\n 0.99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1~double,\n 0.99~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_string_empty","expr":"'' \u003c= ''","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"\"~string,\n \"\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_string_from_empty","expr":"'' \u003c= 'a'","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"\"^#*expr.Constant_StringValue#,\n \"a\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"\"~string,\n \"a\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"not_lte_string_to_empty","expr":"'a' \u003c= ''","value":{"boolValue":false}},"ast":"_\u003c=_(\n \"a\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"a\"~string,\n \"\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_string_lexicographical","expr":"'aBc' \u003c= 'abc'","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"aBc\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"aBc\"~string,\n \"abc\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_string_unicode_eq","expr":"'α' \u003c= 'α'","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"α\"^#*expr.Constant_StringValue#,\n \"α\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"α\"~string,\n \"α\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_string_unicode_lt","expr":"'a' \u003c= 'α'","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"a\"^#*expr.Constant_StringValue#,\n \"α\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"a\"~string,\n \"α\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"not_lte_string_unicode","expr":"'α' \u003c= 'a'","value":{"boolValue":false}},"ast":"_\u003c=_(\n \"α\"^#*expr.Constant_StringValue#,\n \"a\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"α\"~string,\n \"a\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_bytes_empty","expr":"b'' \u003c= b'\u0000'","value":{"boolValue":true}},"ast":"_\u003c=_(\n b\"\"^#*expr.Constant_BytesValue#,\n b\"\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n b\"\"~bytes,\n b\"\\x00\"~bytes\n)~bool^less_equals_bytes","type":"bool"},{"original":{"name":"not_lte_bytes_length","expr":"b'\u0001\u0000' \u003c= b'\u0001'","value":{"boolValue":false}},"ast":"_\u003c=_(\n b\"\\x01\\x00\"^#*expr.Constant_BytesValue#,\n b\"\\x01\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n b\"\\x01\\x00\"~bytes,\n b\"\\x01\"~bytes\n)~bool^less_equals_bytes","type":"bool"},{"original":{"name":"lte_bool_false_true","expr":"false \u003c= true","value":{"boolValue":true}},"ast":"_\u003c=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n false~bool,\n true~bool\n)~bool^less_equals_bool","type":"bool"},{"original":{"name":"lte_bool_false_false","expr":"false \u003c= false","value":{"boolValue":true}},"ast":"_\u003c=_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n false~bool,\n false~bool\n)~bool^less_equals_bool","type":"bool"},{"original":{"name":"lte_bool_true_false","expr":"true \u003c= false","value":{"boolValue":false}},"ast":"_\u003c=_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n true~bool,\n false~bool\n)~bool^less_equals_bool","type":"bool"},{"original":{"name":"lte_null_unsupported","expr":"null \u003c= null","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n null~null,\n null~null\n)~bool^less_equals_duration|less_equals_timestamp","type":"bool"},{"original":{"name":"lte_list_unsupported","expr":"[0] \u003c= [0]","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c=_(\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003c=_' applied to '(list(int), list(int))'\n | [0] \u003c= [0]\n | ....^"},{"original":{"name":"lte_map_unsupported","expr":"{0:'a'} \u003c= {1:'b'}","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c=_(\n {\n 0^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003c=_' applied to '(map(int, string), map(int, string))'\n | {0:'a'} \u003c= {1:'b'}\n | ........^"},{"original":{"name":"lte_mixed_types_error","expr":"'foo' \u003c= 1024","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c=_(\n \"foo\"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003c=_' applied to '(string, int)'\n | 'foo' \u003c= 1024\n | ......^"},{"original":{"name":"lte_dyn_int_uint","expr":"dyn(1) \u003c= 2u","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_int_double","expr":"dyn(1) \u003c= 2.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_dyn_uint_int","expr":"dyn(1u) \u003c= 2","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_dyn_uint_double","expr":"dyn(1u) \u003c= 2.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_dyn_double_int","expr":"dyn(1.0) \u003c= 2","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_dyn_double_uint","expr":"dyn(1.0) \u003c= 2u","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"not_lte_dyn_int_uint","expr":"dyn(2) \u003c= 1u","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"not_lte_dyn_int_double","expr":"dyn(2) \u003c= 1.0","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_uint_int","expr":"dyn(2u) \u003c= 1","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_dyn_uint_double","expr":"dyn(2u) \u003c= 1.0","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_double_int","expr":"dyn(2.0) \u003c= 1","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_dyn_double_uint","expr":"dyn(2.0) \u003c= 1u","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_int_big_uint","expr":"dyn(1) \u003c= 9223372036854775808u","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_small_int_uint","expr":"dyn(-1) \u003c= 0u","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_int_big_double","expr":"dyn(9223372036854775807) \u003c= 9223372036854775808.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_dyn_int_small_lossy_double","description":"The conversion of the int to double is lossy and the numbers end up being equal","expr":"dyn(-9223372036854775808) \u003c= -9223372036854775809.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_int_small_lossy_double_less","expr":"dyn(-9223372036854775808) \u003c= -9223372036854777857.0","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_uint_small_int","expr":"dyn(1u) \u003c= -9223372036854775808","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_dyn_big_uint_int","expr":"dyn(9223372036854775808u) \u003c= 1","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_dyn_uint_small_double","expr":"dyn(18446744073709551615u) \u003c= -1.0","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_dyn_uint_big_double","expr":"dyn(18446744073709551615u) \u003c= 18446744073709590000.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_big_double_uint","expr":"dyn(18446744073709553665.0) \u003c= 18446744073709551615u","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_big_double_int","expr":"dyn(9223372036854775808.0) \u003c= 9223372036854775807","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_dyn_small_double_int","expr":"dyn(-9223372036854775809.0) \u003c= -9223372036854775808","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_equals_int64","type":"bool"}]},{"name":"gte_literal","tests":[{"original":{"name":"gte_int_gt","expr":"0 \u003e= -1","value":{"boolValue":true}},"ast":"_\u003e=_(\n 0^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 0~int,\n -1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_int_eq","expr":"999 \u003e= 999","value":{"boolValue":true}},"ast":"_\u003e=_(\n 999^#*expr.Constant_Int64Value#,\n 999^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 999~int,\n 999~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"not_gte_int_lt","expr":"999 \u003e= 1000","value":{"boolValue":false}},"ast":"_\u003e=_(\n 999^#*expr.Constant_Int64Value#,\n 1000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 999~int,\n 1000~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_uint_gt","expr":"1u \u003e= 0u","value":{"boolValue":true}},"ast":"_\u003e=_(\n 1u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 1u~uint,\n 0u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_uint_eq","expr":"0u \u003e= 0u","value":{"boolValue":true}},"ast":"_\u003e=_(\n 0u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 0u~uint,\n 0u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_uint_lt","expr":"1u \u003e= 10u","value":{"boolValue":false}},"ast":"_\u003e=_(\n 1u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 1u~uint,\n 10u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_double_gt","expr":"1e+1 \u003e= 1e+0","value":{"boolValue":true}},"ast":"_\u003e=_(\n 10^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 10~double,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_double_eq","expr":"9.80665 \u003e= 9.80665e+0","value":{"boolValue":true}},"ast":"_\u003e=_(\n 9.80665^#*expr.Constant_DoubleValue#,\n 9.80665^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 9.80665~double,\n 9.80665~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_double_lt","expr":"0.9999 \u003e= 1.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n 0.9999^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 0.9999~double,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_string_empty","expr":"'' \u003e= ''","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"\"~string,\n \"\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_to_empty","expr":"'a' \u003e= ''","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"a\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"a\"~string,\n \"\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_empty_to_nonempty","expr":"'' \u003e= 'a'","value":{"boolValue":false}},"ast":"_\u003e=_(\n \"\"^#*expr.Constant_StringValue#,\n \"a\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"\"~string,\n \"a\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_length","expr":"'abcd' \u003e= 'abc'","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"abcd\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"abcd\"~string,\n \"abc\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"not_gte_string_lexicographical","expr":"'abc' \u003e= 'abd'","value":{"boolValue":false}},"ast":"_\u003e=_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abd\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"abc\"~string,\n \"abd\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_unicode_eq","expr":"'τ' \u003e= 'τ'","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"τ\"^#*expr.Constant_StringValue#,\n \"τ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"τ\"~string,\n \"τ\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_unicode_gt","expr":"'τ' \u003e= 't'","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"τ\"^#*expr.Constant_StringValue#,\n \"t\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"τ\"~string,\n \"t\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"not_get_string_unicode","expr":"'t' \u003e= 'τ'","value":{"boolValue":false}},"ast":"_\u003e=_(\n \"t\"^#*expr.Constant_StringValue#,\n \"τ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"t\"~string,\n \"τ\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_bytes_to_empty","expr":"b'\u0000' \u003e= b''","value":{"boolValue":true}},"ast":"_\u003e=_(\n b\"\\x00\"^#*expr.Constant_BytesValue#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n b\"\\x00\"~bytes,\n b\"\"~bytes\n)~bool^greater_equals_bytes","type":"bool"},{"original":{"name":"not_gte_bytes_empty_to_nonempty","expr":"b'' \u003e= b'\u0000'","value":{"boolValue":false}},"ast":"_\u003e=_(\n b\"\"^#*expr.Constant_BytesValue#,\n b\"\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n b\"\"~bytes,\n b\"\\x00\"~bytes\n)~bool^greater_equals_bytes","type":"bool"},{"original":{"name":"gte_bytes_samelength","expr":"b'\u0000\u0001' \u003e= b'\u0001\u0000'","value":{"boolValue":false}},"ast":"_\u003e=_(\n b\"\\x00\\x01\"^#*expr.Constant_BytesValue#,\n b\"\\x01\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n b\"\\x00\\x01\"~bytes,\n b\"\\x01\\x00\"~bytes\n)~bool^greater_equals_bytes","type":"bool"},{"original":{"name":"gte_bool_gt","expr":"true \u003e= false","value":{"boolValue":true}},"ast":"_\u003e=_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n true~bool,\n false~bool\n)~bool^greater_equals_bool","type":"bool"},{"original":{"name":"gte_bool_eq","expr":"true \u003e= true","value":{"boolValue":true}},"ast":"_\u003e=_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n true~bool,\n true~bool\n)~bool^greater_equals_bool","type":"bool"},{"original":{"name":"not_gte_bool_lt","expr":"false \u003e= true","value":{"boolValue":false}},"ast":"_\u003e=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n false~bool,\n true~bool\n)~bool^greater_equals_bool","type":"bool"},{"original":{"name":"gte_null_unsupported","expr":"null \u003e= null","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n null~null,\n null~null\n)~bool^greater_equals_duration|greater_equals_timestamp","type":"bool"},{"original":{"name":"gte_list_unsupported","expr":"['y'] \u003e= ['x']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e=_(\n [\n \"y\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n \"x\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e=_' applied to '(list(string), list(string))'\n | ['y'] \u003e= ['x']\n | ......^"},{"original":{"name":"gte_map_unsupported","expr":"{1:'b'} \u003e= {0:'a'}","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e=_(\n {\n 1^#*expr.Constant_Int64Value#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 0^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003e=_' applied to '(map(int, string), map(int, string))'\n | {1:'b'} \u003e= {0:'a'}\n | ........^"},{"original":{"name":"gte_mixed_types_error","expr":"'foo' \u003e= 1.0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e=_(\n \"foo\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e=_' applied to '(string, double)'\n | 'foo' \u003e= 1.0\n | ......^"},{"original":{"name":"gte_dyn_int_uint","expr":"dyn(2) \u003e= 1u","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_dyn_int_double","expr":"dyn(2) \u003e= 1.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_uint_int","expr":"dyn(2u) \u003e= 1","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_uint_double","expr":"dyn(2u) \u003e= 1.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_double_int","expr":"dyn(2.0) \u003e= 1","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_double_uint","expr":"dyn(2.0) \u003e= 1u","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_dyn_int_uint","expr":"dyn(0) \u003e= 1u","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_dyn_int_double","expr":"dyn(0) \u003e= 1.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_dyn_uint_int","expr":"dyn(0u) \u003e= 1","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"not_gte_dyn_uint_double","expr":"dyn(0u) \u003e= 1.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_dyn_double_int","expr":"dyn(0.0) \u003e= 1","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"not_gte_dyn_double_uint","expr":"dyn(0.0) \u003e= 1u","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_dyn_int_big_uint","expr":"dyn(1) \u003e= 9223372036854775808u","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_dyn_small_int_uint","expr":"dyn(-1) \u003e= 0u","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_dyn_int_big_lossy_double","expr":"dyn(9223372036854775807) \u003e= 9223372036854775808.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_dyn_int_big_double","expr":"dyn(9223372036854775807) \u003e= 9223372036854777857.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854778e+18~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_int_small_lossy_double_equal","description":"The conversion of the int to double is lossy and the numbers end up being equal","expr":"dyn(-9223372036854775808) \u003e= -9223372036854775809.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_int_small_lossy_double_greater","expr":"dyn(-9223372036854775808) \u003e= -9223372036854777857.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_uint_small_int","expr":"dyn(1u) \u003e= -1","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_big_uint_int","expr":"dyn(9223372036854775808u) \u003e= 1","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_uint_small_double","expr":"dyn(9223372036854775807u) \u003e= -1.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9223372036854775807u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_dyn_uint_big_double","expr":"dyn(18446744073709551615u) \u003e= 18446744073709553665.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.8446744073709556e+19~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_big_double_uint","expr":"dyn(18446744073709553665.0) \u003e= 18446744073709551615u","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_dyn_big_double_int","expr":"dyn(9223372036854775808.0) \u003e= 9223372036854775807","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_small_double_int","expr":"dyn(-9223372036854775809.0) \u003e= -9223372036854775808","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^greater_equals_int64","type":"bool"}]},{"name":"in_list_literal","tests":[{"original":{"name":"elem_not_in_empty_list","expr":"'empty' in []","value":{"boolValue":false}},"ast":"@in(\n \"empty\"^#*expr.Constant_StringValue#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"empty\"~string,\n []~list(string)\n)~bool^in_list","type":"bool"},{"original":{"name":"elem_in_list","expr":"'elem' in ['elem', 'elemA', 'elemB']","value":{"boolValue":true}},"ast":"@in(\n \"elem\"^#*expr.Constant_StringValue#,\n [\n \"elem\"^#*expr.Constant_StringValue#,\n \"elemA\"^#*expr.Constant_StringValue#,\n \"elemB\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"elem\"~string,\n [\n \"elem\"~string,\n \"elemA\"~string,\n \"elemB\"~string\n ]~list(string)\n)~bool^in_list","type":"bool"},{"original":{"name":"elem_not_in_list","expr":"'not' in ['elem1', 'elem2', 'elem3']","value":{"boolValue":false}},"ast":"@in(\n \"not\"^#*expr.Constant_StringValue#,\n [\n \"elem1\"^#*expr.Constant_StringValue#,\n \"elem2\"^#*expr.Constant_StringValue#,\n \"elem3\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"not\"~string,\n [\n \"elem1\"~string,\n \"elem2\"~string,\n \"elem3\"~string\n ]~list(string)\n)~bool^in_list","type":"bool"},{"original":{"name":"elem_in_mixed_type_list","description":"Set membership tests should succeed if the 'elem' exists in a mixed element type list.","expr":"'elem' in [1, 'elem', 2]","value":{"boolValue":true}},"ast":"@in(\n \"elem\"^#*expr.Constant_StringValue#,\n [\n 1^#*expr.Constant_Int64Value#,\n \"elem\"^#*expr.Constant_StringValue#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"elem\"~string,\n [\n 1~int,\n \"elem\"~string,\n 2~int\n ]~list(dyn)\n)~bool^in_list","type":"bool"},{"original":{"name":"elem_in_mixed_type_list_cross_type","description":"Set membership tests should return false due to the introduction of heterogeneous-equality. Set membership via 'in' is equivalent to the macro exists() behavior.","expr":"'elem' in [1u, 'str', 2, b'bytes']","value":{"boolValue":false}},"ast":"@in(\n \"elem\"^#*expr.Constant_StringValue#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n \"str\"^#*expr.Constant_StringValue#,\n 2^#*expr.Constant_Int64Value#,\n b\"bytes\"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"elem\"~string,\n [\n 1u~uint,\n \"str\"~string,\n 2~int,\n b\"bytes\"~bytes\n ]~list(dyn)\n)~bool^in_list","type":"bool"}]},{"name":"in_map_literal","tests":[{"original":{"name":"key_not_in_empty_map","expr":"'empty' in {}","value":{"boolValue":false}},"ast":"@in(\n \"empty\"^#*expr.Constant_StringValue#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"empty\"~string,\n {}~map(string, dyn)\n)~bool^in_map","type":"bool"},{"original":{"name":"key_in_map","expr":"'key' in {'key':'1', 'other':'2'}","value":{"boolValue":true}},"ast":"@in(\n \"key\"^#*expr.Constant_StringValue#,\n {\n \"key\"^#*expr.Constant_StringValue#:\"1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"other\"^#*expr.Constant_StringValue#:\"2\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"key\"~string,\n {\n \"key\"~string:\"1\"~string,\n \"other\"~string:\"2\"~string\n }~map(string, string)\n)~bool^in_map","type":"bool"},{"original":{"name":"key_not_in_map","expr":"'key' in {'lock':1, 'gate':2}","value":{"boolValue":false}},"ast":"@in(\n \"key\"^#*expr.Constant_StringValue#,\n {\n \"lock\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"gate\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"key\"~string,\n {\n \"lock\"~string:1~int,\n \"gate\"~string:2~int\n }~map(string, int)\n)~bool^in_map","type":"bool"},{"original":{"name":"key_in_mixed_key_type_map","description":"Map keys are of mixed type, but since the key is present the result is true.","expr":"'key' in {3:3.0, 'key':2u}","value":{"boolValue":true}},"ast":"@in(\n \"key\"^#*expr.Constant_StringValue#,\n {\n 3^#*expr.Constant_Int64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"key\"^#*expr.Constant_StringValue#:2u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"key\"~string,\n {\n 3~int:3~double,\n \"key\"~string:2u~uint\n }~map(dyn, dyn)\n)~bool^in_map","type":"bool"},{"original":{"name":"key_in_mixed_key_type_map_cross_type","expr":"'key' in {1u:'str', 2:b'bytes'}","value":{"boolValue":false}},"ast":"@in(\n \"key\"^#*expr.Constant_StringValue#,\n {\n 1u^#*expr.Constant_Uint64Value#:\"str\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:b\"bytes\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"key\"~string,\n {\n 1u~uint:\"str\"~string,\n 2~int:b\"bytes\"~bytes\n }~map(dyn, dyn)\n)~bool^in_map","type":"bool"}]},{"name":"bound","tests":[{"original":{"name":"bytes_gt_left_false","expr":"x \u003e b'\u0000'","typeEnv":[{"name":"x","ident":{"type":{"primitive":"BYTES"}}}],"bindings":{"x":{"value":{"bytesValue":"AA=="}}},"value":{"boolValue":false}},"ast":"_\u003e_(\n x^#*expr.Expr_IdentExpr#,\n b\"\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n x~bytes^x,\n b\"\\x00\"~bytes\n)~bool^greater_bytes","type":"bool"},{"original":{"name":"int_lte_right_true","expr":"123 \u003c= x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"x":{"value":{"int64Value":"124"}}},"value":{"boolValue":true}},"ast":"_\u003c=_(\n 123^#*expr.Constant_Int64Value#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 123~int,\n x~int^x\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"bool_lt_right_true","expr":"false \u003c x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"x":{"value":{"boolValue":true}}},"value":{"boolValue":true}},"ast":"_\u003c_(\n false^#*expr.Constant_BoolValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n false~bool,\n x~bool^x\n)~bool^less_bool","type":"bool"},{"original":{"name":"double_ne_left_false","expr":"x != 9.8","typeEnv":[{"name":"x","ident":{"type":{"primitive":"DOUBLE"}}}],"bindings":{"x":{"value":{"doubleValue":9.8}}},"value":{"boolValue":false}},"ast":"_!=_(\n x^#*expr.Expr_IdentExpr#,\n 9.8^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n x~double^x,\n 9.8~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"map_ne_right_false","expr":"{'a':'b','c':'d'} != x","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"c"},"value":{"stringValue":"d"}},{"key":{"stringValue":"a"},"value":{"stringValue":"b"}}]}}}},"value":{"boolValue":false}},"ast":"_!=_(\n {\n \"a\"^#*expr.Constant_StringValue#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"c\"^#*expr.Constant_StringValue#:\"d\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n \"a\"~string:\"b\"~string,\n \"c\"~string:\"d\"~string\n }~map(string, string),\n x~map(string, string)^x\n)~bool^not_equals","type":"bool"},{"original":{"name":"null_eq_left_true","description":"A comparison _==_ against null only binds if the type is determined to be null or we skip the type checking","expr":"x == null","typeEnv":[{"name":"x","ident":{"type":{"null":null}}}],"bindings":{"x":{"value":{"nullValue":null}}},"value":{"boolValue":true}},"ast":"_==_(\n x^#*expr.Expr_IdentExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n x~null^x,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"list_eq_right_false","expr":"[1, 2] == x","typeEnv":[{"name":"x","ident":{"type":{"listType":{"elemType":{"primitive":"INT64"}}}}}],"bindings":{"x":{"value":{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"1"}]}}}},"value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n 2~int\n ]~list(int),\n x~list(int)^x\n)~bool^equals","type":"bool"},{"original":{"name":"string_gte_right_true","expr":"'abcd' \u003e= x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"x":{"value":{"stringValue":"abc"}}},"value":{"boolValue":true}},"ast":"_\u003e=_(\n \"abcd\"^#*expr.Constant_StringValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"abcd\"~string,\n x~string^x\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"uint_eq_right_false","expr":"999u == x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"UINT64"}}}],"bindings":{"x":{"value":{"uint64Value":"1000"}}},"value":{"boolValue":false}},"ast":"_==_(\n 999u^#*expr.Constant_Uint64Value#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 999u~uint,\n x~uint^x\n)~bool^equals","type":"bool"},{"original":{"name":"null_lt_right_no_such_overload","description":"There is no _\u003c_ operation for null, even if both operands are null","expr":"null \u003c x","disableCheck":true,"bindings":{"x":{"value":{"nullValue":null}}},"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n null^#*expr.Constant_NullValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:8: undeclared reference to 'x' (in container '')\n | null \u003c x\n | .......^"}]}]},{"name":"conversions","suites":[{"name":"bytes","tests":[{"original":{"name":"string_empty","expr":"bytes('')","value":{"bytesValue":""}},"ast":"bytes(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bytes(\n \"\"~string\n)~bytes^string_to_bytes","type":"bytes"},{"original":{"name":"string","expr":"bytes('abc')","value":{"bytesValue":"YWJj"}},"ast":"bytes(\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bytes(\n \"abc\"~string\n)~bytes^string_to_bytes","type":"bytes"},{"original":{"name":"string_unicode","expr":"bytes('ÿ')","value":{"bytesValue":"w78="}},"ast":"bytes(\n \"ÿ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bytes(\n \"ÿ\"~string\n)~bytes^string_to_bytes","type":"bytes"},{"original":{"name":"string_unicode_vs_literal","expr":"bytes('\\377') == b'\\377'","value":{"boolValue":false}},"ast":"_==_(\n bytes(\n \"ÿ\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n b\"\\xff\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n bytes(\n \"ÿ\"~string\n )~bytes^string_to_bytes,\n b\"\\xff\"~bytes\n)~bool^equals","type":"bool"}]},{"name":"double","tests":[{"original":{"name":"int_zero","expr":"double(0)","value":{"doubleValue":0}},"ast":"double(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 0~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_pos","expr":"double(1000000000000)","value":{"doubleValue":1000000000000}},"ast":"double(\n 1000000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 1000000000000~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_neg","expr":"double(-1000000000000000)","value":{"doubleValue":-1000000000000000}},"ast":"double(\n -1000000000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n -1000000000000000~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_min_exact","description":"Smallest contiguous representable int (-2^53).","expr":"double(-9007199254740992)","value":{"doubleValue":-9007199254740992}},"ast":"double(\n -9007199254740992^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n -9007199254740992~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_max_exact","description":"Largest contiguous representable int (2^53).","expr":"double(9007199254740992)","value":{"doubleValue":9007199254740992}},"ast":"double(\n 9007199254740992^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 9007199254740992~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_range","description":"Largest signed 64-bit. Rounds to nearest double.","expr":"double(9223372036854775807)","value":{"doubleValue":9223372036854776000}},"ast":"double(\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 9223372036854775807~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"uint_zero","expr":"double(0u)","value":{"doubleValue":0}},"ast":"double(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 0u~uint\n)~double^uint64_to_double","type":"double"},{"original":{"name":"uint_pos","expr":"double(123u)","value":{"doubleValue":123}},"ast":"double(\n 123u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 123u~uint\n)~double^uint64_to_double","type":"double"},{"original":{"name":"uint_max_exact","description":"Largest contiguous representable int (2^53).","expr":"double(9007199254740992u)","value":{"doubleValue":9007199254740992}},"ast":"double(\n 9007199254740992u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 9007199254740992u~uint\n)~double^uint64_to_double","type":"double"},{"original":{"name":"uint_range","description":"Largest unsigned 64-bit.","expr":"double(18446744073709551615u)","value":{"doubleValue":18446744073709552000}},"ast":"double(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 18446744073709551615u~uint\n)~double^uint64_to_double","type":"double"},{"original":{"name":"string_zero","expr":"double('0')","value":{"doubleValue":0}},"ast":"double(\n \"0\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"0\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_zero_dec","expr":"double('0.0')","value":{"doubleValue":0}},"ast":"double(\n \"0.0\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"0.0\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_neg_zero","expr":"double('-0.0')","value":{"doubleValue":0}},"ast":"double(\n \"-0.0\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"-0.0\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_no_dec","expr":"double('123')","value":{"doubleValue":123}},"ast":"double(\n \"123\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"123\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_pos","expr":"double('123.456')","value":{"doubleValue":123.456}},"ast":"double(\n \"123.456\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"123.456\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_neg","expr":"double('-987.654')","value":{"doubleValue":-987.654}},"ast":"double(\n \"-987.654\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"-987.654\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_exp_pos_pos","expr":"double('6.02214e23')","value":{"doubleValue":6.02214e+23}},"ast":"double(\n \"6.02214e23\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"6.02214e23\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_exp_pos_neg","expr":"double('1.38e-23')","value":{"doubleValue":1.38e-23}},"ast":"double(\n \"1.38e-23\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"1.38e-23\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_exp_neg_pos","expr":"double('-84.32e7')","value":{"doubleValue":-843200000}},"ast":"double(\n \"-84.32e7\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"-84.32e7\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_exp_neg_neg","expr":"double('-5.43e-21')","value":{"doubleValue":-5.43e-21}},"ast":"double(\n \"-5.43e-21\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"-5.43e-21\"~string\n)~double^string_to_double","type":"double"}]},{"name":"dyn","tests":[{"original":{"name":"dyn_heterogeneous_list","description":"No need to disable type checking.","expr":"type(dyn([1, 'one']))","value":{"typeValue":"list"}},"ast":"type(\n dyn(\n [\n 1^#*expr.Constant_Int64Value#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n dyn(\n [\n 1~int,\n \"one\"~string\n ]~list(dyn)\n )~dyn^to_dyn\n)~type(dyn)^type","type":"type(dyn)"}]},{"name":"int","tests":[{"original":{"name":"uint","expr":"int(42u)","value":{"int64Value":"42"}},"ast":"int(\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 42u~uint\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"uint_zero","expr":"int(0u)","value":{"int64Value":"0"}},"ast":"int(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 0u~uint\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"uint_max_exact","expr":"int(9223372036854775807u)","value":{"int64Value":"9223372036854775807"}},"ast":"int(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 9223372036854775807u~uint\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"uint_range","expr":"int(18446744073709551615u)","evalError":{"errors":[{"message":"range error"}]}},"ast":"int(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 18446744073709551615u~uint\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"double_round_neg","expr":"int(-123.456)","value":{"int64Value":"-123"}},"ast":"int(\n -123.456^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n -123.456~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_truncate","expr":"int(1.9)","value":{"int64Value":"1"}},"ast":"int(\n 1.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 1.9~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_truncate_neg","expr":"int(-7.9)","value":{"int64Value":"-7"}},"ast":"int(\n -7.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n -7.9~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_half_pos","expr":"int(11.5)","value":{"int64Value":"11"}},"ast":"int(\n 11.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 11.5~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_half_neg","expr":"int(-3.5)","value":{"int64Value":"-3"}},"ast":"int(\n -3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n -3.5~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_big_exact","description":"Beyond exact range (2^53), but no loss of precision (2^55).","expr":"int(double(36028797018963968))","value":{"int64Value":"36028797018963968"}},"ast":"int(\n double(\n 36028797018963968^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n double(\n 36028797018963968~int\n )~double^int64_to_double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_big_precision","description":"Beyond exact range (2^53), but loses precision (2^55 + 1).","expr":"int(double(36028797018963969))","value":{"int64Value":"36028797018963968"}},"ast":"int(\n double(\n 36028797018963969^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n double(\n 36028797018963969~int\n )~double^int64_to_double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_int_max_range","description":"The double(2^63-1) cast produces a floating point value outside the int range","expr":"int(9223372036854775807.0)","evalError":{"errors":[{"message":"range"}]}},"ast":"int(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 9.223372036854776e+18~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_int_min_range","description":"The double(-2^63) cast produces a floating point value outside the int range","expr":"int(-9223372036854775808.0)","evalError":{"errors":[{"message":"range"}]}},"ast":"int(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n -9.223372036854776e+18~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_range","expr":"int(1e99)","evalError":{"errors":[{"message":"range"}]}},"ast":"int(\n 1e+99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 1e+99~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"string","expr":"int('987')","value":{"int64Value":"987"}},"ast":"int(\n \"987\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n \"987\"~string\n)~int^string_to_int64","type":"int"},{"original":{"name":"timestamp","expr":"int(timestamp('2004-09-16T23:59:59Z'))","value":{"int64Value":"1095379199"}},"ast":"int(\n timestamp(\n \"2004-09-16T23:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n timestamp(\n \"2004-09-16T23:59:59Z\"~string\n )~timestamp^string_to_timestamp\n)~int^timestamp_to_int64","type":"int"}]},{"name":"string","tests":[{"original":{"name":"int","expr":"string(123)","value":{"stringValue":"123"}},"ast":"string(\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n 123~int\n)~string^int64_to_string","type":"string"},{"original":{"name":"int_neg","expr":"string(-456)","value":{"stringValue":"-456"}},"ast":"string(\n -456^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n -456~int\n)~string^int64_to_string","type":"string"},{"original":{"name":"uint","expr":"string(9876u)","value":{"stringValue":"9876"}},"ast":"string(\n 9876u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n 9876u~uint\n)~string^uint64_to_string","type":"string"},{"original":{"name":"double","expr":"string(123.456)","value":{"stringValue":"123.456"}},"ast":"string(\n 123.456^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n 123.456~double\n)~string^double_to_string","type":"string"},{"original":{"name":"double_hard","expr":"string(-4.5e-3)","value":{"stringValue":"-0.0045"}},"ast":"string(\n -0.0045^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n -0.0045~double\n)~string^double_to_string","type":"string"},{"original":{"name":"bytes","expr":"string(b'abc')","value":{"stringValue":"abc"}},"ast":"string(\n b\"abc\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n b\"abc\"~bytes\n)~string^bytes_to_string","type":"string"},{"original":{"name":"bytes_unicode","expr":"string(b'\\303\\277')","value":{"stringValue":"ÿ"}},"ast":"string(\n b\"ÿ\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n b\"ÿ\"~bytes\n)~string^bytes_to_string","type":"string"},{"original":{"name":"bytes_invalid","expr":"string(b'\\000\\xff')","evalError":{"errors":[{"message":"invalid UTF-8"}]}},"ast":"string(\n b\"\\x00\\xff\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n b\"\\x00\\xff\"~bytes\n)~string^bytes_to_string","type":"string"}]},{"name":"type","tests":[{"original":{"name":"bool","expr":"type(true)","value":{"typeValue":"bool"}},"ast":"type(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n true~bool\n)~type(bool)^type","type":"type(bool)"},{"original":{"name":"bool_denotation","expr":"bool","value":{"typeValue":"bool"}},"ast":"bool^#*expr.Expr_IdentExpr#","checkedAst":"bool~type(bool)^bool","type":"type(bool)"},{"original":{"name":"dyn_no_denotation","expr":"dyn","disableCheck":true,"evalError":{"errors":[{"message":"unknown variable"}]}},"ast":"dyn^#*expr.Expr_IdentExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'dyn' (in container '')\n | dyn\n | ^"},{"original":{"name":"int","expr":"type(0)","value":{"typeValue":"int"}},"ast":"type(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n 0~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"int_denotation","expr":"int","value":{"typeValue":"int"}},"ast":"int^#*expr.Expr_IdentExpr#","checkedAst":"int~type(int)^int","type":"type(int)"},{"original":{"name":"eq_same","expr":"type(true) == type(false)","value":{"boolValue":true}},"ast":"_==_(\n type(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n type(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n true~bool\n )~type(bool)^type,\n type(\n false~bool\n )~type(bool)^type\n)~bool^equals","type":"bool"},{"original":{"name":"uint","expr":"type(64u)","value":{"typeValue":"uint"}},"ast":"type(\n 64u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n 64u~uint\n)~type(uint)^type","type":"type(uint)"},{"original":{"name":"uint_denotation","expr":"uint","value":{"typeValue":"uint"}},"ast":"uint^#*expr.Expr_IdentExpr#","checkedAst":"uint~type(uint)^uint","type":"type(uint)"},{"original":{"name":"double","expr":"type(3.14)","value":{"typeValue":"double"}},"ast":"type(\n 3.14^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n 3.14~double\n)~type(double)^type","type":"type(double)"},{"original":{"name":"double_denotation","expr":"double","value":{"typeValue":"double"}},"ast":"double^#*expr.Expr_IdentExpr#","checkedAst":"double~type(double)^double","type":"type(double)"},{"original":{"name":"null_type","expr":"type(null)","value":{"typeValue":"null_type"}},"ast":"type(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n null~null\n)~type(null)^type","type":"type(null)"},{"original":{"name":"null_type_denotation","expr":"null_type","value":{"typeValue":"null_type"}},"ast":"null_type^#*expr.Expr_IdentExpr#","checkedAst":"null_type~type(null)^null_type","type":"type(null)"},{"original":{"name":"string","expr":"type('foo')","value":{"typeValue":"string"}},"ast":"type(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n \"foo\"~string\n)~type(string)^type","type":"type(string)"},{"original":{"name":"string_denotation","expr":"string","value":{"typeValue":"string"}},"ast":"string^#*expr.Expr_IdentExpr#","checkedAst":"string~type(string)^string","type":"type(string)"},{"original":{"name":"bytes","expr":"type(b'\\xff')","value":{"typeValue":"bytes"}},"ast":"type(\n b\"\\xff\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n b\"\\xff\"~bytes\n)~type(bytes)^type","type":"type(bytes)"},{"original":{"name":"bytes_denotation","expr":"bytes","value":{"typeValue":"bytes"}},"ast":"bytes^#*expr.Expr_IdentExpr#","checkedAst":"bytes~type(bytes)^bytes","type":"type(bytes)"},{"original":{"name":"list","expr":"type([1, 2, 3])","value":{"typeValue":"list"}},"ast":"type(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~type(list(int))^type","type":"type(list(int))"},{"original":{"name":"list_denotation","expr":"list","value":{"typeValue":"list"}},"ast":"list^#*expr.Expr_IdentExpr#","checkedAst":"list~type(list(dyn))^list","type":"type(list(dyn))"},{"original":{"name":"lists_monomorphic","expr":"type([1, 2, 3]) == type(['one', 'two', 'three'])","value":{"boolValue":true}},"ast":"_==_(\n type(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n [\n \"one\"^#*expr.Constant_StringValue#,\n \"two\"^#*expr.Constant_StringValue#,\n \"three\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n )~type(list(int))^type,\n type(\n [\n \"one\"~string,\n \"two\"~string,\n \"three\"~string\n ]~list(string)\n )~type(list(string))^type\n)~bool^equals","type":"bool"},{"original":{"name":"map","expr":"type({4: 16})","value":{"typeValue":"map"}},"ast":"type(\n {\n 4^#*expr.Constant_Int64Value#:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n {\n 4~int:16~int\n }~map(int, int)\n)~type(map(int, int))^type","type":"type(map(int, int))"},{"original":{"name":"map_denotation","expr":"map","value":{"typeValue":"map"}},"ast":"map^#*expr.Expr_IdentExpr#","checkedAst":"map~type(map(dyn, dyn))^map","type":"type(map(dyn, dyn))"},{"original":{"name":"map_monomorphic","expr":"type({'one': 1}) == type({1: 'one'})","value":{"boolValue":true}},"ast":"_==_(\n type(\n {\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n {\n 1^#*expr.Constant_Int64Value#:\"one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n {\n \"one\"~string:1~int\n }~map(string, int)\n )~type(map(string, int))^type,\n type(\n {\n 1~int:\"one\"~string\n }~map(int, string)\n )~type(map(int, string))^type\n)~bool^equals","type":"bool"},{"original":{"name":"eq_diff","expr":"type(7) == type(7u)","value":{"boolValue":false}},"ast":"_==_(\n type(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n type(\n 7u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n 7~int\n )~type(int)^type,\n type(\n 7u~uint\n )~type(uint)^type\n)~bool^equals","type":"bool"},{"original":{"name":"neq_same","expr":"type(0.0) != type(-0.0)","value":{"boolValue":false}},"ast":"_!=_(\n type(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n type(\n -0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n type(\n 0~double\n )~type(double)^type,\n type(\n -0~double\n )~type(double)^type\n)~bool^not_equals","type":"bool"},{"original":{"name":"neq_diff","expr":"type(0.0) != type(0)","value":{"boolValue":true}},"ast":"_!=_(\n type(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n type(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n type(\n 0~double\n )~type(double)^type,\n type(\n 0~int\n )~type(int)^type\n)~bool^not_equals","type":"bool"},{"original":{"name":"meta","expr":"type(type(7)) == type(type(7u))","value":{"boolValue":true}},"ast":"_==_(\n type(\n type(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n type(\n 7u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n type(\n 7~int\n )~type(int)^type\n )~type(type(int))^type,\n type(\n type(\n 7u~uint\n )~type(uint)^type\n )~type(type(uint))^type\n)~bool^equals","type":"bool"},{"original":{"name":"type","expr":"type(int)","value":{"typeValue":"type"}},"ast":"type(\n int^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n int~type(int)^int\n)~type(type(int))^type","type":"type(type(int))"},{"original":{"name":"type_denotation","expr":"type","value":{"typeValue":"type"}},"ast":"type^#*expr.Expr_IdentExpr#","checkedAst":"type~type(type)^type","type":"type(type)"},{"original":{"name":"type_type","expr":"type(type)","value":{"typeValue":"type"}},"ast":"type(\n type^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n type~type(type)^type\n)~type(type(type))^type","type":"type(type(type))"}]},{"name":"uint","tests":[{"original":{"name":"int","expr":"uint(1729)","value":{"uint64Value":"1729"}},"ast":"uint(\n 1729^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 1729~int\n)~uint^int64_to_uint64","type":"uint"},{"original":{"name":"int_max","expr":"uint(9223372036854775807)","value":{"uint64Value":"9223372036854775807"}},"ast":"uint(\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 9223372036854775807~int\n)~uint^int64_to_uint64","type":"uint"},{"original":{"name":"int_neg","expr":"uint(-1)","evalError":{"errors":[{"message":"range"}]}},"ast":"uint(\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n -1~int\n)~uint^int64_to_uint64","type":"uint"},{"original":{"name":"double","expr":"uint(3.14159265)","value":{"uint64Value":"3"}},"ast":"uint(\n 3.14159265^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 3.14159265~double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_truncate","expr":"uint(1.9)","value":{"uint64Value":"1"}},"ast":"uint(\n 1.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 1.9~double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_half","expr":"uint(25.5)","value":{"uint64Value":"25"}},"ast":"uint(\n 25.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 25.5~double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_big_exact","description":"Beyond exact range (2^53), but no loss of precision (2^55).","expr":"uint(double(36028797018963968u))","value":{"uint64Value":"36028797018963968"}},"ast":"uint(\n double(\n 36028797018963968u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n double(\n 36028797018963968u~uint\n )~double^uint64_to_double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_big_precision","description":"Beyond exact range (2^53), but loses precision (2^55 + 1).","expr":"uint(double(36028797018963969u))","value":{"uint64Value":"36028797018963968"}},"ast":"uint(\n double(\n 36028797018963969u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n double(\n 36028797018963969u~uint\n )~double^uint64_to_double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_uint_max_range","description":"The exact conversion of uint max as a double does not round trip.","expr":"int(18446744073709551615.0)","evalError":{"errors":[{"message":"range"}]}},"ast":"int(\n 1.8446744073709552e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 1.8446744073709552e+19~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_range_beyond_uint","expr":"uint(6.022e23)","evalError":{"errors":[{"message":"range"}]}},"ast":"uint(\n 6.022e+23^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 6.022e+23~double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"string","expr":"uint('300')","value":{"uint64Value":"300"}},"ast":"uint(\n \"300\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n \"300\"~string\n)~uint^string_to_uint64","type":"uint"}]},{"name":"bool","tests":[{"original":{"name":"string_1","expr":"bool('1')","value":{"boolValue":true}},"ast":"bool(\n \"1\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"1\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_t","expr":"bool('t')","value":{"boolValue":true}},"ast":"bool(\n \"t\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"t\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_true_lowercase","expr":"bool('true')","value":{"boolValue":true}},"ast":"bool(\n \"true\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"true\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_true_uppercase","expr":"bool('TRUE')","value":{"boolValue":true}},"ast":"bool(\n \"TRUE\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"TRUE\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_true_pascalcase","expr":"bool('True')","value":{"boolValue":true}},"ast":"bool(\n \"True\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"True\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_0","expr":"bool('0')","value":{"boolValue":false}},"ast":"bool(\n \"0\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"0\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_f","expr":"bool('f')","value":{"boolValue":false}},"ast":"bool(\n \"f\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"f\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_false_lowercase","expr":"bool('false')","value":{"boolValue":false}},"ast":"bool(\n \"false\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"false\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_false_uppercase","expr":"bool('FALSE')","value":{"boolValue":false}},"ast":"bool(\n \"FALSE\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"FALSE\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_false_pascalcase","expr":"bool('False')","value":{"boolValue":false}},"ast":"bool(\n \"False\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"False\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_true_badcase","expr":"bool('TrUe')","evalError":{"errors":[{"message":"Type conversion error"}]}},"ast":"bool(\n \"TrUe\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"TrUe\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_false_badcase","expr":"bool('FaLsE')","evalError":{"errors":[{"message":"Type conversion error"}]}},"ast":"bool(\n \"FaLsE\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"FaLsE\"~string\n)~bool^string_to_bool","type":"bool"}]},{"name":"identity","tests":[{"original":{"name":"bool","expr":"bool(true)","value":{"boolValue":true}},"ast":"bool(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n true~bool\n)~bool^bool_to_bool","type":"bool"},{"original":{"name":"int","expr":"int(1)","value":{"int64Value":"1"}},"ast":"int(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 1~int\n)~int^int64_to_int64","type":"int"},{"original":{"name":"uint","expr":"uint(1u)","value":{"uint64Value":"1"}},"ast":"uint(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 1u~uint\n)~uint^uint64_to_uint64","type":"uint"},{"original":{"name":"double","expr":"double(5.5)","value":{"doubleValue":5.5}},"ast":"double(\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 5.5~double\n)~double^double_to_double","type":"double"},{"original":{"name":"string","expr":"string('hello')","value":{"stringValue":"hello"}},"ast":"string(\n \"hello\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n \"hello\"~string\n)~string^string_to_string","type":"string"},{"original":{"name":"bytes","expr":"bytes(b'abc')","value":{"bytesValue":"YWJj"}},"ast":"bytes(\n b\"abc\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bytes(\n b\"abc\"~bytes\n)~bytes^bytes_to_bytes","type":"bytes"},{"original":{"name":"duration","expr":"duration(duration('100s')) == duration('100s')","value":{"boolValue":true}},"ast":"_==_(\n duration(\n duration(\n \"100s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"100s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n duration(\n duration(\n \"100s\"~string\n )~duration^string_to_duration\n )~duration^duration_to_duration,\n duration(\n \"100s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"timestamp","expr":"timestamp(timestamp(1000000000)) == timestamp(1000000000)","value":{"boolValue":true}},"ast":"_==_(\n timestamp(\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n timestamp(\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp\n )~timestamp^timestamp_to_timestamp,\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp\n)~bool^equals","type":"bool"}]}]},{"name":"dynamic","suites":[{"name":"int32","tests":[{"original":{"name":"literal","expr":"google.protobuf.Int32Value{value: -123}","value":{"int64Value":"-123"}},"ast":"google.protobuf.Int32Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Int32Value{\n value:-123~int\n}~wrapper(int)^google.protobuf.Int32Value","type":"wrapper(int)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Int32Value{value: -123}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Int32Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:40: type 'wrapper(int)' does not support field selection\n | google.protobuf.Int32Value{value: -123}.value\n | .......................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.Int32Value{}","value":{"int64Value":"0"}},"ast":"google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value","type":"wrapper(int)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Int32Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Int32Value","value":2000000}}}},"value":{"int64Value":"2000000"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(int)^x","type":"wrapper(int)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_int32_wrapper: 432}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":432}}},"ast":"TestAllTypes{\n single_int32_wrapper:432^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:432~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_int32_wrapper: 0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":0}}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_max","expr":"TestAllTypes{single_int32_wrapper: 2147483647}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":2147483647}}},"ast":"TestAllTypes{\n single_int32_wrapper:2147483647^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:2147483647~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_min","expr":"TestAllTypes{single_int32_wrapper: -2147483648}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":-2147483648}}},"ast":"TestAllTypes{\n single_int32_wrapper:-2147483648^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:-2147483648~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_range","expr":"TestAllTypes{single_int32_wrapper: 12345678900}","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range error"}]}},"ast":"TestAllTypes{\n single_int32_wrapper:12345678900^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:12345678900~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper","container":"cel.expr.conformance.proto2","value":{"int64Value":"642"}},"ast":"TestAllTypes{\n single_int32_wrapper:642^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:642~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_int32_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_int32_wrapper: -975}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":-975}}},"ast":"TestAllTypes{\n single_int32_wrapper:-975^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-975~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_int32_wrapper: 0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":0}}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_max","expr":"TestAllTypes{single_int32_wrapper: 2147483647}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":2147483647}}},"ast":"TestAllTypes{\n single_int32_wrapper:2147483647^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:2147483647~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_min","expr":"TestAllTypes{single_int32_wrapper: -2147483648}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":-2147483648}}},"ast":"TestAllTypes{\n single_int32_wrapper:-2147483648^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-2147483648~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_range","expr":"TestAllTypes{single_int32_wrapper: -998877665544332211}","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range error"}]}},"ast":"TestAllTypes{\n single_int32_wrapper:-998877665544332211^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-998877665544332211~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper","container":"cel.expr.conformance.proto3","value":{"int64Value":"642"}},"ast":"TestAllTypes{\n single_int32_wrapper:642^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:642~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto3_unset","expr":"TestAllTypes{}.single_int32_wrapper","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"}]},{"name":"int64","tests":[{"original":{"name":"literal","expr":"google.protobuf.Int64Value{value: -123}","value":{"int64Value":"-123"}},"ast":"google.protobuf.Int64Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Int64Value{\n value:-123~int\n}~wrapper(int)^google.protobuf.Int64Value","type":"wrapper(int)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Int64Value{value: -123}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Int64Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:40: type 'wrapper(int)' does not support field selection\n | google.protobuf.Int64Value{value: -123}.value\n | .......................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.Int64Value{}","value":{"int64Value":"0"}},"ast":"google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value","type":"wrapper(int)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Int64Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Int64Value","value":"2000000"}}}},"value":{"int64Value":"2000000"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(int)^x","type":"wrapper(int)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_int64_wrapper: 432}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64Wrapper":"432"}}},"ast":"TestAllTypes{\n single_int64_wrapper:432^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:432~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_int64_wrapper: 0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64Wrapper":"0"}}},"ast":"TestAllTypes{\n single_int64_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_int64_wrapper: -975}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64Wrapper":"-975"}}},"ast":"TestAllTypes{\n single_int64_wrapper:-975^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:-975~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_int64_wrapper: 0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64Wrapper":"0"}}},"ast":"TestAllTypes{\n single_int64_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"uint32","tests":[{"original":{"name":"literal","expr":"google.protobuf.UInt32Value{value: 123u}","value":{"uint64Value":"123"}},"ast":"google.protobuf.UInt32Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.UInt32Value{\n value:123u~uint\n}~wrapper(uint)^google.protobuf.UInt32Value","type":"wrapper(uint)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.UInt32Value{value: 123u}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.UInt32Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:41: type 'wrapper(uint)' does not support field selection\n | google.protobuf.UInt32Value{value: 123u}.value\n | ........................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.UInt32Value{}","value":{"uint64Value":"0"}},"ast":"google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value","type":"wrapper(uint)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.UInt32Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.UInt32Value","value":2000000}}}},"value":{"uint64Value":"2000000"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(uint)^x","type":"wrapper(uint)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_uint32_wrapper: 432u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32Wrapper":432}}},"ast":"TestAllTypes{\n single_uint32_wrapper:432u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:432u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_uint32_wrapper: 0u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32Wrapper":0}}},"ast":"TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_max","expr":"TestAllTypes{single_uint32_wrapper: 4294967295u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32Wrapper":4294967295}}},"ast":"TestAllTypes{\n single_uint32_wrapper:4294967295u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:4294967295u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_range","expr":"TestAllTypes{single_uint32_wrapper: 6111222333u}","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range error"}]}},"ast":"TestAllTypes{\n single_uint32_wrapper:6111222333u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:6111222333u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_uint32_wrapper: 975u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32Wrapper":975}}},"ast":"TestAllTypes{\n single_uint32_wrapper:975u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:975u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_uint32_wrapper: 0u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32Wrapper":0}}},"ast":"TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_max","expr":"TestAllTypes{single_uint32_wrapper: 4294967295u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32Wrapper":4294967295}}},"ast":"TestAllTypes{\n single_uint32_wrapper:4294967295u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:4294967295u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_range","expr":"TestAllTypes{single_uint32_wrapper: 6111222333u}","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range error"}]}},"ast":"TestAllTypes{\n single_uint32_wrapper:6111222333u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:6111222333u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_uint32_wrapper: 258u}.single_uint32_wrapper","container":"cel.expr.conformance.proto2","value":{"uint64Value":"258"}},"ast":"TestAllTypes{\n single_uint32_wrapper:258u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:258u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)","type":"wrapper(uint)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_uint32_wrapper: 0u}.single_uint32_wrapper","container":"cel.expr.conformance.proto2","value":{"uint64Value":"0"}},"ast":"TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)","type":"wrapper(uint)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_uint32_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)","type":"wrapper(uint)"}]},{"name":"uint64","tests":[{"original":{"name":"literal","expr":"google.protobuf.UInt64Value{value: 123u}","value":{"uint64Value":"123"}},"ast":"google.protobuf.UInt64Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.UInt64Value{\n value:123u~uint\n}~wrapper(uint)^google.protobuf.UInt64Value","type":"wrapper(uint)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.UInt64Value{value: 123u}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.UInt64Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:41: type 'wrapper(uint)' does not support field selection\n | google.protobuf.UInt64Value{value: 123u}.value\n | ........................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.UInt64Value{}","value":{"uint64Value":"0"}},"ast":"google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value","type":"wrapper(uint)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.UInt64Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.UInt64Value","value":"2000000"}}}},"value":{"uint64Value":"2000000"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(uint)^x","type":"wrapper(uint)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_uint64_wrapper: 432u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint64Wrapper":"432"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:432u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:432u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_uint64_wrapper: 0u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint64Wrapper":"0"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_uint64_wrapper: 975u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint64Wrapper":"975"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:975u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:975u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_uint64_wrapper: 0u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint64Wrapper":"0"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_uint64_wrapper: 5123123123u}.single_uint64_wrapper","container":"cel.expr.conformance.proto2","value":{"uint64Value":"5123123123"}},"ast":"TestAllTypes{\n single_uint64_wrapper:5123123123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:5123123123u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)","type":"wrapper(uint)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_uint64_wrapper: 0u}.single_uint64_wrapper","container":"cel.expr.conformance.proto2","value":{"uint64Value":"0"}},"ast":"TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)","type":"wrapper(uint)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_uint64_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)","type":"wrapper(uint)"}]},{"name":"float","tests":[{"original":{"name":"literal","expr":"google.protobuf.FloatValue{value: -1.5e3}","value":{"doubleValue":-1500}},"ast":"google.protobuf.FloatValue{\n value:-1500^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.FloatValue{\n value:-1500~double\n}~wrapper(double)^google.protobuf.FloatValue","type":"wrapper(double)"},{"original":{"name":"literal_not_double","description":"Use a number with no exact representation to make sure we actually narrow to a float.","expr":"google.protobuf.FloatValue{value: 1.333} == 1.333","value":{"boolValue":false}},"ast":"_==_(\n google.protobuf.FloatValue{\n value:1.333^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1.333^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:1.333~double\n }~wrapper(double)^google.protobuf.FloatValue,\n 1.333~double\n)~bool^equals","type":"bool"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.FloatValue{value: 3.1416}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.FloatValue{\n value:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:42: type 'wrapper(double)' does not support field selection\n | google.protobuf.FloatValue{value: 3.1416}.value\n | .........................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.FloatValue{}","value":{"doubleValue":0}},"ast":"google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue","type":"wrapper(double)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.FloatValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.FloatValue","value":-1250000}}}},"value":{"doubleValue":-1250000}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(double)^x","type":"wrapper(double)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_float_wrapper: 86.75}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":86.75}}},"ast":"TestAllTypes{\n single_float_wrapper:86.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:86.75~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_float_wrapper: 0.0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":0}}},"ast":"TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_subnorm","description":"Subnormal single floats range from ~1e-38 to ~1e-45.","expr":"TestAllTypes{single_float_wrapper: 1e-40}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":1e-40}}},"ast":"TestAllTypes{\n single_float_wrapper:1e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-40~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_round_to_zero","description":"Subnormal single floats range from ~1e-38 to ~1e-45.","expr":"TestAllTypes{single_float_wrapper: 1e-50}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":0}}},"ast":"TestAllTypes{\n single_float_wrapper:1e-50^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-50~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_range","description":"Single float max is about 3.4e38","expr":"TestAllTypes{single_float_wrapper: 1.4e55}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":"Infinity"}}},"ast":"TestAllTypes{\n single_float_wrapper:1.4e+55^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1.4e+55~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_float_wrapper: -12.375}.single_float_wrapper","container":"cel.expr.conformance.proto2","value":{"doubleValue":-12.375}},"ast":"TestAllTypes{\n single_float_wrapper:-12.375^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:-12.375~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper","container":"cel.expr.conformance.proto2","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_float_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_float_wrapper: -9.75}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":-9.75}}},"ast":"TestAllTypes{\n single_float_wrapper:-9.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.75~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_float_wrapper: 0.0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":0}}},"ast":"TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto2_subnorm","description":"Subnormal single floats range from ~1e-38 to ~1e-45.","expr":"TestAllTypes{single_float_wrapper: 1e-40}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":1e-40}}},"ast":"TestAllTypes{\n single_float_wrapper:1e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-40~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3_round_to_zero","expr":"TestAllTypes{single_float_wrapper: -9.9e-100}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":0}}},"ast":"TestAllTypes{\n single_float_wrapper:-9.9e-100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.9e-100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_range","description":"Single float min is about -3.4e38","expr":"TestAllTypes{single_float_wrapper: -9.9e100}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":"-Infinity"}}},"ast":"TestAllTypes{\n single_float_wrapper:-9.9e+100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.9e+100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_float_wrapper: 64.25}.single_float_wrapper","container":"cel.expr.conformance.proto3","value":{"doubleValue":64.25}},"ast":"TestAllTypes{\n single_float_wrapper:64.25^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:64.25~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper","container":"cel.expr.conformance.proto3","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto3_unset","expr":"TestAllTypes{}.single_float_wrapper","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"}]},{"name":"double","tests":[{"original":{"name":"literal","expr":"google.protobuf.DoubleValue{value: -1.5e3}","value":{"doubleValue":-1500}},"ast":"google.protobuf.DoubleValue{\n value:-1500^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.DoubleValue{\n value:-1500~double\n}~wrapper(double)^google.protobuf.DoubleValue","type":"wrapper(double)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.DoubleValue{value: 3.1416}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.DoubleValue{\n value:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:43: type 'wrapper(double)' does not support field selection\n | google.protobuf.DoubleValue{value: 3.1416}.value\n | ..........................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.DoubleValue{}","value":{"doubleValue":0}},"ast":"google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue","type":"wrapper(double)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.DoubleValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.DoubleValue","value":-1250000}}}},"value":{"doubleValue":-1250000}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(double)^x","type":"wrapper(double)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_double_wrapper: 86.75}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDoubleWrapper":86.75}}},"ast":"TestAllTypes{\n single_double_wrapper:86.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:86.75~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_double_wrapper: 0.0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDoubleWrapper":0}}},"ast":"TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_range","expr":"TestAllTypes{single_double_wrapper: 1.4e55}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDoubleWrapper":1.4e+55}}},"ast":"TestAllTypes{\n single_double_wrapper:1.4e+55^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:1.4e+55~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_double_wrapper: -12.375}.single_double_wrapper","container":"cel.expr.conformance.proto2","value":{"doubleValue":-12.375}},"ast":"TestAllTypes{\n single_double_wrapper:-12.375^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:-12.375~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_double_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_double_wrapper: -9.75}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDoubleWrapper":-9.75}}},"ast":"TestAllTypes{\n single_double_wrapper:-9.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:-9.75~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_double_wrapper: 0.0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDoubleWrapper":0}}},"ast":"TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_range","expr":"TestAllTypes{single_double_wrapper: -9.9e100}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDoubleWrapper":-9.9e+100}}},"ast":"TestAllTypes{\n single_double_wrapper:-9.9e+100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:-9.9e+100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_double_wrapper: 64.25}.single_double_wrapper","container":"cel.expr.conformance.proto3","value":{"doubleValue":64.25}},"ast":"TestAllTypes{\n single_double_wrapper:64.25^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:64.25~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_double_wrapper: 0.0}.single_double_wrapper","container":"cel.expr.conformance.proto3","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto3_unset","expr":"TestAllTypes{}.single_double_wrapper","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"}]},{"name":"bool","tests":[{"original":{"name":"literal","expr":"google.protobuf.BoolValue{value: true}","value":{"boolValue":true}},"ast":"google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BoolValue{\n value:true~bool\n}~wrapper(bool)^google.protobuf.BoolValue","type":"wrapper(bool)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.BoolValue{value: true}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:39: type 'wrapper(bool)' does not support field selection\n | google.protobuf.BoolValue{value: true}.value\n | ......................................^"},{"original":{"name":"literal_empty","expr":"google.protobuf.BoolValue{}","value":{"boolValue":false}},"ast":"google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue","type":"wrapper(bool)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.BoolValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.BoolValue","value":true}}}},"value":{"boolValue":true}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(bool)^x","type":"wrapper(bool)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_bool_wrapper: true}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBoolWrapper":true}}},"ast":"TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_false","expr":"TestAllTypes{single_bool_wrapper: false}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBoolWrapper":false}}},"ast":"TestAllTypes{\n single_bool_wrapper:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_bool_wrapper: true}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBoolWrapper":true}}},"ast":"TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_false","expr":"TestAllTypes{single_bool_wrapper: false}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBoolWrapper":false}}},"ast":"TestAllTypes{\n single_bool_wrapper:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"string","tests":[{"original":{"name":"literal","expr":"google.protobuf.StringValue{value: 'foo'}","value":{"stringValue":"foo"}},"ast":"google.protobuf.StringValue{\n value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.StringValue{\n value:\"foo\"~string\n}~wrapper(string)^google.protobuf.StringValue","type":"wrapper(string)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.StringValue{value: 'foo'}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.StringValue{\n value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:42: type 'wrapper(string)' does not support field selection\n | google.protobuf.StringValue{value: 'foo'}.value\n | .........................................^"},{"original":{"name":"literal_empty","expr":"google.protobuf.StringValue{}","value":{"stringValue":""}},"ast":"google.protobuf.StringValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue","type":"wrapper(string)"},{"original":{"name":"literal_unicode","expr":"google.protobuf.StringValue{value: 'flambé'}","value":{"stringValue":"flambé"}},"ast":"google.protobuf.StringValue{\n value:\"flambé\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.StringValue{\n value:\"flambé\"~string\n}~wrapper(string)^google.protobuf.StringValue","type":"wrapper(string)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.StringValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.StringValue","value":"bar"}}}},"value":{"stringValue":"bar"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(string)^x","type":"wrapper(string)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_string_wrapper: 'baz'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStringWrapper":"baz"}}},"ast":"TestAllTypes{\n single_string_wrapper:\"baz\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:\"baz\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_string_wrapper: ''}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStringWrapper":""}}},"ast":"TestAllTypes{\n single_string_wrapper:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:\"\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_string_wrapper: 'bletch'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStringWrapper":"bletch"}}},"ast":"TestAllTypes{\n single_string_wrapper:\"bletch\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:\"bletch\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_string_wrapper: ''}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStringWrapper":""}}},"ast":"TestAllTypes{\n single_string_wrapper:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:\"\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"bytes","tests":[{"original":{"name":"literal","expr":"google.protobuf.BytesValue{value: b'foo\\123'}","value":{"bytesValue":"Zm9vUw=="}},"ast":"google.protobuf.BytesValue{\n value:b\"fooS\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BytesValue{\n value:b\"fooS\"~bytes\n}~wrapper(bytes)^google.protobuf.BytesValue","type":"wrapper(bytes)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.BytesValue{value: b'foo'}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.BytesValue{\n value:b\"foo\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:42: type 'wrapper(bytes)' does not support field selection\n | google.protobuf.BytesValue{value: b'foo'}.value\n | .........................................^"},{"original":{"name":"literal_empty","expr":"google.protobuf.BytesValue{}","value":{"bytesValue":""}},"ast":"google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue","type":"wrapper(bytes)"},{"original":{"name":"literal_unicode","expr":"google.protobuf.BytesValue{value: b'flambé'}","value":{"bytesValue":"ZmxhbWLDqQ=="}},"ast":"google.protobuf.BytesValue{\n value:b\"flambé\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BytesValue{\n value:b\"flambé\"~bytes\n}~wrapper(bytes)^google.protobuf.BytesValue","type":"wrapper(bytes)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.BytesValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.BytesValue","value":"YmFy"}}}},"value":{"bytesValue":"YmFy"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(bytes)^x","type":"wrapper(bytes)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_bytes_wrapper: b'baz'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBytesWrapper":"YmF6"}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"baz\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b\"baz\"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_bytes_wrapper: b''}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBytesWrapper":""}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b\"\"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_bytes_wrapper: b'bletch'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBytesWrapper":"YmxldGNo"}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"bletch\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b\"bletch\"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_bytes_wrapper: b''}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBytesWrapper":""}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b\"\"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"list","tests":[{"original":{"name":"literal","expr":"google.protobuf.ListValue{values: [3.0, 'foo', null]}","value":{"listValue":{"values":[{"doubleValue":3},{"stringValue":"foo"},{"nullValue":null}]}}},"ast":"google.protobuf.ListValue{\n values:[\n 3^#*expr.Constant_DoubleValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.ListValue{\n values:[\n 3~double,\n \"foo\"~string,\n null~null\n ]~list(dyn)\n}~list(dyn)^google.protobuf.ListValue","type":"list(dyn)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.ListValue{values: [3.0, 'foo', null]}.values","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.ListValue{\n values:[\n 3^#*expr.Constant_DoubleValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.values^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:54: type 'list(dyn)' does not support field selection\n | google.protobuf.ListValue{values: [3.0, 'foo', null]}.values\n | .....................................................^"},{"original":{"name":"literal_empty","expr":"google.protobuf.ListValue{values: []}","value":{"listValue":{}}},"ast":"google.protobuf.ListValue{\n values:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.ListValue{\n values:[]~list(dyn)\n}~list(dyn)^google.protobuf.ListValue","type":"list(dyn)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.ListValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.ListValue","value":["bar",["a","b"]]}}}},"value":{"listValue":{"values":[{"stringValue":"bar"},{"listValue":{"values":[{"stringValue":"a"},{"stringValue":"b"}]}}]}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~list(dyn)^x","type":"list(dyn)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{list_value: [1.0, 'one']}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","listValue":[1,"one"]}}},"ast":"TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n list_value:[\n 1~double,\n \"one\"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{list_value: []}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","listValue":[]}}},"ast":"TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{list_value: [1.0, 'one']}.list_value","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"doubleValue":1},{"stringValue":"one"}]}}},"ast":"TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n list_value:[\n 1~double,\n \"one\"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_read_proto2_empty","expr":"TestAllTypes{list_value: []}.list_value","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_read_proto2_unset","description":"Not a wrapper type, so doesn't convert to null.","expr":"TestAllTypes{}.list_value","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{list_value: [1.0, 'one']}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","listValue":[1,"one"]}}},"ast":"TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n list_value:[\n 1~double,\n \"one\"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{list_value: []}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","listValue":[]}}},"ast":"TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{list_value: [1.0, 'one']}.list_value","container":"cel.expr.conformance.proto3","value":{"listValue":{"values":[{"doubleValue":1},{"stringValue":"one"}]}}},"ast":"TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n list_value:[\n 1~double,\n \"one\"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_read_proto3_empty","expr":"TestAllTypes{list_value: []}.list_value","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_read_proto3_unset","description":"Not a wrapper type, so doesn't convert to null.","expr":"TestAllTypes{}.list_value","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"}]},{"name":"struct","tests":[{"original":{"name":"literal","expr":"google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}","value":{"mapValue":{"entries":[{"key":{"stringValue":"uno"},"value":{"doubleValue":1}},{"key":{"stringValue":"dos"},"value":{"doubleValue":2}}]}}},"ast":"google.protobuf.Struct{\n fields:{\n \"uno\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"dos\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Struct{\n fields:{\n \"uno\"~string:1~double,\n \"dos\"~string:2~double\n }~map(string, double)\n}~map(string, dyn)^google.protobuf.Struct","type":"map(string, dyn)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}.fields","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Struct{\n fields:{\n \"uno\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"dos\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.fields^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Struct{\n fields:{\n \"uno\"~string:1~double,\n \"dos\"~string:2~double\n }~map(string, double)\n}~map(string, dyn)^google.protobuf.Struct.fields~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Struct{fields: {}}","value":{"mapValue":{}}},"ast":"google.protobuf.Struct{\n fields:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Struct{\n fields:{}~map(string, dyn)\n}~map(string, dyn)^google.protobuf.Struct","type":"map(string, dyn)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Struct"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Struct","value":{"first":"Abraham","last":"Lincoln"}}}}},"value":{"mapValue":{"entries":[{"key":{"stringValue":"first"},"value":{"stringValue":"Abraham"}},{"key":{"stringValue":"last"},"value":{"stringValue":"Lincoln"}}]}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~map(string, dyn)^x","type":"map(string, dyn)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStruct":{"deux":2,"un":1}}}},"ast":"TestAllTypes{\n single_struct:{\n \"un\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"deux\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n \"un\"~string:1~double,\n \"deux\"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_struct: {}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStruct":{}}}},"ast":"TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_bad","expr":"TestAllTypes{single_struct: {1: 'uno'}}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"bad key type"}]}},"ast":"TestAllTypes{\n single_struct:{\n 1^#*expr.Constant_Int64Value#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'map(int, string)'\n | TestAllTypes{single_struct: {1: 'uno'}}\n | ..........................^"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_struct: {'one': 1.0}}.single_struct","container":"cel.expr.conformance.proto2","value":{"mapValue":{"entries":[{"key":{"stringValue":"one"},"value":{"doubleValue":1}}]}}},"ast":"TestAllTypes{\n single_struct:{\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n \"one\"~string:1~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_read_proto2_empty","expr":"TestAllTypes{single_struct: {}}.single_struct","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_read_proto2_unset","description":"Not a wrapper type, so doesn't convert to null.","expr":"TestAllTypes{}.single_struct","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStruct":{"deux":2,"un":1}}}},"ast":"TestAllTypes{\n single_struct:{\n \"un\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"deux\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n \"un\"~string:1~double,\n \"deux\"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_struct: {}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStruct":{}}}},"ast":"TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_bad","expr":"TestAllTypes{single_struct: {1: 'uno'}}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"bad key type"}]}},"ast":"TestAllTypes{\n single_struct:{\n 1^#*expr.Constant_Int64Value#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'map(int, string)'\n | TestAllTypes{single_struct: {1: 'uno'}}\n | ..........................^"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_struct: {'one': 1.0}}.single_struct","container":"cel.expr.conformance.proto3","value":{"mapValue":{"entries":[{"key":{"stringValue":"one"},"value":{"doubleValue":1}}]}}},"ast":"TestAllTypes{\n single_struct:{\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n \"one\"~string:1~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_read_proto3_empty","expr":"TestAllTypes{single_struct: {}}.single_struct","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_read_proto3_unset","description":"Not a wrapper type, so doesn't convert to null.","expr":"TestAllTypes{}.single_struct","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"}]},{"name":"value_null","tests":[{"original":{"name":"literal","expr":"Value{null_value: NullValue.NULL_VALUE}","container":"google.protobuf","value":{"nullValue":null}},"ast":"Value{\n null_value:NullValue^#*expr.Expr_IdentExpr#.NULL_VALUE^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n null_value:google.protobuf.NullValue.NULL_VALUE~int^google.protobuf.NullValue.NULL_VALUE\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"Value{null_value: NullValue.NULL_VALUE}.null_value","disableCheck":true,"container":"google.protobuf","evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"Value{\n null_value:NullValue^#*expr.Expr_IdentExpr#.NULL_VALUE^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.null_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n null_value:google.protobuf.NullValue.NULL_VALUE~int^google.protobuf.NullValue.NULL_VALUE\n}~dyn^google.protobuf.Value.null_value~dyn","type":"dyn"},{"original":{"name":"literal_unset","expr":"google.protobuf.Value{}","value":{"nullValue":null}},"ast":"google.protobuf.Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":null}}}},"value":{"nullValue":null}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: null}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":null}}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: null}.single_value","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_value","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: null}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":null}}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: null}.single_value","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_unset","expr":"TestAllTypes{}.single_value","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_number","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{number_value: 12.5}","value":{"doubleValue":12.5}},"ast":"google.protobuf.Value{\n number_value:12.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n number_value:12.5~double\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{number_value: 12.5}.number_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n number_value:12.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.number_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n number_value:12.5~double\n}~dyn^google.protobuf.Value.number_value~dyn","type":"dyn"},{"original":{"name":"literal_zero","expr":"google.protobuf.Value{number_value: 0.0}","value":{"doubleValue":0}},"ast":"google.protobuf.Value{\n number_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n number_value:0~double\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":-26.375}}}},"value":{"doubleValue":-26.375}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: 7e23}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":7e+23}}},"ast":"TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_value: 0.0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":0}}},"ast":"TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: 7e23}.single_value","container":"cel.expr.conformance.proto2","value":{"doubleValue":7e+23}},"ast":"TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_value: 0.0}.single_value","container":"cel.expr.conformance.proto2","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: 7e23}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":7e+23}}},"ast":"TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_value: 0.0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":0}}},"ast":"TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: 7e23}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":7e+23}},"ast":"TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_value: 0.0}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_string","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{string_value: 'foo'}","value":{"stringValue":"foo"}},"ast":"google.protobuf.Value{\n string_value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n string_value:\"foo\"~string\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{string_value: 'foo'}.string_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n string_value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.string_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n string_value:\"foo\"~string\n}~dyn^google.protobuf.Value.string_value~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Value{string_value: ''}","value":{"stringValue":""}},"ast":"google.protobuf.Value{\n string_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n string_value:\"\"~string\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":"bar"}}}},"value":{"stringValue":"bar"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: 'baz'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":"baz"}}},"ast":"TestAllTypes{\n single_value:\"baz\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"baz\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_value: ''}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":""}}},"ast":"TestAllTypes{\n single_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: 'bletch'}.single_value","container":"cel.expr.conformance.proto2","value":{"stringValue":"bletch"}},"ast":"TestAllTypes{\n single_value:\"bletch\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"bletch\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_value: ''}.single_value","container":"cel.expr.conformance.proto2","value":{"stringValue":""}},"ast":"TestAllTypes{\n single_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: 'baz'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":"baz"}}},"ast":"TestAllTypes{\n single_value:\"baz\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"baz\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_value: ''}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":""}}},"ast":"TestAllTypes{\n single_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: 'bletch'}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"bletch"}},"ast":"TestAllTypes{\n single_value:\"bletch\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"bletch\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_value: ''}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":""}},"ast":"TestAllTypes{\n single_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_bool","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{bool_value: true}","value":{"boolValue":true}},"ast":"google.protobuf.Value{\n bool_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n bool_value:true~bool\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{bool_value: true}.bool_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n bool_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.bool_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n bool_value:true~bool\n}~dyn^google.protobuf.Value.bool_value~dyn","type":"dyn"},{"original":{"name":"literal_false","expr":"google.protobuf.Value{bool_value: false}","value":{"boolValue":false}},"ast":"google.protobuf.Value{\n bool_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n bool_value:false~bool\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":true}}}},"value":{"boolValue":true}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: true}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":true}}},"ast":"TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_false","expr":"TestAllTypes{single_value: false}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":false}}},"ast":"TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: true}.single_value","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_false","expr":"TestAllTypes{single_value: false}.single_value","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: true}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":true}}},"ast":"TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_false","expr":"TestAllTypes{single_value: false}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":false}}},"ast":"TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: true}.single_value","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_false","expr":"TestAllTypes{single_value: false}.single_value","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_struct","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}","value":{"mapValue":{"entries":[{"key":{"stringValue":"a"},"value":{"doubleValue":1}},{"key":{"stringValue":"b"},"value":{"stringValue":"two"}}]}}},"ast":"google.protobuf.Value{\n struct_value:{\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"b\"^#*expr.Constant_StringValue#:\"two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n struct_value:{\n \"a\"~string:1~double,\n \"b\"~string:\"two\"~string\n }~map(string, dyn)\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}.struct_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n struct_value:{\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"b\"^#*expr.Constant_StringValue#:\"two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.struct_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n struct_value:{\n \"a\"~string:1~double,\n \"b\"~string:\"two\"~string\n }~map(string, dyn)\n}~dyn^google.protobuf.Value.struct_value~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Value{struct_value: {}}","value":{"mapValue":{}}},"ast":"google.protobuf.Value{\n struct_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n struct_value:{}~map(string, dyn)\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":{"x":null,"y":false}}}}},"value":{"mapValue":{"entries":[{"key":{"stringValue":"x"},"value":{"nullValue":null}},{"key":{"stringValue":"y"},"value":{"boolValue":false}}]}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":{"deux":2,"un":1}}}},"ast":"TestAllTypes{\n single_value:{\n \"un\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"deux\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:{\n \"un\"~string:1~double,\n \"deux\"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_value: {}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":{}}}},"ast":"TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: {'i': true}}.single_value","container":"cel.expr.conformance.proto2","value":{"mapValue":{"entries":[{"key":{"stringValue":"i"},"value":{"boolValue":true}}]}}},"ast":"TestAllTypes{\n single_value:{\n \"i\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:{\n \"i\"~string:true~bool\n }~map(string, bool)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_empty","expr":"TestAllTypes{single_value: {}}.single_value","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":{"deux":2,"un":1}}}},"ast":"TestAllTypes{\n single_value:{\n \"un\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"deux\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:{\n \"un\"~string:1~double,\n \"deux\"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_value: {}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":{}}}},"ast":"TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: {'i': true}}.single_value","container":"cel.expr.conformance.proto3","value":{"mapValue":{"entries":[{"key":{"stringValue":"i"},"value":{"boolValue":true}}]}}},"ast":"TestAllTypes{\n single_value:{\n \"i\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:{\n \"i\"~string:true~bool\n }~map(string, bool)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_empty","expr":"TestAllTypes{single_value: {}}.single_value","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_list","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{list_value: ['a', 3.0]}","value":{"listValue":{"values":[{"stringValue":"a"},{"doubleValue":3}]}}},"ast":"google.protobuf.Value{\n list_value:[\n \"a\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n list_value:[\n \"a\"~string,\n 3~double\n ]~list(dyn)\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{list_value: []}.list_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n list_value:[]~list(dyn)\n}~dyn^google.protobuf.Value.list_value~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Value{list_value: []}","value":{"listValue":{}}},"ast":"google.protobuf.Value{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n list_value:[]~list(dyn)\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":[1,true,"hi"]}}}},"value":{"listValue":{"values":[{"doubleValue":1},{"boolValue":true},{"stringValue":"hi"}]}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: ['un', 1.0]}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":["un",1]}}},"ast":"TestAllTypes{\n single_value:[\n \"un\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:[\n \"un\"~string,\n 1~double\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_value: []}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":[]}}},"ast":"TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: ['i', true]}.single_value","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"stringValue":"i"},{"boolValue":true}]}}},"ast":"TestAllTypes{\n single_value:[\n \"i\"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:[\n \"i\"~string,\n true~bool\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_empty","expr":"TestAllTypes{single_value: []}.single_value","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: ['un', 1.0]}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":["un",1]}}},"ast":"TestAllTypes{\n single_value:[\n \"un\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:[\n \"un\"~string,\n 1~double\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_value: []}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":[]}}},"ast":"TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: ['i', true]}.single_value","container":"cel.expr.conformance.proto3","value":{"listValue":{"values":[{"stringValue":"i"},{"boolValue":true}]}}},"ast":"TestAllTypes{\n single_value:[\n \"i\"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:[\n \"i\"~string,\n true~bool\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_empty","expr":"TestAllTypes{single_value: []}.single_value","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"any","tests":[{"original":{"name":"literal","expr":"google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}},"ast":"google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\b\\x96\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\b\\x96\\x01\"~bytes\n}~any^google.protobuf.Any","type":"any"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}.type_url","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\b\\x96\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.type_url^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\b\\x96\\x01\"~bytes\n}~any^google.protobuf.Any.type_url~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Any{}","evalError":{"errors":[{"message":"conversion"}]}},"ast":"google.protobuf.Any{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Any{}~any^google.protobuf.Any","type":"any"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Any"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Any","value":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}}}},"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~any^x","type":"any"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 150}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleAny":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 150}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleAny":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":150}}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":150}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]},{"name":"complex","tests":[{"original":{"name":"any_list_map","expr":"TestAllTypes{single_any: [{'almost': 'done'}]}.single_any","container":"cel.expr.conformance.proto3","value":{"listValue":{"values":[{"mapValue":{"entries":[{"key":{"stringValue":"almost"},"value":{"stringValue":"done"}}]}}]}}},"ast":"TestAllTypes{\n single_any:[\n {\n \"almost\"^#*expr.Constant_StringValue#:\"done\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:[\n {\n \"almost\"~string:\"done\"~string\n }~map(string, string)\n ]~list(map(string, string))\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]}]},{"name":"encoders_ext","suites":[{"name":"encode","tests":[{"original":{"name":"hello","expr":"base64.encode(b'hello')","value":{"stringValue":"aGVsbG8="}},"ast":"base64^#*expr.Expr_IdentExpr#.encode(\n b\"hello\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"base64.encode(\n b\"hello\"~bytes\n)~string^base64_encode_bytes","type":"string"}]},{"name":"decode","tests":[{"original":{"name":"hello","expr":"base64.decode('aGVsbG8=')","value":{"bytesValue":"aGVsbG8="}},"ast":"base64^#*expr.Expr_IdentExpr#.decode(\n \"aGVsbG8=\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"base64.decode(\n \"aGVsbG8=\"~string\n)~bytes^base64_decode_string","type":"bytes"},{"original":{"name":"hello_without_padding","expr":"base64.decode('aGVsbG8')","value":{"bytesValue":"aGVsbG8="}},"ast":"base64^#*expr.Expr_IdentExpr#.decode(\n \"aGVsbG8\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"base64.decode(\n \"aGVsbG8\"~string\n)~bytes^base64_decode_string","type":"bytes"}]},{"name":"round_trip","tests":[{"original":{"name":"hello","expr":"base64.decode(base64.encode(b'Hello World!'))","value":{"bytesValue":"SGVsbG8gV29ybGQh"}},"ast":"base64^#*expr.Expr_IdentExpr#.decode(\n base64^#*expr.Expr_IdentExpr#.encode(\n b\"Hello World!\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"base64.decode(\n base64.encode(\n b\"Hello World!\"~bytes\n )~string^base64_encode_bytes\n)~bytes^base64_decode_string","type":"bytes"}]}]},{"name":"enums","suites":[{"name":"legacy_proto2","tests":[{"original":{"name":"literal_global","expr":"GlobalEnum.GAZ","container":"cel.expr.conformance.proto2","value":{"int64Value":"2"}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ","type":"int"},{"original":{"name":"literal_nested","expr":"TestAllTypes.NestedEnum.BAR","container":"cel.expr.conformance.proto2","value":{"int64Value":"1"}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","type":"int"},{"original":{"name":"literal_zero","expr":"GlobalEnum.GOO","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO","type":"int"},{"original":{"name":"comparison","expr":"GlobalEnum.GAR == 1","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"arithmetic","expr":"TestAllTypes.NestedEnum.BAR + 3","container":"cel.expr.conformance.proto2","value":{"int64Value":"4"}},"ast":"_+_(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR,\n 3~int\n)~int^add_int64","type":"int"},{"original":{"name":"type_global","expr":"type(GlobalEnum.GOO)","container":"cel.expr.conformance.proto2","value":{"typeValue":"int"}},"ast":"type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO\n)~type(int)^type","type":"type(int)"},{"original":{"name":"type_nested","expr":"type(TestAllTypes.NestedEnum.BAZ)","container":"cel.expr.conformance.proto2","value":{"typeValue":"int"}},"ast":"type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type","type":"type(int)"},{"original":{"name":"select_default","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"field_type","expr":"type(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"typeValue":"int"}},"ast":"type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"assign_standalone_name","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","standaloneEnum":"BAZ"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"assign_standalone_int","expr":"TestAllTypes{standalone_enum: 1}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","standaloneEnum":"BAR"}}},"ast":"TestAllTypes{\n standalone_enum:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:1~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"assign_standalone_int_too_big","expr":"TestAllTypes{standalone_enum: 5000000000}","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes{\n standalone_enum:5000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:5000000000~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"assign_standalone_int_too_neg","expr":"TestAllTypes{standalone_enum: -7000000000}","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes{\n standalone_enum:-7000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:-7000000000~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"access_repeated_enum","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"assign_repeated_enum","expr":"TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","repeatedNestedEnum":["FOO","BAR"]}}},"ast":"TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"list_enum_as_list_int","expr":"0 in TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}.repeated_nested_enum","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"@in(\n 0^#*expr.Constant_Int64Value#,\n TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 0~int,\n cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"enum_as_int","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"@in(\n TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int,\n [\n 0~int\n ]~list(int)\n)~bool^in_list","type":"bool"}]},{"name":"legacy_proto3","tests":[{"original":{"name":"literal_global","expr":"GlobalEnum.GAZ","container":"cel.expr.conformance.proto3","value":{"int64Value":"2"}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ","type":"int"},{"original":{"name":"literal_nested","expr":"TestAllTypes.NestedEnum.BAR","container":"cel.expr.conformance.proto3","value":{"int64Value":"1"}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR","type":"int"},{"original":{"name":"literal_zero","expr":"GlobalEnum.GOO","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO","type":"int"},{"original":{"name":"comparison","expr":"GlobalEnum.GAR == 1","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"arithmetic","expr":"TestAllTypes.NestedEnum.BAR + 3","container":"cel.expr.conformance.proto3","value":{"int64Value":"4"}},"ast":"_+_(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR,\n 3~int\n)~int^add_int64","type":"int"},{"original":{"name":"type_global","expr":"type(GlobalEnum.GOO)","container":"cel.expr.conformance.proto3","value":{"typeValue":"int"}},"ast":"type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO\n)~type(int)^type","type":"type(int)"},{"original":{"name":"type_nested","expr":"type(TestAllTypes.NestedEnum.BAZ)","container":"cel.expr.conformance.proto3","value":{"typeValue":"int"}},"ast":"type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type","type":"type(int)"},{"original":{"name":"select_default","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"select","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAZ"}}}},"value":{"int64Value":"2"}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"select_big","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":108}}}},"value":{"int64Value":"108"}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"select_neg","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-3}}}},"value":{"int64Value":"-3"}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"field_type","expr":"type(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"typeValue":"int"}},"ast":"type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"assign_standalone_name","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAZ"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int","expr":"TestAllTypes{standalone_enum: 1}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAR"}}},"ast":"TestAllTypes{\n standalone_enum:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int_big","expr":"TestAllTypes{standalone_enum: 99}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":99}}},"ast":"TestAllTypes{\n standalone_enum:99^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:99~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int_neg","expr":"TestAllTypes{standalone_enum: -1}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-1}}},"ast":"TestAllTypes{\n standalone_enum:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:-1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int_too_big","expr":"TestAllTypes{standalone_enum: 5000000000}","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes{\n standalone_enum:5000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:5000000000~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int_too_neg","expr":"TestAllTypes{standalone_enum: -7000000000}","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes{\n standalone_enum:-7000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:-7000000000~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"access_repeated_enum","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"assign_repeated_enum","expr":"TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","repeatedNestedEnum":["FOO","BAR"]}}},"ast":"TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"list_enum_as_list_int","expr":"0 in TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}.repeated_nested_enum","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"@in(\n 0^#*expr.Constant_Int64Value#,\n TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 0~int,\n cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"enum_as_int","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"@in(\n TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int,\n [\n 0~int\n ]~list(int)\n)~bool^in_list","type":"bool"}]},{"name":"strong_proto2","tests":[{"original":{"name":"literal_global","expr":"GlobalEnum.GAZ","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.GlobalEnum","value":2}}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ","type":"int"},{"original":{"name":"literal_nested","expr":"TestAllTypes.NestedEnum.BAR","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum","value":1}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","type":"int"},{"original":{"name":"literal_zero","expr":"GlobalEnum.GOO","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.GlobalEnum"}}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO","type":"int"},{"original":{"name":"comparison_true","expr":"GlobalEnum.GAR == GlobalEnum.GAR","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR\n)~bool^equals","type":"bool"},{"original":{"name":"comparison_false","expr":"GlobalEnum.GAR == GlobalEnum.GAZ","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ\n)~bool^equals","type":"bool"},{"original":{"name":"type_global","expr":"type(GlobalEnum.GOO)","container":"cel.expr.conformance.proto2","value":{"typeValue":"cel.expr.conformance.proto2.GlobalEnum"}},"ast":"type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO\n)~type(int)^type","type":"type(int)"},{"original":{"name":"type_nested","expr":"type(TestAllTypes.NestedEnum.BAZ)","container":"cel.expr.conformance.proto2","value":{"typeValue":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum"}},"ast":"type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type","type":"type(int)"},{"original":{"name":"select_default","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"field_type","expr":"type(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"typeValue":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum"}},"ast":"type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"assign_standalone_name","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","standaloneEnum":"BAZ"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"assign_standalone_int","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","standaloneEnum":"BAR"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}\n | .....................................................^"},{"original":{"name":"convert_symbol_to_int","expr":"int(GlobalEnum.GAZ)","container":"cel.expr.conformance.proto2","value":{"int64Value":"2"}},"ast":"int(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ\n)~int^int64_to_int64","type":"int"},{"original":{"name":"convert_unnamed_to_int","description":"Disable check - missing way to declare enums.","expr":"int(x)","disableCheck":true,"bindings":{"x":{"value":{"enumValue":{"type":"cel.expr.conformance.proto2.GlobalEnum","value":444}}}},"value":{"int64Value":"444"}},"ast":"int(\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: undeclared reference to 'x' (in container '')\n | int(x)\n | ....^"},{"original":{"name":"convert_int_inrange","expr":"TestAllTypes.NestedEnum(2)","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum","value":2}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(2)\n | .......................^"},{"original":{"name":"convert_int_big","expr":"TestAllTypes.NestedEnum(20000)","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum","value":20000}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 20000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(20000)\n | .......................^"},{"original":{"name":"convert_int_neg","expr":"GlobalEnum(-33)","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.GlobalEnum","value":-33}}},"ast":"GlobalEnum(\n -33^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: undeclared reference to 'GlobalEnum' (in container 'cel.expr.conformance.proto2')\n | GlobalEnum(-33)\n | ..........^"},{"original":{"name":"convert_int_too_big","expr":"TestAllTypes.NestedEnum(5000000000)","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(5000000000)\n | .......................^"},{"original":{"name":"convert_int_too_neg","expr":"TestAllTypes.NestedEnum(-7000000000)","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -7000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(-7000000000)\n | .......................^"},{"original":{"name":"convert_string","expr":"TestAllTypes.NestedEnum('BAZ')","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum","value":2}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n \"BAZ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum('BAZ')\n | .......................^"},{"original":{"name":"convert_string_bad","expr":"TestAllTypes.NestedEnum('BLETCH')","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"invalid"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n \"BLETCH\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum('BLETCH')\n | .......................^"}]},{"name":"strong_proto3","tests":[{"original":{"name":"literal_global","expr":"GlobalEnum.GAZ","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.GlobalEnum","value":2}}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ","type":"int"},{"original":{"name":"literal_nested","expr":"TestAllTypes.NestedEnum.BAR","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":1}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR","type":"int"},{"original":{"name":"literal_zero","expr":"GlobalEnum.GOO","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.GlobalEnum"}}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO","type":"int"},{"original":{"name":"comparison_true","expr":"GlobalEnum.GAR == GlobalEnum.GAR","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR\n)~bool^equals","type":"bool"},{"original":{"name":"comparison_false","expr":"GlobalEnum.GAR == GlobalEnum.GAZ","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ\n)~bool^equals","type":"bool"},{"original":{"name":"type_global","expr":"type(GlobalEnum.GOO)","container":"cel.expr.conformance.proto3","value":{"typeValue":"cel.expr.conformance.proto3.GlobalEnum"}},"ast":"type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO\n)~type(int)^type","type":"type(int)"},{"original":{"name":"type_nested","expr":"type(TestAllTypes.NestedEnum.BAZ)","container":"cel.expr.conformance.proto3","value":{"typeValue":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum"}},"ast":"type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type","type":"type(int)"},{"original":{"name":"select_default","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"select","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAZ"}}}},"value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":2}}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"select_big","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":108}}}},"value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":108}}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"select_neg","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-3}}}},"value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":-3}}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"field_type","expr":"type(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"typeValue":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum"}},"ast":"type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"assign_standalone_name","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAZ"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAR"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}\n | .....................................................^"},{"original":{"name":"assign_standalone_int_big","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":99}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 99^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}\n | .....................................................^"},{"original":{"name":"assign_standalone_int_neg","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-1}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}\n | .....................................................^"},{"original":{"name":"convert_symbol_to_int","expr":"int(GlobalEnum.GAZ)","container":"cel.expr.conformance.proto3","value":{"int64Value":"2"}},"ast":"int(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ\n)~int^int64_to_int64","type":"int"},{"original":{"name":"convert_unnamed_to_int","description":"Disable check - missing way to declare enums.","expr":"int(x)","disableCheck":true,"bindings":{"x":{"value":{"enumValue":{"type":"cel.expr.conformance.proto3.GlobalEnum","value":444}}}},"value":{"int64Value":"444"}},"ast":"int(\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: undeclared reference to 'x' (in container '')\n | int(x)\n | ....^"},{"original":{"name":"convert_unnamed_to_int_select","expr":"int(x.standalone_enum)","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-987}}}},"value":{"int64Value":"-987"}},"ast":"int(\n x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int\n)~int^int64_to_int64","type":"int"},{"original":{"name":"convert_int_inrange","expr":"TestAllTypes.NestedEnum(2)","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":2}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(2)\n | .......................^"},{"original":{"name":"convert_int_big","expr":"TestAllTypes.NestedEnum(20000)","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":20000}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 20000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(20000)\n | .......................^"},{"original":{"name":"convert_int_neg","expr":"GlobalEnum(-33)","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.GlobalEnum","value":-33}}},"ast":"GlobalEnum(\n -33^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: undeclared reference to 'GlobalEnum' (in container 'cel.expr.conformance.proto3')\n | GlobalEnum(-33)\n | ..........^"},{"original":{"name":"convert_int_too_big","expr":"TestAllTypes.NestedEnum(5000000000)","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(5000000000)\n | .......................^"},{"original":{"name":"convert_int_too_neg","expr":"TestAllTypes.NestedEnum(-7000000000)","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -7000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(-7000000000)\n | .......................^"},{"original":{"name":"convert_string","expr":"TestAllTypes.NestedEnum('BAZ')","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":2}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n \"BAZ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum('BAZ')\n | .......................^"},{"original":{"name":"convert_string_bad","expr":"TestAllTypes.NestedEnum('BLETCH')","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"invalid"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n \"BLETCH\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum('BLETCH')\n | .......................^"}]}]},{"name":"fields","suites":[{"name":"map_fields","tests":[{"original":{"name":"map_key_int64","expr":"{0:1,2:2,5:true}[5]","value":{"boolValue":true}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:true~bool\n }~map(int, dyn),\n 5~int\n)~dyn^index_map","type":"dyn"},{"original":{"name":"map_key_uint64","expr":"{0u:1u,2u:'happy',5u:3u}[2u]","value":{"stringValue":"happy"}},"ast":"_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:\"happy\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0u~uint:1u~uint,\n 2u~uint:\"happy\"~string,\n 5u~uint:3u~uint\n }~map(uint, dyn),\n 2u~uint\n)~dyn^index_map","type":"dyn"},{"original":{"name":"map_key_string","expr":"{'name':100u}['name']","value":{"uint64Value":"100"}},"ast":"_[_](\n {\n \"name\"^#*expr.Constant_StringValue#:100u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"name\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"name\"~string:100u~uint\n }~map(string, uint),\n \"name\"~string\n)~uint^index_map","type":"uint"},{"original":{"name":"map_key_bool","expr":"{true:5}[true]","value":{"int64Value":"5"}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:5~int\n }~map(bool, int),\n true~bool\n)~int^index_map","type":"int"},{"original":{"name":"map_key_mixed_type","expr":"{true:1,2:2,5u:3}[true]","value":{"int64Value":"1"}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:1~int,\n 2~int:2~int,\n 5u~uint:3~int\n }~map(dyn, int),\n true~bool\n)~int^index_map","type":"int"},{"original":{"name":"map_key_mixed_numbers_double_key","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[3.0]","value":{"doubleValue":3}},"ast":"_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 3~double\n)~double^index_map","type":"double"},{"original":{"name":"map_key_mixed_numbers_lossy_double_key","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[3.1]","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3.1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 3.1~double\n)~double^index_map","type":"double"},{"original":{"name":"map_key_mixed_numbers_uint_key","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[2u]","value":{"doubleValue":2}},"ast":"_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 2u~uint\n)~double^index_map","type":"double"},{"original":{"name":"map_key_mixed_numbers_int_key","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[1]","value":{"doubleValue":1}},"ast":"_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 1~int\n)~double^index_map","type":"double"},{"original":{"name":"map_field_access","expr":"x.name","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"INT64"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"name"},"value":{"int64Value":"1024"}}]}}}},"value":{"int64Value":"1024"}},"ast":"x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#","checkedAst":"x~map(string, int)^x.name~int","type":"int"},{"original":{"name":"map_no_such_key","expr":"{0:1,2:2,5:3}[1]","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n)~int^index_map","type":"int"},{"original":{"name":"map_no_such_key_or_false","expr":"dyn({0:1,2:2,5:3}[1]) || false","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_no_such_key_or_true","expr":"dyn({0:1,2:2,5:3}[1]) || true","value":{"boolValue":true}},"ast":"_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_no_such_key_and_false","expr":"dyn({0:1,2:2,5:3}[1]) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_no_such_key_and_true","expr":"dyn({0:1,2:2,5:3}[1]) \u0026\u0026 true","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_bad_key_type","expr":"{0:1,2:2,5:3}[dyn(b'')]","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n)~int^index_map","type":"int"},{"original":{"name":"map_bad_key_type_or_false","expr":"dyn({0:1,2:2,5:3}[dyn(b'')]) || false","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_bad_key_type_or_true","expr":"dyn({0:1,2:2,5:3}[dyn(b'')]) || true","value":{"boolValue":true}},"ast":"_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_bad_key_type_and_false","expr":"dyn({0:1,2:2,5:3}[dyn(b'')]) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_bad_key_type_and_true","expr":"dyn({0:1,2:2,5:3}[dyn(b'')]) \u0026\u0026 true","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_field_select_no_such_key","expr":"x.name","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"evalError":{"errors":[{"message":"no such key: 'name'"}]}},"ast":"x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#","checkedAst":"x~map(string, string)^x.name~string","type":"string"},{"original":{"name":"map_field_select_no_such_key_or_false","expr":"dyn(x.name) || false","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"evalError":{"errors":[{"message":"no such key: 'name'"}]}},"ast":"_||_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_field_select_no_such_key_or_true","expr":"dyn(x.name) || true","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"value":{"boolValue":true}},"ast":"_||_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_field_select_no_such_key_and_false","expr":"dyn(x.name) \u0026\u0026 false","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_field_select_no_such_key_and_true","expr":"dyn(x.name) \u0026\u0026 true","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"evalError":{"errors":[{"message":"no such key: 'name'"}]}},"ast":"_\u0026\u0026_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_value_null","expr":"{true:null}[true]","value":{"nullValue":null}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:null~null\n }~map(bool, null),\n true~bool\n)~null^index_map","type":"null"},{"original":{"name":"map_value_bool","expr":"{27:false}[27]","value":{"boolValue":false}},"ast":"_[_](\n {\n 27^#*expr.Constant_Int64Value#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 27^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 27~int:false~bool\n }~map(int, bool),\n 27~int\n)~bool^index_map","type":"bool"},{"original":{"name":"map_value_string","expr":"{'n':'x'}['n']","value":{"stringValue":"x"}},"ast":"_[_](\n {\n \"n\"^#*expr.Constant_StringValue#:\"x\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"n\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"n\"~string:\"x\"~string\n }~map(string, string),\n \"n\"~string\n)~string^index_map","type":"string"},{"original":{"name":"map_value_float","expr":"{3:15.15}[3]","value":{"doubleValue":15.15}},"ast":"_[_](\n {\n 3^#*expr.Constant_Int64Value#:15.15^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 3~int:15.15~double\n }~map(int, double),\n 3~int\n)~double^index_map","type":"double"},{"original":{"name":"map_value_uint64","expr":"{0u:1u,2u:2u,5u:3u}[0u]","value":{"uint64Value":"1"}},"ast":"_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:2u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0u~uint:1u~uint,\n 2u~uint:2u~uint,\n 5u~uint:3u~uint\n }~map(uint, uint),\n 0u~uint\n)~uint^index_map","type":"uint"},{"original":{"name":"map_value_int64","expr":"{true:1,false:2}[true]","value":{"int64Value":"1"}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n false^#*expr.Constant_BoolValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:1~int,\n false~bool:2~int\n }~map(bool, int),\n true~bool\n)~int^index_map","type":"int"},{"original":{"name":"map_value_bytes","expr":"{0:b''}[0]","value":{"bytesValue":""}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:b\"\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:b\"\"~bytes\n }~map(int, bytes),\n 0~int\n)~bytes^index_map","type":"bytes"},{"original":{"name":"map_value_list","expr":"{0u:[1]}[0u]","value":{"listValue":{"values":[{"int64Value":"1"}]}}},"ast":"_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0u~uint:[\n 1~int\n ]~list(int)\n }~map(uint, list(int)),\n 0u~uint\n)~list(int)^index_map","type":"list(int)"},{"original":{"name":"map_value_map","expr":"{'map': {'k': 'v'}}['map']","value":{"mapValue":{"entries":[{"key":{"stringValue":"k"},"value":{"stringValue":"v"}}]}}},"ast":"_[_](\n {\n \"map\"^#*expr.Constant_StringValue#:{\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"map\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"map\"~string:{\n \"k\"~string:\"v\"~string\n }~map(string, string)\n }~map(string, map(string, string)),\n \"map\"~string\n)~map(string, string)^index_map","type":"map(string, string)"},{"original":{"name":"map_value_mix_type","expr":"{'map': {'k': 'v'}, 'list': [1]}['map']","value":{"mapValue":{"entries":[{"key":{"stringValue":"k"},"value":{"stringValue":"v"}}]}}},"ast":"_[_](\n {\n \"map\"^#*expr.Constant_StringValue#:{\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"list\"^#*expr.Constant_StringValue#:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"map\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"map\"~string:{\n \"k\"~string:\"v\"~string\n }~map(string, string),\n \"list\"~string:[\n 1~int\n ]~list(int)\n }~map(string, dyn),\n \"map\"~string\n)~dyn^index_map","type":"dyn"}]},{"name":"map_has","tests":[{"original":{"name":"has","expr":"has({'a': 1, 'b': 2}.a)","value":{"boolValue":true}},"ast":"{\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"b\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.a~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"a\"~string:1~int,\n \"b\"~string:2~int\n}~map(string, int).a~test-only~~bool","type":"bool"},{"original":{"name":"has_not","expr":"has({'a': 1, 'b': 2}.c)","value":{"boolValue":false}},"ast":"{\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"b\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.c~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"a\"~string:1~int,\n \"b\"~string:2~int\n}~map(string, int).c~test-only~~bool","type":"bool"},{"original":{"name":"has_empty","expr":"has({}.a)","value":{"boolValue":false}},"ast":"{}^#*expr.Expr_StructExpr#.a~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{}~map(dyn, dyn).a~test-only~~bool","type":"bool"}]},{"name":"quoted_map_fields","tests":[{"original":{"name":"field_access_slash","expr":"{'/api/v1': true, '/api/v2': false}.`/api/v1`","value":{"boolValue":true}},"error":"ERROR: field_access_slash:1:37: unsupported syntax: '`'\n | {'/api/v1': true, '/api/v2': false}.`/api/v1`\n | ....................................^"},{"original":{"name":"field_access_dash","expr":"{'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'","value":{"boolValue":true}},"error":"ERROR: field_access_dash:1:61: unsupported syntax: '`'\n | {'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'\n | ............................................................^"},{"original":{"name":"field_access_dot","expr":"{'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`","value":{"int64Value":"32"}},"error":"ERROR: field_access_dot:1:34: unsupported syntax: '`'\n | {'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`\n | .................................^"},{"original":{"name":"has_field_slash","expr":"has({'/api/v1': true, '/api/v2': false}.`/api/v3`)","value":{"boolValue":false}},"error":"ERROR: has_field_slash:1:41: unsupported syntax: '`'\n | has({'/api/v1': true, '/api/v2': false}.`/api/v3`)\n | ........................................^"},{"original":{"name":"has_field_dash","expr":"has({'content-type': 'application/json', 'content-length': 145}.`content-type`)","value":{"boolValue":true}},"error":"ERROR: has_field_dash:1:65: unsupported syntax: '`'\n | has({'content-type': 'application/json', 'content-length': 145}.`content-type`)\n | ................................................................^"},{"original":{"name":"has_field_dot","expr":"has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)","value":{"boolValue":true}},"error":"ERROR: has_field_dot:1:38: unsupported syntax: '`'\n | has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)\n | .....................................^"}]},{"name":"qualified_identifier_resolution","tests":[{"original":{"name":"qualified_ident","expr":"a.b.c","typeEnv":[{"name":"a.b.c","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"a.b.c":{"value":{"stringValue":"yeah"}}},"value":{"stringValue":"yeah"}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#","checkedAst":"a.b.c~string^a.b.c","type":"string"},{"original":{"name":"map_field_select","expr":"a.b.c","typeEnv":[{"name":"a.b","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"a.b":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"c"},"value":{"stringValue":"yeah"}}]}}}},"value":{"stringValue":"yeah"}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#","checkedAst":"a.b~map(string, string)^a.b.c~string","type":"string"},{"original":{"name":"qualified_identifier_resolution_unchecked","description":"namespace resolution should try to find the longest prefix for the evaluator.","expr":"a.b.c","disableCheck":true,"typeEnv":[{"name":"a.b.c","ident":{"type":{"primitive":"STRING"}}},{"name":"a.b","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"a.b":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"c"},"value":{"stringValue":"oops"}}]}}},"a.b.c":{"value":{"stringValue":"yeah"}}},"value":{"stringValue":"yeah"}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#","checkedAst":"a.b.c~string^a.b.c","type":"string"},{"original":{"name":"list_field_select_unsupported","expr":"a.b.pancakes","disableCheck":true,"typeEnv":[{"name":"a.b","ident":{"type":{"listType":{"elemType":{"primitive":"STRING"}}}}}],"bindings":{"a.b":{"value":{"listValue":{"values":[{"stringValue":"pancakes"}]}}}},"evalError":{"errors":[{"message":"type 'list_type:\u003celem_type:\u003cprimitive:STRING \u003e \u003e ' does not support field selection"}]}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.pancakes^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:4: type 'list(string)' does not support field selection\n | a.b.pancakes\n | ...^"},{"original":{"name":"int64_field_select_unsupported","expr":"a.pancakes","disableCheck":true,"typeEnv":[{"name":"a","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"a":{"value":{"int64Value":"15"}}},"evalError":{"errors":[{"message":"type 'int64_type' does not support field selection"}]}},"ast":"a^#*expr.Expr_IdentExpr#.pancakes^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:2: type 'int' does not support field selection\n | a.pancakes\n | .^"},{"original":{"name":"ident_with_longest_prefix_check","description":"namespace resolution should try to find the longest prefix for the checker.","expr":"a.b.c","typeEnv":[{"name":"a.b.c","ident":{"type":{"primitive":"STRING"}}},{"name":"a.b","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"a.b":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"c"},"value":{"stringValue":"oops"}}]}}},"a.b.c":{"value":{"stringValue":"yeah"}}},"value":{"stringValue":"yeah"}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#","checkedAst":"a.b.c~string^a.b.c","type":"string"},{"original":{"name":"map_key_float","description":"map should not support float as the key.","expr":"{3.3:15.15, 1.0: 5}[1.0]","disableCheck":true,"evalError":{"errors":[{"message":"unsupported key type"}]}},"ast":"_[_](\n {\n 3.3^#*expr.Constant_DoubleValue#:15.15^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_DoubleValue#:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 3.3~double:15.15~double,\n 1~double:5~int\n }~map(double, dyn),\n 1~double\n)~dyn^index_map","type":"dyn"},{"original":{"name":"map_key_null","description":"map should not support null as the key.","expr":"{null:false}[null]","disableCheck":true,"evalError":{"errors":[{"message":"unsupported key type"}]}},"ast":"_[_](\n {\n null^#*expr.Constant_NullValue#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n null~null:false~bool\n }~map(null, bool),\n null~null\n)~bool^index_map","type":"bool"},{"original":{"name":"map_value_repeat_key","description":"map should not support repeated key.","expr":"{true:1,false:2,true:3}[true]","evalError":{"errors":[{"message":"Failed with repeated key"}]}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n false^#*expr.Constant_BoolValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:1~int,\n false~bool:2~int,\n true~bool:3~int\n }~map(bool, int),\n true~bool\n)~int^index_map","type":"int"},{"original":{"name":"map_value_repeat_key_heterogeneous","description":"map should not support repeated key.","expr":"{0: 1, 0u: 2}[0.0]","evalError":{"errors":[{"message":"Failed with repeated key"}]}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 0u^#*expr.Constant_Uint64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:1~int,\n 0u~uint:2~int\n }~map(dyn, int),\n 0~double\n)~int^index_map","type":"int"}]},{"name":"in","tests":[{"original":{"name":"empty","expr":"7 in {}","value":{"boolValue":false}},"ast":"@in(\n 7^#*expr.Constant_Int64Value#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 7~int,\n {}~map(int, dyn)\n)~bool^in_map","type":"bool"},{"original":{"name":"singleton","expr":"true in {true: 1}","value":{"boolValue":true}},"ast":"@in(\n true^#*expr.Constant_BoolValue#,\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n true~bool,\n {\n true~bool:1~int\n }~map(bool, int)\n)~bool^in_map","type":"bool"},{"original":{"name":"present","expr":"'George' in {'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}","value":{"boolValue":true}},"ast":"@in(\n \"George\"^#*expr.Constant_StringValue#,\n {\n \"John\"^#*expr.Constant_StringValue#:\"smart\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"Paul\"^#*expr.Constant_StringValue#:\"cute\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"George\"^#*expr.Constant_StringValue#:\"quiet\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"Ringo\"^#*expr.Constant_StringValue#:\"funny\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"George\"~string,\n {\n \"John\"~string:\"smart\"~string,\n \"Paul\"~string:\"cute\"~string,\n \"George\"~string:\"quiet\"~string,\n \"Ringo\"~string:\"funny\"~string\n }~map(string, string)\n)~bool^in_map","type":"bool"},{"original":{"name":"absent","expr":"'spider' in {'ant': 6, 'fly': 6, 'centipede': 100}","value":{"boolValue":false}},"ast":"@in(\n \"spider\"^#*expr.Constant_StringValue#,\n {\n \"ant\"^#*expr.Constant_StringValue#:6^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"fly\"^#*expr.Constant_StringValue#:6^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"centipede\"^#*expr.Constant_StringValue#:100^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"spider\"~string,\n {\n \"ant\"~string:6~int,\n \"fly\"~string:6~int,\n \"centipede\"~string:100~int\n }~map(string, int)\n)~bool^in_map","type":"bool"},{"original":{"name":"mixed_numbers_and_keys_present","expr":"3.0 in {1: 1, 2: 2, 3u: 3} \u0026\u0026 2u in {1u: 1, 2: 2} \u0026\u0026 1 in {1u: 1, 2: 2}","value":{"boolValue":true}},"ast":"_\u0026\u0026_(\n _\u0026\u0026_(\n @in(\n 3^#*expr.Constant_DoubleValue#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 2u^#*expr.Constant_Uint64Value#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 1^#*expr.Constant_Int64Value#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _\u0026\u0026_(\n @in(\n 3~double,\n {\n 1~int:1~int,\n 2~int:2~int,\n 3u~uint:3~int\n }~map(dyn, int)\n )~bool^in_map,\n @in(\n 2u~uint,\n {\n 1u~uint:1~int,\n 2~int:2~int\n }~map(dyn, int)\n )~bool^in_map\n )~bool^logical_and,\n @in(\n 1~int,\n {\n 1u~uint:1~int,\n 2~int:2~int\n }~map(dyn, int)\n )~bool^in_map\n)~bool^logical_and","type":"bool"},{"original":{"name":"mixed_numbers_and_keys_absent","expr":"3.1 in {1: 1, 2: 2, 3u: 3}","value":{"boolValue":false}},"ast":"@in(\n 3.1^#*expr.Constant_DoubleValue#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 3.1~double,\n {\n 1~int:1~int,\n 2~int:2~int,\n 3u~uint:3~int\n }~map(dyn, int)\n)~bool^in_map","type":"bool"}]}]},{"name":"fp_math","suites":[{"name":"fp_math","tests":[{"original":{"name":"add_positive_positive","expr":"4.25 + 15.25","value":{"doubleValue":19.5}},"ast":"_+_(\n 4.25^#*expr.Constant_DoubleValue#,\n 15.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 4.25~double,\n 15.25~double\n)~double^add_double","type":"double"},{"original":{"name":"add_positive_negative","expr":"17.75 + (-7.75)","value":{"doubleValue":10}},"ast":"_+_(\n 17.75^#*expr.Constant_DoubleValue#,\n -7.75^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 17.75~double,\n -7.75~double\n)~double^add_double","type":"double"},{"original":{"name":"add_negative_negative","expr":"-4.125 + (-2.125)","value":{"doubleValue":-6.25}},"ast":"_+_(\n -4.125^#*expr.Constant_DoubleValue#,\n -2.125^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n -4.125~double,\n -2.125~double\n)~double^add_double","type":"double"},{"original":{"name":"sub_positive_positive","expr":"42.0 - 12.0","value":{"doubleValue":30}},"ast":"_-_(\n 42^#*expr.Constant_DoubleValue#,\n 12^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42~double,\n 12~double\n)~double^subtract_double","type":"double"},{"original":{"name":"sub_positive_negative","expr":"42.875 - (-22.0)","value":{"doubleValue":64.875}},"ast":"_-_(\n 42.875^#*expr.Constant_DoubleValue#,\n -22^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42.875~double,\n -22~double\n)~double^subtract_double","type":"double"},{"original":{"name":"sub_negative_negative","expr":"-4.875 - (-0.125)","value":{"doubleValue":-4.75}},"ast":"_-_(\n -4.875^#*expr.Constant_DoubleValue#,\n -0.125^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n -4.875~double,\n -0.125~double\n)~double^subtract_double","type":"double"},{"original":{"name":"multiply_positive_positive","expr":"42.5 * 0.2","value":{"doubleValue":8.5}},"ast":"_*_(\n 42.5^#*expr.Constant_DoubleValue#,\n 0.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 42.5~double,\n 0.2~double\n)~double^multiply_double","type":"double"},{"original":{"name":"multiply_positive_negative","expr":"40.75 * (-2.25)","value":{"doubleValue":-91.6875}},"ast":"_*_(\n 40.75^#*expr.Constant_DoubleValue#,\n -2.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 40.75~double,\n -2.25~double\n)~double^multiply_double","type":"double"},{"original":{"name":"multiply_negative_negative","expr":"-3.0 * (-2.5)","value":{"doubleValue":7.5}},"ast":"_*_(\n -3^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -3~double,\n -2.5~double\n)~double^multiply_double","type":"double"},{"original":{"name":"divide_positive_positive","expr":"0.0625 / 0.002","value":{"doubleValue":31.25}},"ast":"_/_(\n 0.0625^#*expr.Constant_DoubleValue#,\n 0.002^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 0.0625~double,\n 0.002~double\n)~double^divide_double","type":"double"},{"original":{"name":"divide_positive_negative","expr":"-2.0 / 2.0","value":{"doubleValue":-1}},"ast":"_/_(\n -2^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -2~double,\n 2~double\n)~double^divide_double","type":"double"},{"original":{"name":"divide_negative_negative","expr":"-8.875 / (-0.0625)","value":{"doubleValue":142}},"ast":"_/_(\n -8.875^#*expr.Constant_DoubleValue#,\n -0.0625^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -8.875~double,\n -0.0625~double\n)~double^divide_double","type":"double"},{"original":{"name":"mod_not_support","expr":"47.5 % 5.5","disableCheck":true,"evalError":{"errors":[{"message":"found no matching overload for '_%_' applied to '(double, double)'"}]}},"ast":"_%_(\n 47.5^#*expr.Constant_DoubleValue#,\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:6: found no matching overload for '_%_' applied to '(double, double)'\n | 47.5 % 5.5\n | .....^"},{"original":{"name":"negative","expr":"-(4.5)","value":{"doubleValue":-4.5}},"ast":"-_(\n 4.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n 4.5~double\n)~double^negate_double","type":"double"},{"original":{"name":"double_negative","expr":"-(-1.25)","value":{"doubleValue":1.25}},"ast":"-_(\n -1.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n -1.25~double\n)~double^negate_double","type":"double"},{"original":{"name":"negative_zero","expr":"-(0.0)","value":{"doubleValue":0}},"ast":"-_(\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n 0~double\n)~double^negate_double","type":"double"},{"original":{"name":"divide_zero","expr":"15.75 / 0.0","value":{"doubleValue":"Infinity"}},"ast":"_/_(\n 15.75^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 15.75~double,\n 0~double\n)~double^divide_double","type":"double"},{"original":{"name":"multiply_zero","expr":"15.36 * 0.0","value":{"doubleValue":0}},"ast":"_*_(\n 15.36^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 15.36~double,\n 0~double\n)~double^multiply_double","type":"double"},{"original":{"name":"add_left_identity","expr":"0.0 + 1.75","value":{"doubleValue":1.75}},"ast":"_+_(\n 0^#*expr.Constant_DoubleValue#,\n 1.75^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 0~double,\n 1.75~double\n)~double^add_double","type":"double"},{"original":{"name":"add_right_identity","expr":" 2.5 + 0.0","value":{"doubleValue":2.5}},"ast":"_+_(\n 2.5^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 2.5~double,\n 0~double\n)~double^add_double","type":"double"},{"original":{"name":"add_commutative","expr":"7.5 + 1.5 == 1.5 + 7.5","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 7.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 1.5^#*expr.Constant_DoubleValue#,\n 7.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 7.5~double,\n 1.5~double\n )~double^add_double,\n _+_(\n 1.5~double,\n 7.5~double\n )~double^add_double\n)~bool^equals","type":"bool"},{"original":{"name":"add_associative","expr":"5.625 + (15.75 + 2.0) == (5.625 + 15.75) + 2.0","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 5.625^#*expr.Constant_DoubleValue#,\n _+_(\n 15.75^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5.625^#*expr.Constant_DoubleValue#,\n 15.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 5.625~double,\n _+_(\n 15.75~double,\n 2~double\n )~double^add_double\n )~double^add_double,\n _+_(\n _+_(\n 5.625~double,\n 15.75~double\n )~double^add_double,\n 2~double\n )~double^add_double\n)~bool^equals","type":"bool"},{"original":{"name":"mul_left_identity","expr":"1.0 * 45.25","value":{"doubleValue":45.25}},"ast":"_*_(\n 1^#*expr.Constant_DoubleValue#,\n 45.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 1~double,\n 45.25~double\n)~double^multiply_double","type":"double"},{"original":{"name":"mul_right_identity","expr":"-25.25 * 1.0","value":{"doubleValue":-25.25}},"ast":"_*_(\n -25.25^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -25.25~double,\n 1~double\n)~double^multiply_double","type":"double"},{"original":{"name":"mul_commutative","expr":"1.5 * 25.875 == 25.875 * 1.5","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n 25.875^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25.875^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 1.5~double,\n 25.875~double\n )~double^multiply_double,\n _*_(\n 25.875~double,\n 1.5~double\n )~double^multiply_double\n)~bool^equals","type":"bool"},{"original":{"name":"mul_associative","expr":"1.5 * (23.625 * 0.75) == (1.5 * 23.625) * 0.75","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n _*_(\n 23.625^#*expr.Constant_DoubleValue#,\n 0.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n 23.625^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 1.5~double,\n _*_(\n 23.625~double,\n 0.75~double\n )~double^multiply_double\n )~double^multiply_double,\n _*_(\n _*_(\n 1.5~double,\n 23.625~double\n )~double^multiply_double,\n 0.75~double\n )~double^multiply_double\n)~bool^equals","type":"bool"},{"original":{"name":"add_mul_distribute","expr":"5.75 * (1.5 + 2.5) == 5.75 * 1.5 + 5.75 * 2.5","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n _+_(\n 1.5^#*expr.Constant_DoubleValue#,\n 2.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n 2.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 5.75~double,\n _+_(\n 1.5~double,\n 2.5~double\n )~double^add_double\n )~double^multiply_double,\n _+_(\n _*_(\n 5.75~double,\n 1.5~double\n )~double^multiply_double,\n _*_(\n 5.75~double,\n 2.5~double\n )~double^multiply_double\n )~double^add_double\n)~bool^equals","type":"bool"},{"original":{"name":"fp_overflow_positive","description":"DBL_MAX(2^1023) times two","expr":"2.0 * 8.988466e+307 ","value":{"doubleValue":"Infinity"}},"ast":"_*_(\n 2^#*expr.Constant_DoubleValue#,\n 8.988466e+307^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 2~double,\n 8.988466e+307~double\n)~double^multiply_double","type":"double"},{"original":{"name":"fp_overflow_negative","description":"-DBL_MAX(-2^1023) times two","expr":"2.0 * -8.988466e+307 ","value":{"doubleValue":"-Infinity"}},"ast":"_*_(\n 2^#*expr.Constant_DoubleValue#,\n -8.988466e+307^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 2~double,\n -8.988466e+307~double\n)~double^multiply_double","type":"double"},{"original":{"name":"fp_underflow","description":"DBL_MIN(2^-1074) divided by two","expr":"1e-324 / 2.0","value":{"doubleValue":0}},"ast":"_/_(\n 0^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 0~double,\n 2~double\n)~double^divide_double","type":"double"}]}]},{"name":"integer_math","suites":[{"name":"int64_math","tests":[{"original":{"name":"add_positive_positive","expr":"40 + 2","value":{"int64Value":"42"}},"ast":"_+_(\n 40^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 40~int,\n 2~int\n)~int^add_int64","type":"int"},{"original":{"name":"add_positive_negative","expr":"42 + (-7)","value":{"int64Value":"35"}},"ast":"_+_(\n 42^#*expr.Constant_Int64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 42~int,\n -7~int\n)~int^add_int64","type":"int"},{"original":{"name":"add_negative_negative","expr":"-4 + (-2)","value":{"int64Value":"-6"}},"ast":"_+_(\n -4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n -4~int,\n -2~int\n)~int^add_int64","type":"int"},{"original":{"name":"sub_positive_positive","expr":"42 - 12","value":{"int64Value":"30"}},"ast":"_-_(\n 42^#*expr.Constant_Int64Value#,\n 12^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42~int,\n 12~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"sub_positive_negative","expr":"42 - (-22)","value":{"int64Value":"64"}},"ast":"_-_(\n 42^#*expr.Constant_Int64Value#,\n -22^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42~int,\n -22~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"sub_negative_negative","expr":"-42 - (-12)","value":{"int64Value":"-30"}},"ast":"_-_(\n -42^#*expr.Constant_Int64Value#,\n -12^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n -42~int,\n -12~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"multiply_positive_positive","expr":"42 * 2","value":{"int64Value":"84"}},"ast":"_*_(\n 42^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 42~int,\n 2~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"multiply_positive_negative","expr":"40 * (-2)","value":{"int64Value":"-80"}},"ast":"_*_(\n 40^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 40~int,\n -2~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"multiply_negative_negative","expr":"-30 * (-2)","value":{"int64Value":"60"}},"ast":"_*_(\n -30^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -30~int,\n -2~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"divide_positive_positive","expr":"42 / 2","value":{"int64Value":"21"}},"ast":"_/_(\n 42^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 42~int,\n 2~int\n)~int^divide_int64","type":"int"},{"original":{"name":"divide_positive_negative","expr":"-20 / 2","value":{"int64Value":"-10"}},"ast":"_/_(\n -20^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -20~int,\n 2~int\n)~int^divide_int64","type":"int"},{"original":{"name":"divide_negative_negative","expr":"-80 / (-2)","value":{"int64Value":"40"}},"ast":"_/_(\n -80^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -80~int,\n -2~int\n)~int^divide_int64","type":"int"},{"original":{"name":"mod_positive_positive","expr":"47 % 5","value":{"int64Value":"2"}},"ast":"_%_(\n 47^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 47~int,\n 5~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"mod_positive_negative","expr":"43 % (-5)","value":{"int64Value":"3"}},"ast":"_%_(\n 43^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 43~int,\n -5~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"mod_negative_negative","expr":"-42 % (-5)","value":{"int64Value":"-2"}},"ast":"_%_(\n -42^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n -42~int,\n -5~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"mod_negative_positive","expr":"-3 % 5","value":{"int64Value":"-3"}},"ast":"_%_(\n -3^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n -3~int,\n 5~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"unary_minus_pos","expr":"-(42)","value":{"int64Value":"-42"}},"ast":"-_(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n 42~int\n)~int^negate_int64","type":"int"},{"original":{"name":"unary_minus_neg","expr":"-(-42)","value":{"int64Value":"42"}},"ast":"-_(\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n -42~int\n)~int^negate_int64","type":"int"},{"original":{"name":"unary_minus_no_overload","expr":"-(42u)","disableCheck":true,"evalError":{"errors":[{"message":"no_such_overload"}]}},"ast":"-_(\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(uint)'\n | -(42u)\n | ^"},{"original":{"name":"unary_minus_not_bool","expr":"-false","disableCheck":true,"evalError":{"errors":[{"message":"no_such_overload"}]}},"ast":"-_(\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(bool)'\n | -false\n | ^"},{"original":{"name":"mod_zero","expr":"34 % 0","evalError":{"errors":[{"message":"modulus by zero"}]}},"ast":"_%_(\n 34^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 34~int,\n 0~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"negative_zero","expr":"-(0)","value":{"int64Value":"0"}},"ast":"-_(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n 0~int\n)~int^negate_int64","type":"int"},{"original":{"name":"double_negative","expr":"-(-42)","value":{"int64Value":"42"}},"ast":"-_(\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n -42~int\n)~int^negate_int64","type":"int"},{"original":{"name":"divide_zero","expr":"15 / 0","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"_/_(\n 15^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 15~int,\n 0~int\n)~int^divide_int64","type":"int"},{"original":{"name":"multiply_zero","expr":"15 * 0","value":{"int64Value":"0"}},"ast":"_*_(\n 15^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 15~int,\n 0~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"add_left_identity","expr":"0 + 17","value":{"int64Value":"17"}},"ast":"_+_(\n 0^#*expr.Constant_Int64Value#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 0~int,\n 17~int\n)~int^add_int64","type":"int"},{"original":{"name":"add_right_identity","expr":" 29 + 0","value":{"int64Value":"29"}},"ast":"_+_(\n 29^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 29~int,\n 0~int\n)~int^add_int64","type":"int"},{"original":{"name":"add_commutative","expr":"75 + 15 == 15 + 75","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 75^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 75^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 75~int,\n 15~int\n )~int^add_int64,\n _+_(\n 15~int,\n 75~int\n )~int^add_int64\n)~bool^equals","type":"bool"},{"original":{"name":"add_associative","expr":"5 + (15 + 20) == (5 + 15) + 20","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 5^#*expr.Constant_Int64Value#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 5~int,\n _+_(\n 15~int,\n 20~int\n )~int^add_int64\n )~int^add_int64,\n _+_(\n _+_(\n 5~int,\n 15~int\n )~int^add_int64,\n 20~int\n )~int^add_int64\n)~bool^equals","type":"bool"},{"original":{"name":"mul_left_identity","expr":"1 * 45","value":{"int64Value":"45"}},"ast":"_*_(\n 1^#*expr.Constant_Int64Value#,\n 45^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 1~int,\n 45~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"mul_right_identity","expr":"-25 * 1","value":{"int64Value":"-25"}},"ast":"_*_(\n -25^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -25~int,\n 1~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"mul_commutative","expr":"15 * 25 == 25 * 15","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 15~int,\n 25~int\n )~int^multiply_int64,\n _*_(\n 25~int,\n 15~int\n )~int^multiply_int64\n)~bool^equals","type":"bool"},{"original":{"name":"mul_associative","expr":"15 * (23 * 88) == (15 * 23) * 88","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n _*_(\n 23^#*expr.Constant_Int64Value#,\n 88^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n 23^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 88^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 15~int,\n _*_(\n 23~int,\n 88~int\n )~int^multiply_int64\n )~int^multiply_int64,\n _*_(\n _*_(\n 15~int,\n 23~int\n )~int^multiply_int64,\n 88~int\n )~int^multiply_int64\n)~bool^equals","type":"bool"},{"original":{"name":"add_mul_distribute","expr":"5 * (15 + 25) == 5 * 15 + 5 * 25","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 5^#*expr.Constant_Int64Value#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 5~int,\n _+_(\n 15~int,\n 25~int\n )~int^add_int64\n )~int^multiply_int64,\n _+_(\n _*_(\n 5~int,\n 15~int\n )~int^multiply_int64,\n _*_(\n 5~int,\n 25~int\n )~int^multiply_int64\n )~int^add_int64\n)~bool^equals","type":"bool"},{"original":{"name":"int64_overflow_positive","description":"LLONG_MAX plus one.","expr":"9223372036854775807 + 1","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_+_(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 9223372036854775807~int,\n 1~int\n)~int^add_int64","type":"int"},{"original":{"name":"int64_overflow_negative","description":"LLONG_MIN minus one.","expr":"-9223372036854775808 - 1","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_-_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n -9223372036854775808~int,\n 1~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"int64_overflow_add_negative","description":"negative overflow via addition","expr":"-9223372036854775808 + (-1)","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_+_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n -9223372036854775808~int,\n -1~int\n)~int^add_int64","type":"int"},{"original":{"name":"int64_overflow_sub_positive","description":"positive overflow via subtraction","expr":"1 - (-9223372036854775807)","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_-_(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 1~int,\n -9223372036854775807~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"int64_min_negate","description":"Negated LLONG_MIN is not representable.","expr":"-(-9223372036854775808)","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"-_(\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n -9223372036854775808~int\n)~int^negate_int64","type":"int"},{"original":{"name":"int64_min_negate_mul","description":"Negate LLONG_MIN via multiplication","expr":"(-9223372036854775808) * -1","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_*_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -9223372036854775808~int,\n -1~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"int64_min_negate_div","description":"Negate LLONG_MIN via division.","expr":"(-9223372036854775808)/-1","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_/_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -9223372036854775808~int,\n -1~int\n)~int^divide_int64","type":"int"},{"original":{"name":"int64_overflow_mul_positive","description":"Overflow via multiplication.","expr":"5000000000 * 5000000000","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_*_(\n 5000000000^#*expr.Constant_Int64Value#,\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 5000000000~int,\n 5000000000~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"int64_overflow_mul_negative","description":"Overflow via multiplication.","expr":"(-5000000000) * 5000000000","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_*_(\n -5000000000^#*expr.Constant_Int64Value#,\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -5000000000~int,\n 5000000000~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"uint64_overflow_positive","description":"ULLONG_MAX plus one.","expr":"18446744073709551615u + 1u","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_+_(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^add_uint64","type":"uint"},{"original":{"name":"uint64_overflow_negative","description":"zero minus one.","expr":"0u - 1u","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_-_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 0u~uint,\n 1u~uint\n)~uint^subtract_uint64","type":"uint"},{"original":{"name":"uint64_overflow_mul_positive","description":"Overflow via multiplication.","expr":"5000000000u * 5000000000u","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_*_(\n 5000000000u^#*expr.Constant_Uint64Value#,\n 5000000000u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 5000000000u~uint,\n 5000000000u~uint\n)~uint^multiply_uint64","type":"uint"}]},{"name":"uint64_math","tests":[{"original":{"name":"add","expr":"42u + 2u","value":{"uint64Value":"44"}},"ast":"_+_(\n 42u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 42u~uint,\n 2u~uint\n)~uint^add_uint64","type":"uint"},{"original":{"name":"sub","expr":"42u - 12u","value":{"uint64Value":"30"}},"ast":"_-_(\n 42u^#*expr.Constant_Uint64Value#,\n 12u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42u~uint,\n 12u~uint\n)~uint^subtract_uint64","type":"uint"},{"original":{"name":"multiply","expr":"40u * 2u","value":{"uint64Value":"80"}},"ast":"_*_(\n 40u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 40u~uint,\n 2u~uint\n)~uint^multiply_uint64","type":"uint"},{"original":{"name":"divide","expr":"60u / 2u","value":{"uint64Value":"30"}},"ast":"_/_(\n 60u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 60u~uint,\n 2u~uint\n)~uint^divide_uint64","type":"uint"},{"original":{"name":"mod","expr":"42u % 5u","value":{"uint64Value":"2"}},"ast":"_%_(\n 42u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 42u~uint,\n 5u~uint\n)~uint^modulo_uint64","type":"uint"},{"original":{"name":"negative_no_overload","expr":"-(5u)","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"-_(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(uint)'\n | -(5u)\n | ^"},{"original":{"name":"mod_zero","expr":"34u % 0u","evalError":{"errors":[{"message":"modulus by zero"}]}},"ast":"_%_(\n 34u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 34u~uint,\n 0u~uint\n)~uint^modulo_uint64","type":"uint"},{"original":{"name":"divide_zero","expr":"15u / 0u","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"_/_(\n 15u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 15u~uint,\n 0u~uint\n)~uint^divide_uint64","type":"uint"},{"original":{"name":"multiply_zero","expr":"15u * 0u","value":{"uint64Value":"0"}},"ast":"_*_(\n 15u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 15u~uint,\n 0u~uint\n)~uint^multiply_uint64","type":"uint"},{"original":{"name":"add_left_identity","expr":"0u + 17u","value":{"uint64Value":"17"}},"ast":"_+_(\n 0u^#*expr.Constant_Uint64Value#,\n 17u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 0u~uint,\n 17u~uint\n)~uint^add_uint64","type":"uint"},{"original":{"name":"add_right_identity","expr":" 29u + 0u","value":{"uint64Value":"29"}},"ast":"_+_(\n 29u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 29u~uint,\n 0u~uint\n)~uint^add_uint64","type":"uint"},{"original":{"name":"add_commutative","expr":"75u + 15u == 15u + 75u","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 75u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 75u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 75u~uint,\n 15u~uint\n )~uint^add_uint64,\n _+_(\n 15u~uint,\n 75u~uint\n )~uint^add_uint64\n)~bool^equals","type":"bool"},{"original":{"name":"add_associative","expr":"5u + (15u + 20u) == (5u + 15u) + 20u","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 5u^#*expr.Constant_Uint64Value#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 20u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 20u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 5u~uint,\n _+_(\n 15u~uint,\n 20u~uint\n )~uint^add_uint64\n )~uint^add_uint64,\n _+_(\n _+_(\n 5u~uint,\n 15u~uint\n )~uint^add_uint64,\n 20u~uint\n )~uint^add_uint64\n)~bool^equals","type":"bool"},{"original":{"name":"mul_left_identity","expr":"1u * 45u","value":{"uint64Value":"45"}},"ast":"_*_(\n 1u^#*expr.Constant_Uint64Value#,\n 45u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 1u~uint,\n 45u~uint\n)~uint^multiply_uint64","type":"uint"},{"original":{"name":"mul_right_identity","expr":"25u * 1u","value":{"uint64Value":"25"}},"ast":"_*_(\n 25u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 25u~uint,\n 1u~uint\n)~uint^multiply_uint64","type":"uint"},{"original":{"name":"mul_commutative","expr":"15u * 25u == 25u * 15u","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 15u~uint,\n 25u~uint\n )~uint^multiply_uint64,\n _*_(\n 25u~uint,\n 15u~uint\n )~uint^multiply_uint64\n)~bool^equals","type":"bool"},{"original":{"name":"mul_associative","expr":"15u * (23u * 88u) == (15u * 23u) * 88u","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n _*_(\n 23u^#*expr.Constant_Uint64Value#,\n 88u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n 23u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 88u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 15u~uint,\n _*_(\n 23u~uint,\n 88u~uint\n )~uint^multiply_uint64\n )~uint^multiply_uint64,\n _*_(\n _*_(\n 15u~uint,\n 23u~uint\n )~uint^multiply_uint64,\n 88u~uint\n )~uint^multiply_uint64\n)~bool^equals","type":"bool"},{"original":{"name":"add_mul_distribute","expr":"5u * (15u + 25u) == 5u * 15u + 5u * 25u","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 5u~uint,\n _+_(\n 15u~uint,\n 25u~uint\n )~uint^add_uint64\n )~uint^multiply_uint64,\n _+_(\n _*_(\n 5u~uint,\n 15u~uint\n )~uint^multiply_uint64,\n _*_(\n 5u~uint,\n 25u~uint\n )~uint^multiply_uint64\n )~uint^add_uint64\n)~bool^equals","type":"bool"}]}]},{"name":"lists","suites":[{"name":"concatenation","tests":[{"original":{"name":"list_append","expr":"[0, 1, 2] + [3, 4, 5] == [0, 1, 2, 3, 4, 5]","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n [\n 0~int,\n 1~int,\n 2~int\n ]~list(int),\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n )~list(int)^add_list,\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"list_not_commutative","expr":"[0, 1, 2] + [3, 4, 5] == [3, 4, 5, 0, 1, 2]","value":{"boolValue":false}},"ast":"_==_(\n _+_(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n [\n 0~int,\n 1~int,\n 2~int\n ]~list(int),\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n )~list(int)^add_list,\n [\n 3~int,\n 4~int,\n 5~int,\n 0~int,\n 1~int,\n 2~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"list_repeat","expr":"[2] + [2]","value":{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"2"}]}}},"ast":"_+_(\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n [\n 2~int\n ]~list(int),\n [\n 2~int\n ]~list(int)\n)~list(int)^add_list","type":"list(int)"},{"original":{"name":"empty_empty","expr":"[] + []","value":{"listValue":{}}},"ast":"_+_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n []~list(dyn),\n []~list(dyn)\n)~list(dyn)^add_list","type":"list(dyn)"},{"original":{"name":"left_unit","expr":"[] + [3, 4]","value":{"listValue":{"values":[{"int64Value":"3"},{"int64Value":"4"}]}}},"ast":"_+_(\n []^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n []~list(int),\n [\n 3~int,\n 4~int\n ]~list(int)\n)~list(int)^add_list","type":"list(int)"},{"original":{"name":"right_unit","expr":"[1, 2] + []","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"}]}}},"ast":"_+_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n [\n 1~int,\n 2~int\n ]~list(int),\n []~list(int)\n)~list(int)^add_list","type":"list(int)"}]},{"name":"index","tests":[{"original":{"name":"zero_based","expr":"[7, 8, 9][0]","value":{"int64Value":"7"}},"ast":"_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n 0~int\n)~int^index_list","type":"int"},{"original":{"name":"zero_based_double","expr":"[7, 8, 9][dyn(0.0)]","value":{"int64Value":"7"}},"ast":"_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0~double\n )~dyn^to_dyn\n)~int^index_list","type":"int"},{"original":{"name":"zero_based_double_error","expr":"[7, 8, 9][dyn(0.1)]","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0.1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0.1~double\n )~dyn^to_dyn\n)~int^index_list","type":"int"},{"original":{"name":"zero_based_uint","expr":"[7, 8, 9][dyn(0u)]","value":{"int64Value":"7"}},"ast":"_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0u~uint\n )~dyn^to_dyn\n)~int^index_list","type":"int"},{"original":{"name":"singleton","expr":"['foo'][0]","value":{"stringValue":"foo"}},"ast":"_[_](\n [\n \"foo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n \"foo\"~string\n ]~list(string),\n 0~int\n)~string^index_list","type":"string"},{"original":{"name":"middle","expr":"[0, 1, 1, 2, 3, 5, 8, 13][4]","value":{"int64Value":"3"}},"ast":"_[_](\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 13^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 0~int,\n 1~int,\n 1~int,\n 2~int,\n 3~int,\n 5~int,\n 8~int,\n 13~int\n ]~list(int),\n 4~int\n)~int^index_list","type":"int"},{"original":{"name":"last","expr":"['George', 'John', 'Paul', 'Ringo'][3]","value":{"stringValue":"Ringo"}},"ast":"_[_](\n [\n \"George\"^#*expr.Constant_StringValue#,\n \"John\"^#*expr.Constant_StringValue#,\n \"Paul\"^#*expr.Constant_StringValue#,\n \"Ringo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n \"George\"~string,\n \"John\"~string,\n \"Paul\"~string,\n \"Ringo\"~string\n ]~list(string),\n 3~int\n)~string^index_list","type":"string"},{"original":{"name":"index_out_of_bounds","expr":"[1, 2, 3][3]","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n)~int^index_list","type":"int"},{"original":{"name":"index_out_of_bounds_or_false","expr":"dyn([1, 2, 3][3]) || false","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"index_out_of_bounds_or_true","expr":"dyn([1, 2, 3][3]) || true","value":{"boolValue":true}},"ast":"_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"index_out_of_bounds_and_false","expr":"dyn([1, 2, 3][3]) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"index_out_of_bounds_and_true","expr":"dyn([1, 2, 3][3]) \u0026\u0026 true","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"bad_index_type","expr":"[1, 2, 3][dyn('')]","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n)~int^index_list","type":"int"},{"original":{"name":"bad_index_type_or_false","expr":"dyn([1, 2, 3][dyn('')]) || false","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"bad_index_type_or_true","expr":"dyn([1, 2, 3][dyn('')]) || true","value":{"boolValue":true}},"ast":"_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"bad_index_type_and_false","expr":"dyn([1, 2, 3][dyn('')]) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"bad_index_type_and_true","expr":"dyn([1, 2, 3][dyn('')]) \u0026\u0026 true","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"}]},{"name":"in","tests":[{"original":{"name":"empty","expr":"7 in []","value":{"boolValue":false}},"ast":"@in(\n 7^#*expr.Constant_Int64Value#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 7~int,\n []~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"singleton","expr":"4u in [4u]","value":{"boolValue":true}},"ast":"@in(\n 4u^#*expr.Constant_Uint64Value#,\n [\n 4u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 4u~uint,\n [\n 4u~uint\n ]~list(uint)\n)~bool^in_list","type":"bool"},{"original":{"name":"first","expr":"'alpha' in ['alpha', 'beta', 'gamma']","value":{"boolValue":true}},"ast":"@in(\n \"alpha\"^#*expr.Constant_StringValue#,\n [\n \"alpha\"^#*expr.Constant_StringValue#,\n \"beta\"^#*expr.Constant_StringValue#,\n \"gamma\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"alpha\"~string,\n [\n \"alpha\"~string,\n \"beta\"~string,\n \"gamma\"~string\n ]~list(string)\n)~bool^in_list","type":"bool"},{"original":{"name":"middle","expr":"3 in [5, 4, 3, 2, 1]","value":{"boolValue":true}},"ast":"@in(\n 3^#*expr.Constant_Int64Value#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 3~int,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"last","expr":"20u in [4u, 6u, 8u, 12u, 20u]","value":{"boolValue":true}},"ast":"@in(\n 20u^#*expr.Constant_Uint64Value#,\n [\n 4u^#*expr.Constant_Uint64Value#,\n 6u^#*expr.Constant_Uint64Value#,\n 8u^#*expr.Constant_Uint64Value#,\n 12u^#*expr.Constant_Uint64Value#,\n 20u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 20u~uint,\n [\n 4u~uint,\n 6u~uint,\n 8u~uint,\n 12u~uint,\n 20u~uint\n ]~list(uint)\n)~bool^in_list","type":"bool"},{"original":{"name":"double_in_ints","expr":"dyn(3.0) in [5, 4, 3, 2, 1]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3~double\n )~dyn^to_dyn,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"uint_in_ints","expr":"dyn(3u) in [5, 4, 3, 2, 1]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"int_in_doubles","expr":"dyn(3) in [5.0, 4.0, 3.0, 2.0, 1.0]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_DoubleValue#,\n 4^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3~int\n )~dyn^to_dyn,\n [\n 5~double,\n 4~double,\n 3~double,\n 2~double,\n 1~double\n ]~list(double)\n)~bool^in_list","type":"bool"},{"original":{"name":"uint_in_doubles","expr":"dyn(3u) in [5.0, 4.0, 3.0, 2.0, 1.0]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_DoubleValue#,\n 4^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n [\n 5~double,\n 4~double,\n 3~double,\n 2~double,\n 1~double\n ]~list(double)\n)~bool^in_list","type":"bool"},{"original":{"name":"int_in_uints","expr":"dyn(3) in [5u, 4u, 3u, 2u, 1u]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3~int\n )~dyn^to_dyn,\n [\n 5u~uint,\n 4u~uint,\n 3u~uint,\n 2u~uint,\n 1u~uint\n ]~list(uint)\n)~bool^in_list","type":"bool"},{"original":{"name":"double_in_uints","expr":"dyn(3.0) in [5u, 4u, 3u, 2u, 1u]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n [\n 5u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3~double\n )~dyn^to_dyn,\n [\n 5u~uint,\n 4u~uint,\n 3u~uint,\n 2u~uint,\n 1u~uint\n ]~list(uint)\n)~bool^in_list","type":"bool"},{"original":{"name":"missing","expr":"'hawaiian' in ['meat', 'veggie', 'margarita', 'cheese']","value":{"boolValue":false}},"ast":"@in(\n \"hawaiian\"^#*expr.Constant_StringValue#,\n [\n \"meat\"^#*expr.Constant_StringValue#,\n \"veggie\"^#*expr.Constant_StringValue#,\n \"margarita\"^#*expr.Constant_StringValue#,\n \"cheese\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"hawaiian\"~string,\n [\n \"meat\"~string,\n \"veggie\"~string,\n \"margarita\"~string,\n \"cheese\"~string\n ]~list(string)\n)~bool^in_list","type":"bool"}]},{"name":"size","tests":[{"original":{"name":"list_empty","expr":"size([])","value":{"int64Value":"0"}},"ast":"size(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n []~list(dyn)\n)~int^size_list","type":"int"},{"original":{"name":"list","expr":"size([1, 2, 3])","value":{"int64Value":"3"}},"ast":"size(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~int^size_list","type":"int"},{"original":{"name":"map_empty","expr":"size({})","value":{"int64Value":"0"}},"ast":"size(\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n {}~map(dyn, dyn)\n)~int^size_map","type":"int"},{"original":{"name":"map","expr":"size({1: 'one', 2: 'two', 3: 'three'})","value":{"int64Value":"3"}},"ast":"size(\n {\n 1^#*expr.Constant_Int64Value#:\"one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:\"two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:\"three\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n {\n 1~int:\"one\"~string,\n 2~int:\"two\"~string,\n 3~int:\"three\"~string\n }~map(int, string)\n)~int^size_map","type":"int"}]}]},{"name":"logic","suites":[{"name":"conditional","tests":[{"original":{"name":"true_case","expr":"true ? 1 : 2","value":{"int64Value":"1"}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n true~bool,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"false_case","expr":"false ? 'foo' : 'bar'","value":{"stringValue":"bar"}},"ast":"_?_:_(\n false^#*expr.Constant_BoolValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n \"bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n false~bool,\n \"foo\"~string,\n \"bar\"~string\n)~string^conditional","type":"string"},{"original":{"name":"error_case","expr":"2 / 0 \u003e 4 ? 'baz' : 'quux'","evalError":{"errors":[{"message":"division by zero"}]}},"ast":"_?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"baz\"^#*expr.Constant_StringValue#,\n \"quux\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 4~int\n )~bool^greater_int64,\n \"baz\"~string,\n \"quux\"~string\n)~string^conditional","type":"string"},{"original":{"name":"mixed_type","expr":"true ? 'cows' : 17","disableCheck":true,"value":{"stringValue":"cows"}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n \"cows\"^#*expr.Constant_StringValue#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:6: found no matching overload for '_?_:_' applied to '(bool, string, int)'\n | true ? 'cows' : 17\n | .....^"},{"original":{"name":"bad_type","expr":"'cows' ? false : 17","disableCheck":true,"evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_?_:_(\n \"cows\"^#*expr.Constant_StringValue#,\n false^#*expr.Constant_BoolValue#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:8: found no matching overload for '_?_:_' applied to '(string, bool, int)'\n | 'cows' ? false : 17\n | .......^"}]},{"name":"AND","tests":[{"original":{"name":"all_true","expr":"true \u0026\u0026 true","value":{"boolValue":true}},"ast":"_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n true~bool,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"all_false","expr":"false \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n false~bool,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"false_left","expr":"false \u0026\u0026 true","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n false~bool,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"false_right","expr":"true \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n true~bool,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"short_circuit_type_left","expr":"false \u0026\u0026 32","disableCheck":true,"value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n 32^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: expected type 'bool' but found 'int'\n | false \u0026\u0026 32\n | .........^"},{"original":{"name":"short_circuit_type_right","expr":"'horses' \u0026\u0026 false","disableCheck":true,"value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n \"horses\"^#*expr.Constant_StringValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'horses' \u0026\u0026 false\n | ^"},{"original":{"name":"short_circuit_error_left","expr":"false \u0026\u0026 (2 / 0 \u003e 3 ? false : true)","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n false~bool,\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional\n)~bool^logical_and","type":"bool"},{"original":{"name":"short_circuit_error_right","expr":"(2 / 0 \u003e 3 ? false : true) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"error_right","expr":"true \u0026\u0026 1/0 != 0","evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n true~bool,\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals\n)~bool^logical_and","type":"bool"},{"original":{"name":"error_left","expr":"1/0 != 0 \u0026\u0026 true","evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_\u0026\u0026_(\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"no_overload","expr":"'less filling' \u0026\u0026 'tastes great'","disableCheck":true,"evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_\u0026\u0026_(\n \"less filling\"^#*expr.Constant_StringValue#,\n \"tastes great\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'less filling' \u0026\u0026 'tastes great'\n | ^\nERROR: \u003cinput\u003e:1:19: expected type 'bool' but found 'string'\n | 'less filling' \u0026\u0026 'tastes great'\n | ..................^"}]},{"name":"OR","tests":[{"original":{"name":"all_true","expr":"true || true","value":{"boolValue":true}},"ast":"_||_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n true~bool,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"all_false","expr":"false || false","value":{"boolValue":false}},"ast":"_||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n false~bool,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"false_left","expr":"false || true","value":{"boolValue":true}},"ast":"_||_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n false~bool,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"false_right","expr":"true || false","value":{"boolValue":true}},"ast":"_||_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n true~bool,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"short_circuit_type_left","expr":"true || 32","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n true^#*expr.Constant_BoolValue#,\n 32^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: expected type 'bool' but found 'int'\n | true || 32\n | ........^"},{"original":{"name":"short_circuit_type_right","expr":"'horses' || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n \"horses\"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'horses' || true\n | ^"},{"original":{"name":"short_circuit_error_left","expr":"true || (2 / 0 \u003e 3 ? false : true)","value":{"boolValue":true}},"ast":"_||_(\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n true~bool,\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional\n)~bool^logical_or","type":"bool"},{"original":{"name":"short_circuit_error_right","expr":"(2 / 0 \u003e 3 ? false : true) || true","value":{"boolValue":true}},"ast":"_||_(\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"error_right","expr":"false || 1/0 != 0","evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_||_(\n false^#*expr.Constant_BoolValue#,\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n false~bool,\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals\n)~bool^logical_or","type":"bool"},{"original":{"name":"error_left","expr":"1/0 != 0 || false","evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_||_(\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"no_overload","expr":"'less filling' || 'tastes great'","disableCheck":true,"evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_||_(\n \"less filling\"^#*expr.Constant_StringValue#,\n \"tastes great\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'less filling' || 'tastes great'\n | ^\nERROR: \u003cinput\u003e:1:19: expected type 'bool' but found 'string'\n | 'less filling' || 'tastes great'\n | ..................^"}]},{"name":"NOT","tests":[{"original":{"name":"not_true","expr":"!true","value":{"boolValue":false}},"ast":"!_(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n true~bool\n)~bool^logical_not","type":"bool"},{"original":{"name":"not_false","expr":"!false","value":{"boolValue":true}},"ast":"!_(\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n false~bool\n)~bool^logical_not","type":"bool"},{"original":{"name":"no_overload","expr":"!0","disableCheck":true,"evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"!_(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: found no matching overload for '!_' applied to '(int)'\n | !0\n | ^"}]}]},{"name":"macros","suites":[{"name":"exists","tests":[{"original":{"name":"list_elem_all_true","expr":"[1, 2, 3].exists(e, e \u003e 0)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_some_true","expr":"[1, 2, 3].exists(e, e == 2)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_none_true","expr":"[1, 2, 3].exists(e, e \u003e 3)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 3~int\n )~bool^greater_int64\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_type_shortcircuit","description":"Exists filter is true for the last element.","expr":"[1, 'foo', 3].exists(e, e != '1')","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n e^#*expr.Expr_IdentExpr#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n \"foo\"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _!=_(\n e~dyn^e,\n \"1\"~string\n )~bool^not_equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_type_exhaustive","description":"Exists filter is never true, but heterogenous equality ensure the result is false.","expr":"[1, 'foo', 3].exists(e, e == '10')","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n \"10\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n \"foo\"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~dyn^e,\n \"10\"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_exists_error","expr":"[1, 2, 3].exists(e, e / 0 == 17)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n _/_(\n e~int^e,\n 0~int\n )~int^divide_int64,\n 17~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_empty","expr":"[].exists(e, e == 2)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"map_key","expr":"{'key1':1, 'key2':2}.exists(k, k == 'key2')","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"~string:1~int,\n \"key2\"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~string^k,\n \"key2\"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"not_map_key","expr":"!{'key1':1, 'key2':2}.exists(k, k == 'key3')","value":{"boolValue":true}},"ast":"!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key3\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"~string:1~int,\n \"key2\"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~string^k,\n \"key3\"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n)~bool^logical_not","type":"bool"},{"original":{"name":"map_key_type_shortcircuit","description":"Exists filter is true for the second key","expr":"{'key':1, 1:21}.exists(k, k != 2)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:21^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key\"~string:1~int,\n 1~int:21~int\n }~map(dyn, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _!=_(\n k~dyn^k,\n 2~int\n )~bool^not_equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"map_key_type_exhaustive","description":"Exists filter is never true, but heterogeneous equality ensures the result is false.","expr":"!{'key':1, 1:42}.exists(k, k == 2)","value":{"boolValue":true}},"ast":"!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n \"key\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n \"key\"~string:1~int,\n 1~int:42~int\n }~map(dyn, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~dyn^k,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n)~bool^logical_not","type":"bool"}]},{"name":"all","tests":[{"original":{"name":"list_elem_all_true","expr":"[1, 2, 3].all(e, e \u003e 0)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_some_true","expr":"[1, 2, 3].all(e, e == 2)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_none_true","expr":"[1, 2, 3].all(e, e == 17)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 17~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_type_shortcircuit","expr":"[1, 'foo', 3].all(e, e == 1)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n \"foo\"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~dyn^e,\n 1~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_type_exhaustive","expr":"[1, 'foo', 3].all(e, e % 2 == 1)","evalError":{"errors":[{"message":"no_such_overload"}]}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n \"foo\"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n _%_(\n e~dyn^e,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_error_shortcircuit","expr":"[1, 2, 3].all(e, 6 / (2 - e) == 6)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n 6^#*expr.Constant_Int64Value#,\n _-_(\n 2^#*expr.Constant_Int64Value#,\n e^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n _/_(\n 6~int,\n _-_(\n 2~int,\n e~int^e\n )~int^subtract_int64\n )~int^divide_int64,\n 6~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_error_exhaustive","expr":"[1, 2, 3].all(e, e / 0 != 17)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n _/_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _!=_(\n _/_(\n e~int^e,\n 0~int\n )~int^divide_int64,\n 17~int\n )~bool^not_equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_empty","expr":"[].all(e, e \u003e 0)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"map_key","expr":"{'key1':1, 'key2':2}.all(k, k == 'key2')","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"~string:1~int,\n \"key2\"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n k~string^k,\n \"key2\"~string\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"}]},{"name":"exists_one","tests":[{"original":{"name":"list_empty","expr":"[].exists_one(a, a == 7)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n a,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n a,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_one_true","expr":"[7].exists_one(a, a == 7)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n a,\n // Target\n [\n 7^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n a,\n // Target\n [\n 7~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_one_false","expr":"[8].exists_one(a, a == 7)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n a,\n // Target\n [\n 8^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n a,\n // Target\n [\n 8~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_none","expr":"[1, 2, 3].exists_one(x, x \u003e 20)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n x,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n x^#*expr.Expr_IdentExpr#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n x,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n x~int^x,\n 20~int\n )~bool^greater_int64,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_one","expr":"[6, 7, 8].exists_one(foo, foo % 5 == 2)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n foo,\n // Target\n [\n 6^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n foo,\n // Target\n [\n 6~int,\n 7~int,\n 8~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo~int^foo,\n 5~int\n )~int^modulo_int64,\n 2~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_many","expr":"[0, 1, 2, 3, 4].exists_one(n, n % 2 == 1)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n~int^n,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_all","expr":"['foal', 'foo', 'four'].exists_one(n, n.startsWith('fo'))","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n \"foal\"^#*expr.Constant_StringValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n \"four\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n n^#*expr.Expr_IdentExpr#.startsWith(\n \"fo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n \"foal\"~string,\n \"foo\"~string,\n \"four\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n n~string^n.startsWith(\n \"fo\"~string\n )~bool^starts_with_string,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_no_shortcircuit","description":"Errors invalidate everything, even if already false.","expr":"[3, 2, 1, 0].exists_one(n, 12 / n \u003e 1)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int,\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12~int,\n n~int^n\n )~int^divide_int64,\n 1~int\n )~bool^greater_int64,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"map_one","expr":"{6: 'six', 7: 'seven', 8: 'eight'}.exists_one(foo, foo % 5 == 2)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n foo,\n // Target\n {\n 6^#*expr.Constant_Int64Value#:\"six\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:\"seven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:\"eight\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n foo,\n // Target\n {\n 6~int:\"six\"~string,\n 7~int:\"seven\"~string,\n 8~int:\"eight\"~string\n }~map(int, string),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo~int^foo,\n 5~int\n )~int^modulo_int64,\n 2~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"}]},{"name":"map","tests":[{"original":{"name":"list_empty","expr":"[].map(n, n / 2)","value":{"listValue":{}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n n~int^n,\n 2~int\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_one","expr":"[3].map(n, n * n)","value":{"listValue":{"values":[{"int64Value":"9"}]}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _*_(\n n^#*expr.Expr_IdentExpr#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _*_(\n n~int^n,\n n~int^n\n )~int^multiply_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_many","expr":"[2, 4, 6].map(n, n / 2)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"}]}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int,\n 4~int,\n 6~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n n~int^n,\n 2~int\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_error","expr":"[2, 1, 0].map(n, 4 / n)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n 4^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n 4~int,\n n~int^n\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"map_extract_keys","expr":"{'John': 'smart'}.map(key, key) == ['John']","value":{"boolValue":true}},"ast":"_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n \"John\"^#*expr.Constant_StringValue#:\"smart\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n key^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n [\n \"John\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n \"John\"~string:\"smart\"~string\n }~map(string, string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(string)^@result,\n [\n key~string^key\n ]~list(string)\n )~list(string)^add_list,\n // Result\n @result~list(string)^@result)~list(string),\n [\n \"John\"~string\n ]~list(string)\n)~bool^equals","type":"bool"}]},{"name":"filter","tests":[{"original":{"name":"list_empty","expr":"[].filter(n, n % 2 == 0)","value":{"listValue":{}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n~int^n,\n 2~int\n )~int^modulo_int64,\n 0~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_one_true","expr":"[2].filter(n, n == 2)","value":{"listValue":{"values":[{"int64Value":"2"}]}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n n~int^n,\n 2~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_one_false","expr":"[1].filter(n, n \u003e 3)","value":{"listValue":{}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n n^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 1~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n n~int^n,\n 3~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_none","expr":"[1, 2, 3].filter(e, e \u003e 3)","value":{"listValue":{}}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n e^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n e~int^e,\n 3~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n e~int^e\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_some","expr":"[0, 1, 2, 3, 4].filter(x, x % 2 == 1)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"3"}]}}},"ast":"__comprehension__(\n // Variable\n x,\n // Target\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n x^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n x,\n // Target\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n x~int^x,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n x~int^x\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_all","expr":"[1, 2, 3].filter(n, n \u003e 0)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"}]}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n n^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n n~int^n,\n 0~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_no_shortcircuit","expr":"[3, 2, 1, 0].filter(n, 12 / n \u003e 4)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int,\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12~int,\n n~int^n\n )~int^divide_int64,\n 4~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"map_filter_keys","expr":"{'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}.filter(key, key == 'Ringo') == ['Ringo']","value":{"boolValue":true}},"ast":"_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n \"John\"^#*expr.Constant_StringValue#:\"smart\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"Paul\"^#*expr.Constant_StringValue#:\"cute\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"George\"^#*expr.Constant_StringValue#:\"quiet\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"Ringo\"^#*expr.Constant_StringValue#:\"funny\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n key^#*expr.Expr_IdentExpr#,\n \"Ringo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n key^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n [\n \"Ringo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n \"John\"~string:\"smart\"~string,\n \"Paul\"~string:\"cute\"~string,\n \"George\"~string:\"quiet\"~string,\n \"Ringo\"~string:\"funny\"~string\n }~map(string, string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n key~string^key,\n \"Ringo\"~string\n )~bool^equals,\n _+_(\n @result~list(string)^@result,\n [\n key~string^key\n ]~list(string)\n )~list(string)^add_list,\n @result~list(string)^@result\n )~list(string)^conditional,\n // Result\n @result~list(string)^@result)~list(string),\n [\n \"Ringo\"~string\n ]~list(string)\n)~bool^equals","type":"bool"}]},{"name":"nested","tests":[{"original":{"name":"filter_all","expr":"['signer'].filter(signer, ['artifact'].all(artifact, true))","value":{"listValue":{"values":[{"stringValue":"signer"}]}}},"ast":"__comprehension__(\n // Variable\n signer,\n // Target\n [\n \"signer\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n \"artifact\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n signer^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n signer,\n // Target\n [\n \"signer\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n \"artifact\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n true~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool,\n _+_(\n @result~list(string)^@result,\n [\n signer~string^signer\n ]~list(string)\n )~list(string)^add_list,\n @result~list(string)^@result\n )~list(string)^conditional,\n // Result\n @result~list(string)^@result)~list(string)","type":"list(string)"},{"original":{"name":"all_all","expr":"['signer'].all(signer, ['artifact'].all(artifact, true))","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n signer,\n // Target\n [\n \"signer\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n \"artifact\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n signer,\n // Target\n [\n \"signer\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n \"artifact\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n true~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"}]}]},{"name":"macros2","suites":[{"name":"exists","tests":[{"original":{"name":"list_elem_all_true","expr":"[1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)","value":{"boolValue":true}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .......................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................................^"},{"original":{"name":"list_elem_some_true","expr":"[1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)","value":{"boolValue":true}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .......................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .................................^"},{"original":{"name":"list_elem_none_true","expr":"[1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | .......................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ................................^"},{"original":{"name":"list_elem_type_shortcircuit","expr":"[1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')","value":{"boolValue":true}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:21: undeclared reference to 'exists' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ....................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ...........................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | .....................................^"},{"original":{"name":"list_elem_type_exhaustive","expr":"[1, 'foo', 3].exists(i, v, i == 3 || v == '10')","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n \"10\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:21: undeclared reference to 'exists' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ....................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ...........................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | .....................................^"},{"original":{"name":"list_elem_exists_error","expr":"[1, 2, 3].exists(i, v, v / i == 17)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ...........................^"},{"original":{"name":"list_empty","expr":"[].exists(i, v, i == 0 || v == 2)","value":{"boolValue":false}},"ast":"[]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: undeclared reference to 'exists' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | .........^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'i' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ..........^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'v' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | .............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'i' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ..........................^"},{"original":{"name":"map_key","expr":"{'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)","value":{"boolValue":true}},"ast":"{\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: undeclared reference to 'exists' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ..................................^\nERROR: \u003cinput\u003e:1:50: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | .................................................^"},{"original":{"name":"not_map_key","expr":"!{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)","value":{"boolValue":true}},"ast":"!_(\n {\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key3\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:29: undeclared reference to 'exists' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ............................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'k' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | .............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ................................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'k' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ...................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'v' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ..................................................^"},{"original":{"name":"map_key_type_shortcircuit","expr":"{'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)","value":{"boolValue":true}},"ast":"{\n \"key\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:21^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:23: undeclared reference to 'exists' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | ......................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'k' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'k' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .............................^\nERROR: \u003cinput\u003e:1:40: undeclared reference to 'v' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .......................................^"},{"original":{"name":"map_key_type_exhaustive","expr":"!{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)","value":{"boolValue":true}},"ast":"!_(\n {\n \"key\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 43^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'exists' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'k' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'k' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ..............................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'v' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ........................................^"}]},{"name":"all","tests":[{"original":{"name":"list_elem_all_true","expr":"[1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)","value":{"boolValue":true}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ..............................^"},{"original":{"name":"list_elem_some_true","expr":"[1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ..............................^"},{"original":{"name":"list_elem_none_true","expr":"[1, 2, 3].all(i, v, i == 3 || v == 4)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ..............................^"},{"original":{"name":"list_elem_type_shortcircuit","expr":"[1, 'foo', 3].all(i, v, i == 0 || v == 1)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ........................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ..................................^"},{"original":{"name":"list_elem_type_exhaustive","expr":"[0, 'foo', 3].all(i, v, v % 2 == i)","value":{"boolValue":false}},"ast":"[\n 0^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | ........................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .................................^"},{"original":{"name":"list_elem_type_error_exhaustive","expr":"[0, 'foo', 5].all(i, v, v % 3 == i)","evalError":{"errors":[{"message":"no_such_overload"}]}},"ast":"[\n 0^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 5^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | ........................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .................................^"},{"original":{"name":"list_elem_error_shortcircuit","expr":"[1, 2, 3].all(i, v, 6 / (2 - v) == i)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n 6^#*expr.Constant_Int64Value#,\n _-_(\n 2^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .............................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | ...................................^"},{"original":{"name":"list_elem_error_exhaustive","expr":"[1, 2, 3].all(i, v, v / i != 17)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _!=_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ........................^"},{"original":{"name":"list_empty","expr":"[].all(i, v, i \u003e -1 || v \u003e 0)","value":{"boolValue":true}},"ast":"[]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: undeclared reference to 'all' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | ......^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'i' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .......^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'v' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | ..........^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'i' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .............^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .......................^"},{"original":{"name":"map_key","expr":"{'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)","value":{"boolValue":false}},"ast":"{\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.all(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:25: undeclared reference to 'all' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ........................^\nERROR: \u003cinput\u003e:1:26: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | .........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...............................^\nERROR: \u003cinput\u003e:1:47: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ..............................................^"}]},{"name":"existsOne","tests":[{"original":{"name":"list_empty","expr":"[].existsOne(i, v, i == 3 || v == 7)","value":{"boolValue":false}},"ast":"[]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: undeclared reference to 'existsOne' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ............^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'i' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'v' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'i' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ...................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | .............................^"},{"original":{"name":"list_one_true","expr":"[7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)","value":{"boolValue":true}},"ast":"[\n 7^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'existsOne' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............................^"},{"original":{"name":"list_one_false","expr":"[8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)","value":{"boolValue":false}},"ast":"[\n 8^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'existsOne' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............................^"},{"original":{"name":"list_none","expr":"[1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: undeclared reference to 'existsOne' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ...................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'i' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ..........................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'v' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ...................................^"},{"original":{"name":"list_one","expr":"[5, 7, 8].existsOne(i, v, v % 5 == i)","value":{"boolValue":true}},"ast":"[\n 5^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: undeclared reference to 'existsOne' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ...................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ..........................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'i' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ...................................^"},{"original":{"name":"list_many","expr":"[0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)","value":{"boolValue":false}},"ast":"[\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:26: undeclared reference to 'existsOne' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .........................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'i' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | ................................^\nERROR: \u003cinput\u003e:1:42: undeclared reference to 'i' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .........................................^"},{"original":{"name":"list_all","expr":"['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))","value":{"boolValue":false}},"ast":"[\n \"foal\"^#*expr.Constant_StringValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n \"four\"^#*expr.Constant_StringValue#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#.startsWith(\n \"fo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:34: undeclared reference to 'existsOne' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | .................................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ..................................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | .....................................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'i' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ........................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'v' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ..................................................^"},{"original":{"name":"list_no_shortcircuit","expr":"[3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:23: undeclared reference to 'existsOne' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | ......................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .............................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .................................^"},{"original":{"name":"map_one","expr":"{6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')","value":{"boolValue":true}},"ast":"{\n 6^#*expr.Constant_Int64Value#:\"six\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:\"seven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:\"eight\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.existsOne(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n _%_(\n k^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n \"seven\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:45: undeclared reference to 'existsOne' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ............................................^\nERROR: \u003cinput\u003e:1:46: undeclared reference to 'k' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | .............................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ................................................^\nERROR: \u003cinput\u003e:1:52: undeclared reference to 'k' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ...................................................^\nERROR: \u003cinput\u003e:1:66: undeclared reference to 'v' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | .................................................................^"}]},{"name":"transformList","tests":[{"original":{"name":"empty","expr":"[].transformList(i, v, i / v)","value":{"listValue":{}}},"ast":"[]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'transformList' (in container '')\n | [].transformList(i, v, i / v)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i / v)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i / v)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i / v)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i / v)\n | ...........................^"},{"original":{"name":"empty_filter","expr":"[].transformList(i, v, i \u003e v, i / v)","value":{"listValue":{}}},"ast":"[]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n _/_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'transformList' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ..................................^"},{"original":{"name":"one","expr":"[3].transformList(i, v, v * v + i)","value":{"listValue":{"values":[{"int64Value":"9"}]}}},"ast":"[\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n _*_(\n v^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'transformList' (in container '')\n | [3].transformList(i, v, v * v + i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ................................^"},{"original":{"name":"one_filter","expr":"[3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)","value":{"listValue":{"values":[{"int64Value":"9"}]}}},"ast":"[\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n v^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'transformList' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ........................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................................^\nERROR: \u003cinput\u003e:1:43: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..........................................^\nERROR: \u003cinput\u003e:1:47: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..............................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................................................^"},{"original":{"name":"many","expr":"[2, 4, 6].transformList(i, v, v / 2 + i)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"3"},{"int64Value":"5"}]}}},"ast":"[\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ..............................^\nERROR: \u003cinput\u003e:1:39: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ......................................^"},{"original":{"name":"many_filter","expr":"[2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"5"}]}}},"ast":"[\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ..............................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ................................................^\nERROR: \u003cinput\u003e:1:57: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................................................^"},{"original":{"name":"error","expr":"[2, 1, 0].transformList(i, v, v / i)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ..................................^"},{"original":{"name":"error_filter","expr":"[2, 1, 0].transformList(i, v, v / i \u003e 0, v)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ..................................^\nERROR: \u003cinput\u003e:1:42: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | .........................................^"}]},{"name":"transformMap","tests":[{"original":{"name":"empty","expr":"{}.transformMap(k, v, k + v)","value":{"mapValue":{}}},"ast":"{}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:16: undeclared reference to 'transformMap' (in container '')\n | {}.transformMap(k, v, k + v)\n | ...............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k + v)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k + v)\n | ...................^\nERROR: \u003cinput\u003e:1:23: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k + v)\n | ......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k + v)\n | ..........................^"},{"original":{"name":"empty_filter","expr":"{}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)","value":{"mapValue":{}}},"ast":"{}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"foo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n \"bar\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:16: undeclared reference to 'transformMap' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...................^\nERROR: \u003cinput\u003e:1:23: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ......................^\nERROR: \u003cinput\u003e:1:37: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ....................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................^\nERROR: \u003cinput\u003e:1:53: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ....................................................^"},{"original":{"name":"one","expr":"{'foo': 'bar'}.transformMap(k, v, k + v)","value":{"mapValue":{"entries":[{"key":{"stringValue":"foo"},"value":{"stringValue":"foobar"}}]}}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:\"bar\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ..................................^\nERROR: \u003cinput\u003e:1:39: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ......................................^"},{"original":{"name":"one_filter","expr":"{'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)","value":{"mapValue":{"entries":[{"key":{"stringValue":"foo"},"value":{"stringValue":"foobar"}}]}}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:\"bar\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"foo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n \"bar\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ..................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:65: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................................^"},{"original":{"name":"many","expr":"{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)","value":{"mapValue":{"entries":[{"key":{"stringValue":"foo"},"value":{"stringValue":"foobar"}},{"key":{"stringValue":"baz"},"value":{"stringValue":"bazbux"}},{"key":{"stringValue":"hello"},"value":{"stringValue":"helloworld"}}]}}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:\"bar\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"baz\"^#*expr.Constant_StringValue#:\"bux\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"hello\"^#*expr.Constant_StringValue#:\"world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:60: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ...........................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:64: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ...............................................................^\nERROR: \u003cinput\u003e:1:67: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ..................................................................^\nERROR: \u003cinput\u003e:1:71: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ......................................................................^"},{"original":{"name":"many_filter","expr":"{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)","value":{"mapValue":{"entries":[{"key":{"stringValue":"foo"},"value":{"stringValue":"foobar"}},{"key":{"stringValue":"hello"},"value":{"stringValue":"helloworld"}}]}}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:\"bar\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"baz\"^#*expr.Constant_StringValue#:\"bux\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"hello\"^#*expr.Constant_StringValue#:\"world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n \"baz\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n \"bux\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:60: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ...........................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:64: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ...............................................................^\nERROR: \u003cinput\u003e:1:67: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ..................................................................^\nERROR: \u003cinput\u003e:1:81: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ................................................................................^\nERROR: \u003cinput\u003e:1:93: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ............................................................................................^\nERROR: \u003cinput\u003e:1:97: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ................................................................................................^"},{"original":{"name":"error","expr":"{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"bar\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"baz\"^#*expr.Constant_StringValue#:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n 4^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:44: undeclared reference to 'transformMap' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ...........................................^\nERROR: \u003cinput\u003e:1:45: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ............................................^\nERROR: \u003cinput\u003e:1:48: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ...............................................^\nERROR: \u003cinput\u003e:1:55: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ......................................................^"},{"original":{"name":"error_filter","expr":"{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"bar\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"baz\"^#*expr.Constant_StringValue#:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"baz\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n _/_(\n 4^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:44: undeclared reference to 'transformMap' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ...........................................^\nERROR: \u003cinput\u003e:1:45: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ............................................^\nERROR: \u003cinput\u003e:1:48: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ...............................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ..................................................^\nERROR: \u003cinput\u003e:1:69: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ....................................................................^\nERROR: \u003cinput\u003e:1:77: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ............................................................................^"}]}]},{"name":"math_ext","suites":[{"name":"greatest_int_result","tests":[{"original":{"name":"unary_negative","expr":"math.greatest(-5)","value":{"int64Value":"-5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -5~int\n)~int^math_@max_int","type":"int"},{"original":{"name":"unary_positive","expr":"math.greatest(5)","value":{"int64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5~int\n)~int^math_@max_int","type":"int"},{"original":{"name":"binary_same_args","expr":"math.greatest(1, 1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~int,\n 1~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_with_decimal","expr":"math.greatest(1, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1~int,\n 1~double\n )~dyn^math_@max_int_double,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_uint","expr":"math.greatest(1, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1~int,\n 1u~uint\n )~dyn^math_@max_int_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_greater","expr":"math.greatest(3, -3)","value":{"int64Value":"3"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 3^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 3~int,\n -3~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_second_arg_greater","expr":"math.greatest(-7, 5)","value":{"int64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -7^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -7~int,\n 5~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_first_arg_int_max","expr":"math.greatest(9223372036854775807, 1)","value":{"int64Value":"9223372036854775807"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 9223372036854775807~int,\n 1~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_second_arg_int_max","expr":"math.greatest(1, 9223372036854775807)","value":{"int64Value":"9223372036854775807"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~int,\n 9223372036854775807~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_first_arg_int_min","expr":"math.greatest(-9223372036854775808, 1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -9223372036854775808~int,\n 1~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_second_arg_int_min","expr":"math.greatest(1, -9223372036854775808)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~int,\n -9223372036854775808~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"ternary_same_args","expr":"math.greatest(1, 1, 1) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~int,\n 1~int,\n 1~int\n ]~list(int)\n )~int^math_@max_list_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_decimal","expr":"math.greatest(1, 1.0, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~int,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_uint","expr":"math.greatest(1, 1u, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~int,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_greatest","expr":"math.greatest(10, 1, 3) == 10"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 10~int,\n 1~int,\n 3~int\n ]~list(int)\n )~int^math_@max_list_int,\n 10~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_greatest","expr":"math.greatest(1, 3, 10) == 10"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~int,\n 3~int,\n 10~int\n ]~list(int)\n )~int^math_@max_list_int,\n 10~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_negatives","expr":"math.greatest(-1, -2, -3) == -1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n -1~int,\n -2~int,\n -3~int\n ]~list(int)\n )~int^math_@max_list_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_max","expr":"math.greatest(9223372036854775807, 1, 5) == 9223372036854775807"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 9223372036854775807~int,\n 1~int,\n 5~int\n ]~list(int)\n )~int^math_@max_list_int,\n 9223372036854775807~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_min","expr":"math.greatest(-9223372036854775807, -1, -5) == -1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -9223372036854775807^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n -9223372036854775807~int,\n -1~int,\n -5~int\n ]~list(int)\n )~int^math_@max_list_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.greatest(5.4, 10, 3u, -5.0, 9223372036854775807) == 9223372036854775807"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 9223372036854775807~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 9223372036854775807~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.greatest([5.4, 10, 3u, -5.0, 3.5]) == 10"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.greatest([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10~int\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10~int\n)~bool^equals","type":"bool"}]},{"name":"greatest_double_result","tests":[{"original":{"name":"unary_negative","expr":"math.greatest(-5.0)","value":{"doubleValue":-5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -5~double\n)~double^math_@max_double","type":"double"},{"original":{"name":"unary_positive","expr":"math.greatest(5.0)","value":{"doubleValue":5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5~double\n)~double^math_@max_double","type":"double"},{"original":{"name":"binary_same_args","expr":"math.greatest(1.0, 1.0)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~double,\n 1~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"binary_with_int","expr":"math.greatest(1.0, 1) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1~double,\n 1~int\n )~dyn^math_@max_double_int,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_uint","expr":"math.greatest(1.0, 1u) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1~double,\n 1u~uint\n )~dyn^math_@max_double_uint,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_greater","expr":"math.greatest(5.0, -7.0)","value":{"doubleValue":5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_DoubleValue#,\n -7^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5~double,\n -7~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"binary_second_arg_greater","expr":"math.greatest(-3.0, 3.0)","value":{"doubleValue":3}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -3^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -3~double,\n 3~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"binary_first_arg_double_max","expr":"math.greatest(1.797693e308, 1)","value":{"doubleValue":1.797693e+308}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1.797693e+308~double,\n 1~int\n)~dyn^math_@max_double_int","type":"dyn"},{"original":{"name":"binary_second_arg_double_max","expr":"math.greatest(1, 1.797693e308)","value":{"doubleValue":1.797693e+308}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~int,\n 1.797693e+308~double\n)~dyn^math_@max_int_double","type":"dyn"},{"original":{"name":"binary_first_arg_double_min","expr":"math.greatest(-1.797693e308, 1.5)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -1.797693e+308~double,\n 1.5~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"binary_second_arg_double_min","expr":"math.greatest(1.5, -1.797693e308)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1.5^#*expr.Constant_DoubleValue#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1.5~double,\n -1.797693e+308~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"ternary_same_args","expr":"math.greatest(1.0, 1.0, 1.0) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~double,\n 1~double,\n 1~double\n ]~list(double)\n )~double^math_@max_list_double,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_int","expr":"math.greatest(1.0, 1, 1) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~double,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_uint","expr":"math.greatest(1.0, 1u, 1u) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~double,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_greatest","expr":"math.greatest(10.5, 1.5, 3.5) == 10.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 10.5~double,\n 1.5~double,\n 3.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n 10.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_greatest","expr":"math.greatest(1.5, 3.5, 10.5) == 10.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1.5~double,\n 3.5~double,\n 10.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n 10.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_negatives","expr":"math.greatest(-1.5, -2.5, -3.5) == -1.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1.5^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#,\n -3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n -1.5~double,\n -2.5~double,\n -3.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n -1.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_double_max","expr":"math.greatest(1.797693e308, 1, 5) == 1.797693e308"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1.797693e+308~double,\n 1~int,\n 5~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1.797693e+308~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_double_min","expr":"math.greatest(-1.797693e308, -1, -5) == -1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n -1.797693e+308~double,\n -1~int,\n -5~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.greatest(5.4, 10, 3u, -5.0, 1.797693e308) == 1.797693e308"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 1.797693e+308~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1.797693e+308~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.greatest([5.4, 10.5, 3u, -5.0, 3.5]) == 10.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10.5~double,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.greatest([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10.5~double\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10.5~double\n)~bool^equals","type":"bool"}]},{"name":"greatest_uint_result","tests":[{"original":{"name":"unary","expr":"math.greatest(5u)","value":{"uint64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5u~uint\n)~uint^math_@max_uint","type":"uint"},{"original":{"name":"binary_same_args","expr":"math.greatest(1u, 1u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1u~uint,\n 1u~uint\n)~uint^math_@max_uint_uint","type":"uint"},{"original":{"name":"binary_with_decimal","expr":"math.greatest(1u, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1u~uint,\n 1~double\n )~dyn^math_@max_uint_double,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_int","expr":"math.greatest(1u, 1) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1u~uint,\n 1~int\n )~dyn^math_@max_uint_int,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_greater","expr":"math.greatest(5u, -7)","value":{"uint64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5u^#*expr.Constant_Uint64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5u~uint,\n -7~int\n)~dyn^math_@max_uint_int","type":"dyn"},{"original":{"name":"binary_second_arg_greater","expr":"math.greatest(-3, 3u)","value":{"uint64Value":"3"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -3^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -3~int,\n 3u~uint\n)~dyn^math_@max_int_uint","type":"dyn"},{"original":{"name":"binary_first_arg_uint_max","expr":"math.greatest(18446744073709551615u, 1u)","value":{"uint64Value":"18446744073709551615"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^math_@max_uint_uint","type":"uint"},{"original":{"name":"binary_second_arg_uint_max","expr":"math.greatest(1u, 18446744073709551615u)","value":{"uint64Value":"18446744073709551615"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1u~uint,\n 18446744073709551615u~uint\n)~uint^math_@max_uint_uint","type":"uint"},{"original":{"name":"ternary_same_args","expr":"math.greatest(1u, 1u, 1u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1u~uint,\n 1u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_decimal","expr":"math.greatest(1u, 1.0, 1.0) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1u~uint,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_int","expr":"math.greatest(1u, 1, 1) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1u~uint,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_greatest","expr":"math.greatest(10u, 1u, 3u) == 10u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 10u~uint,\n 1u~uint,\n 3u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 10u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_greatest","expr":"math.greatest(1u, 3u, 10u) == 10u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1u~uint,\n 3u~uint,\n 10u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 10u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_max","expr":"math.greatest(18446744073709551615u, 1u, 5u) == 18446744073709551615u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 18446744073709551615u~uint,\n 1u~uint,\n 5u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 18446744073709551615u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.greatest(5.4, 10, 3u, -5.0, 18446744073709551615u) == 18446744073709551615u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 18446744073709551615u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 18446744073709551615u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.greatest([5.4, 10u, 3u, -5.0, 3.5]) == 10u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10u~uint,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.greatest([dyn(5.4), dyn(10u), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10u~uint\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10u~uint\n)~bool^equals","type":"bool"}]},{"name":"least_int_result","tests":[{"original":{"name":"unary_negative","expr":"math.least(-5)","value":{"int64Value":"-5"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -5~int\n)~int^math_@min_int","type":"int"},{"original":{"name":"unary_positive","expr":"math.least(5)","value":{"int64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5~int\n)~int^math_@min_int","type":"int"},{"original":{"name":"binary_same_args","expr":"math.least(1, 1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1~int,\n 1~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_with_decimal","expr":"math.least(1, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1~int,\n 1~double\n )~dyn^math_@min_int_double,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_uint","expr":"math.least(1, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1~int,\n 1u~uint\n )~dyn^math_@min_int_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_least","expr":"math.least(-3, 3)","value":{"int64Value":"-3"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -3^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -3~int,\n 3~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_second_arg_least","expr":"math.least(5, -7)","value":{"int64Value":"-7"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5^#*expr.Constant_Int64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5~int,\n -7~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_first_arg_int_max","expr":"math.least(9223372036854775807, 1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 9223372036854775807~int,\n 1~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_second_arg_int_max","expr":"math.least(1, 9223372036854775807)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1~int,\n 9223372036854775807~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_first_arg_int_min","expr":"math.least(-9223372036854775808, 1)","value":{"int64Value":"-9223372036854775808"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -9223372036854775808~int,\n 1~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_second_arg_int_min","expr":"math.least(1, -9223372036854775808)","value":{"int64Value":"-9223372036854775808"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1~int,\n -9223372036854775808~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"ternary_same_args","expr":"math.least(1, 1, 1) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~int,\n 1~int,\n 1~int\n ]~list(int)\n )~int^math_@min_list_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_decimal","expr":"math.least(1, 1.0, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~int,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_uint","expr":"math.least(1, 1u, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~int,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_least","expr":"math.least(0, 1, 3) == 0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 0~int,\n 1~int,\n 3~int\n ]~list(int)\n )~int^math_@min_list_int,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_least","expr":"math.least(1, 3, 0) == 0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~int,\n 3~int,\n 0~int\n ]~list(int)\n )~int^math_@min_list_int,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_negatives","expr":"math.least(-1, -2, -3) == -3"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n -1~int,\n -2~int,\n -3~int\n ]~list(int)\n )~int^math_@min_list_int,\n -3~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_max","expr":"math.least(9223372036854775807, 1, 5) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 9223372036854775807~int,\n 1~int,\n 5~int\n ]~list(int)\n )~int^math_@min_list_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_min","expr":"math.least(-9223372036854775808, -1, -5) == -9223372036854775808"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n -9223372036854775808~int,\n -1~int,\n -5~int\n ]~list(int)\n )~int^math_@min_list_int,\n -9223372036854775808~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.least(5.4, 10, 3u, -5.0, 9223372036854775807) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 9223372036854775807~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.least([5.4, 10, 3u, -5.0, 3.5]) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.least([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10~int\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"}]},{"name":"least_double_result","tests":[{"original":{"name":"unary_negative","expr":"math.least(-5.5)","value":{"doubleValue":-5.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -5.5~double\n)~double^math_@min_double","type":"double"},{"original":{"name":"unary_positive","expr":"math.least(5.5)","value":{"doubleValue":5.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5.5~double\n)~double^math_@min_double","type":"double"},{"original":{"name":"binary_same_args","expr":"math.least(1.5, 1.5)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1.5~double,\n 1.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_with_int","expr":"math.least(1.0, 1) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1~double,\n 1~int\n )~dyn^math_@min_double_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_uint","expr":"math.least(1, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1~int,\n 1u~uint\n )~dyn^math_@min_int_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_least","expr":"math.least(-3.5, 3.5)","value":{"doubleValue":-3.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -3.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -3.5~double,\n 3.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_second_arg_least","expr":"math.least(5.5, -7.5)","value":{"doubleValue":-7.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5.5^#*expr.Constant_DoubleValue#,\n -7.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5.5~double,\n -7.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_first_arg_double_max","expr":"math.least(1.797693e308, 1.5)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1.797693e+308~double,\n 1.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_second_arg_double_max","expr":"math.least(1.5, 1.797693e308)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1.5~double,\n 1.797693e+308~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_first_arg_double_min","expr":"math.least(-1.797693e308, 1.5)","value":{"doubleValue":-1.797693e+308}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -1.797693e+308~double,\n 1.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_second_arg_double_min","expr":"math.least(1.5, -1.797693e308)","value":{"doubleValue":-1.797693e+308}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1.5~double,\n -1.797693e+308~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"ternary_same_args","expr":"math.least(1.5, 1.5, 1.5) == 1.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1.5~double,\n 1.5~double,\n 1.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 1.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_int","expr":"math.least(1.0, 1, 1) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~double,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_uint","expr":"math.least(1.0, 1u, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~double,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_least","expr":"math.least(0.5, 1.5, 3.5) == 0.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 0.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 0.5~double,\n 1.5~double,\n 3.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 0.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_least","expr":"math.least(1.5, 3.5, 0.5) == 0.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#,\n 0.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1.5~double,\n 3.5~double,\n 0.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 0.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_negatives","expr":"math.least(-1.5, -2.5, -3.5) == -3.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1.5^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#,\n -3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n -1.5~double,\n -2.5~double,\n -3.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n -3.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_double_max","expr":"math.least(1.797693e308, 1, 5) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1.797693e+308~double,\n 1~int,\n 5~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_double_min","expr":"math.least(-1.797693e308, -1, -5) == -1.797693e308"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n -1.797693e+308~double,\n -1~int,\n -5~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -1.797693e+308~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.least(5.4, 10, 3u, -5.0, 1.797693e308) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 1.797693e+308~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.least([5.4, 10.5, 3u, -5.0, 3.5]) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10.5~double,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.least([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10.5~double\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"}]},{"name":"least_uint_result","tests":[{"original":{"name":"unary","expr":"math.least(5u)","value":{"uint64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5u~uint\n)~uint^math_@min_uint","type":"uint"},{"original":{"name":"binary_same_args","expr":"math.least(1u, 1u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1u~uint,\n 1u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"binary_with_decimal","expr":"math.least(1u, 1.0) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1u~uint,\n 1~double\n )~dyn^math_@min_uint_double,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_int","expr":"math.least(1u, 1) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1u~uint,\n 1~int\n )~dyn^math_@min_uint_int,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_least","expr":"math.least(1u, 3u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1u~uint,\n 3u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"binary_second_arg_least","expr":"math.least(5u, 2u)","value":{"uint64Value":"2"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5u~uint,\n 2u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"binary_first_arg_uint_max","expr":"math.least(18446744073709551615u, 1u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"binary_second_arg_uint_max","expr":"math.least(1u, 18446744073709551615u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1u~uint,\n 18446744073709551615u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"ternary_same_args","expr":"math.least(1u, 1u, 1u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1u~uint,\n 1u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_decimal","expr":"math.least(1u, 1.0, 1.0) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1u~uint,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_int","expr":"math.least(1u, 1, 1) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1u~uint,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_least","expr":"math.least(1u, 10u, 3u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1u~uint,\n 10u~uint,\n 3u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_least","expr":"math.least(10u, 3u, 1u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 10u~uint,\n 3u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_uint_max","expr":"math.least(18446744073709551615u, 1u, 5u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 18446744073709551615u~uint,\n 1u~uint,\n 5u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.least(5.4, 10, 3u, 1u, 18446744073709551615u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n 1u~uint,\n 18446744073709551615u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.least([5.4, 10u, 3u, 1u, 3.5]) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10u~uint,\n 3u~uint,\n 1u~uint,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.least([dyn(5.4), dyn(10u), dyn(3u), dyn(1u), dyn(3.5)]) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10u~uint\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"}]},{"name":"ceil","tests":[{"original":{"name":"negative","expr":"math.ceil(-1.2)","value":{"doubleValue":-1}},"ast":"math^#*expr.Expr_IdentExpr#.ceil(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.ceil(\n -1.2~double\n)~double^math_ceil_double","type":"double"},{"original":{"name":"positive","expr":"math.ceil(1.2)","value":{"doubleValue":2}},"ast":"math^#*expr.Expr_IdentExpr#.ceil(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.ceil(\n 1.2~double\n)~double^math_ceil_double","type":"double"},{"original":{"name":"dyn_error","expr":"math.ceil(dyn(1))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.ceil(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.ceil(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_ceil_double","type":"double"}]},{"name":"floor","tests":[{"original":{"name":"negative","expr":"math.floor(-1.2)","value":{"doubleValue":-2}},"ast":"math^#*expr.Expr_IdentExpr#.floor(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.floor(\n -1.2~double\n)~double^math_floor_double","type":"double"},{"original":{"name":"positive","expr":"math.floor(1.2)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.floor(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.floor(\n 1.2~double\n)~double^math_floor_double","type":"double"},{"original":{"name":"dyn_error","expr":"math.floor(dyn(1))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.floor(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.floor(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_floor_double","type":"double"}]},{"name":"round","tests":[{"original":{"name":"negative_down","expr":"math.round(-1.6)","value":{"doubleValue":-2}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n -1.6^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n -1.6~double\n)~double^math_round_double","type":"double"},{"original":{"name":"negative_up","expr":"math.round(-1.4)","value":{"doubleValue":-1}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n -1.4^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n -1.4~double\n)~double^math_round_double","type":"double"},{"original":{"name":"negative_mid","expr":"math.round(-1.5)","value":{"doubleValue":-2}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n -1.5~double\n)~double^math_round_double","type":"double"},{"original":{"name":"positive_down","expr":"math.round(1.2)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n 1.2~double\n)~double^math_round_double","type":"double"},{"original":{"name":"positive_up","expr":"math.round(1.5)","value":{"doubleValue":2}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n 1.5~double\n)~double^math_round_double","type":"double"},{"original":{"name":"nan","expr":"math.isNaN(math.round(0.0/0.0))"},"ast":"math^#*expr.Expr_IdentExpr#.isNaN(\n math^#*expr.Expr_IdentExpr#.round(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isNaN(\n math.round(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~double^math_round_double\n)~bool^math_isNaN_double","type":"bool"},{"original":{"name":"dyn_error","expr":"math.round(dyn(1))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_round_double","type":"double"}]},{"name":"trunc","tests":[{"original":{"name":"negative","expr":"math.trunc(-1.2)","value":{"doubleValue":-1}},"ast":"math^#*expr.Expr_IdentExpr#.trunc(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.trunc(\n -1.2~double\n)~double^math_trunc_double","type":"double"},{"original":{"name":"positive","expr":"math.trunc(1.2)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.trunc(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.trunc(\n 1.2~double\n)~double^math_trunc_double","type":"double"},{"original":{"name":"nan","expr":"math.isNaN(math.trunc(0.0/0.0))"},"ast":"math^#*expr.Expr_IdentExpr#.isNaN(\n math^#*expr.Expr_IdentExpr#.trunc(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isNaN(\n math.trunc(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~double^math_trunc_double\n)~bool^math_isNaN_double","type":"bool"},{"original":{"name":"dyn_error","expr":"math.trunc(dyn(1))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.trunc(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.trunc(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_trunc_double","type":"double"}]},{"name":"abs","tests":[{"original":{"name":"uint","expr":"math.abs(1u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n 1u~uint\n)~uint^math_abs_uint","type":"uint"},{"original":{"name":"positive_int","expr":"math.abs(1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n 1~int\n)~int^math_abs_int","type":"int"},{"original":{"name":"negative_int","expr":"math.abs(-11)","value":{"int64Value":"11"}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n -11^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n -11~int\n)~int^math_abs_int","type":"int"},{"original":{"name":"positive_double","expr":"math.abs(1.5)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n 1.5~double\n)~double^math_abs_double","type":"double"},{"original":{"name":"negative_double","expr":"math.abs(-11.5)","value":{"doubleValue":11.5}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n -11.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n -11.5~double\n)~double^math_abs_double","type":"double"},{"original":{"name":"int_overflow","expr":"math.abs(-9223372036854775808)","evalError":{"errors":[{"message":"overflow"}]}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n -9223372036854775808~int\n)~int^math_abs_int","type":"int"}]},{"name":"sign","tests":[{"original":{"name":"positive_uint","expr":"math.sign(100u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 100u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 100u~uint\n)~uint^math_sign_uint","type":"uint"},{"original":{"name":"zero_uint","expr":"math.sign(0u)","value":{"uint64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 0u~uint\n)~uint^math_sign_uint","type":"uint"},{"original":{"name":"positive_int","expr":"math.sign(100)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 100^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 100~int\n)~int^math_sign_int","type":"int"},{"original":{"name":"negative_int","expr":"math.sign(-11)","value":{"int64Value":"-1"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n -11^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n -11~int\n)~int^math_sign_int","type":"int"},{"original":{"name":"zero_int","expr":"math.sign(0)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 0~int\n)~int^math_sign_int","type":"int"},{"original":{"name":"positive_double","expr":"math.sign(100.5)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 100.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 100.5~double\n)~double^math_sign_double","type":"double"},{"original":{"name":"negative_double","expr":"math.sign(-32.0)","value":{"doubleValue":-1}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n -32^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n -32~double\n)~double^math_sign_double","type":"double"},{"original":{"name":"zero_double","expr":"math.sign(0.0)","value":{"doubleValue":0}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 0~double\n)~double^math_sign_double","type":"double"},{"original":{"name":"dyn_error","expr":"math.sign(dyn(true))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~dyn^math_sign_double|math_sign_int|math_sign_uint","type":"dyn"}]},{"name":"isNaN","tests":[{"original":{"name":"true","expr":"math.isNaN(0.0/0.0)"},"ast":"math^#*expr.Expr_IdentExpr#.isNaN(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isNaN(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^math_isNaN_double","type":"bool"},{"original":{"name":"false","expr":"!math.isNaN(1.0/0.0)"},"ast":"!_(\n math^#*expr.Expr_IdentExpr#.isNaN(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n math.isNaN(\n _/_(\n 1~double,\n 0~double\n )~double^divide_double\n )~bool^math_isNaN_double\n)~bool^logical_not","type":"bool"},{"original":{"name":"dyn_error","expr":"math.isNaN(dyn(true))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.isNaN(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isNaN(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isNaN_double","type":"bool"}]},{"name":"isInf","tests":[{"original":{"name":"true","expr":"math.isInf(1.0/0.0)"},"ast":"math^#*expr.Expr_IdentExpr#.isInf(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isInf(\n _/_(\n 1~double,\n 0~double\n )~double^divide_double\n)~bool^math_isInf_double","type":"bool"},{"original":{"name":"false","expr":"!math.isInf(0.0/0.0)"},"ast":"!_(\n math^#*expr.Expr_IdentExpr#.isInf(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n math.isInf(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~bool^math_isInf_double\n)~bool^logical_not","type":"bool"},{"original":{"name":"dyn_error","expr":"math.isInf(dyn(true))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.isInf(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isInf(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isInf_double","type":"bool"}]},{"name":"isFinite","tests":[{"original":{"name":"true","expr":"math.isFinite(1.0/1.5)"},"ast":"math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isFinite(\n _/_(\n 1~double,\n 1.5~double\n )~double^divide_double\n)~bool^math_isFinite_double","type":"bool"},{"original":{"name":"false_nan","expr":"!math.isFinite(0.0/0.0)"},"ast":"!_(\n math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n math.isFinite(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~bool^math_isFinite_double\n)~bool^logical_not","type":"bool"},{"original":{"name":"false_inf","expr":"!math.isFinite(-1.0/0.0)"},"ast":"!_(\n math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n -1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n math.isFinite(\n _/_(\n -1~double,\n 0~double\n )~double^divide_double\n )~bool^math_isFinite_double\n)~bool^logical_not","type":"bool"},{"original":{"name":"dyn_error","expr":"math.isFinite(dyn(true))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.isFinite(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isFinite(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isFinite_double","type":"bool"}]},{"name":"bit_and","tests":[{"original":{"name":"int_int_non_intersect","expr":"math.bitAnd(1, 2)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1~int,\n 2~int\n)~int^math_bitAnd_int_int","type":"int"},{"original":{"name":"int_int_intersect","expr":"math.bitAnd(1, 3)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1~int,\n 3~int\n)~int^math_bitAnd_int_int","type":"int"},{"original":{"name":"int_int_intersect_neg","expr":"math.bitAnd(1, -1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1~int,\n -1~int\n)~int^math_bitAnd_int_int","type":"int"},{"original":{"name":"uint_uint_non_intersect","expr":"math.bitAnd(1u, 2u)","value":{"uint64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1u~uint,\n 2u~uint\n)~uint^math_bitAnd_uint_uint","type":"uint"},{"original":{"name":"uint_uint_intersect","expr":"math.bitAnd(1u, 3u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1u~uint,\n 3u~uint\n)~uint^math_bitAnd_uint_uint","type":"uint"},{"original":{"name":"int_dyn_error","expr":"math.bitAnd(2u, dyn(''))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 2u^#*expr.Constant_Uint64Value#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 2u~uint,\n dyn(\n \"\"~string\n )~dyn^to_dyn\n)~uint^math_bitAnd_uint_uint","type":"uint"}]},{"name":"bit_or","tests":[{"original":{"name":"int_int_positive","expr":"math.bitOr(1, 2)","value":{"int64Value":"3"}},"ast":"math^#*expr.Expr_IdentExpr#.bitOr(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitOr(\n 1~int,\n 2~int\n)~int^math_bitOr_int_int","type":"int"},{"original":{"name":"int_int_positive_negative","expr":"math.bitOr(4, -2)","value":{"int64Value":"-2"}},"ast":"math^#*expr.Expr_IdentExpr#.bitOr(\n 4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitOr(\n 4~int,\n -2~int\n)~int^math_bitOr_int_int","type":"int"},{"original":{"name":"uint_uint","expr":"math.bitOr(1u, 4u)","value":{"uint64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.bitOr(\n 1u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitOr(\n 1u~uint,\n 4u~uint\n)~uint^math_bitOr_uint_uint","type":"uint"},{"original":{"name":"dyn_int_error","expr":"math.bitOr(dyn(1.2), 1)","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitOr(\n dyn(\n 1.2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitOr(\n dyn(\n 1.2~double\n )~dyn^to_dyn,\n 1~int\n)~int^math_bitOr_int_int","type":"int"}]},{"name":"bit_xor","tests":[{"original":{"name":"int_int_positive","expr":"math.bitXor(1, 3)","value":{"int64Value":"2"}},"ast":"math^#*expr.Expr_IdentExpr#.bitXor(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitXor(\n 1~int,\n 3~int\n)~int^math_bitXor_int_int","type":"int"},{"original":{"name":"int_int_positive_negative","expr":"math.bitXor(4, -2)","value":{"int64Value":"-6"}},"ast":"math^#*expr.Expr_IdentExpr#.bitXor(\n 4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitXor(\n 4~int,\n -2~int\n)~int^math_bitXor_int_int","type":"int"},{"original":{"name":"uint_uint","expr":"math.bitXor(1u, 3u)","value":{"uint64Value":"2"}},"ast":"math^#*expr.Expr_IdentExpr#.bitXor(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitXor(\n 1u~uint,\n 3u~uint\n)~uint^math_bitXor_uint_uint","type":"uint"},{"original":{"name":"dyn_dyn_error","expr":"math.bitXor(dyn([]), dyn([1]))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitXor(\n dyn(\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitXor(\n dyn(\n []~list(dyn)\n )~dyn^to_dyn,\n dyn(\n [\n 1~int\n ]~list(int)\n )~dyn^to_dyn\n)~dyn^math_bitXor_int_int|math_bitXor_uint_uint","type":"dyn"}]},{"name":"bit_not","tests":[{"original":{"name":"int_positive","expr":"math.bitNot(1)","value":{"int64Value":"-2"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n 1~int\n)~int^math_bitNot_int_int","type":"int"},{"original":{"name":"int_negative","expr":"math.bitNot(-1)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n -1~int\n)~int^math_bitNot_int_int","type":"int"},{"original":{"name":"int_zero","expr":"math.bitNot(0)","value":{"int64Value":"-1"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n 0~int\n)~int^math_bitNot_int_int","type":"int"},{"original":{"name":"uint_positive","expr":"math.bitNot(1u)","value":{"uint64Value":"18446744073709551614"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n 1u~uint\n)~uint^math_bitNot_uint_uint","type":"uint"},{"original":{"name":"uint_zero","expr":"math.bitNot(0u)","value":{"uint64Value":"18446744073709551615"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n 0u~uint\n)~uint^math_bitNot_uint_uint","type":"uint"},{"original":{"name":"dyn_error","expr":"math.bitNot(dyn(''))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n dyn(\n \"\"~string\n )~dyn^to_dyn\n)~dyn^math_bitNot_int_int|math_bitNot_uint_uint","type":"dyn"}]},{"name":"bit_shift_left","tests":[{"original":{"name":"int","expr":"math.bitShiftLeft(1, 2)","value":{"int64Value":"4"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1~int,\n 2~int\n)~int^math_bitShiftLeft_int_int","type":"int"},{"original":{"name":"int_large_shift","expr":"math.bitShiftLeft(1, 200)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1^#*expr.Constant_Int64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1~int,\n 200~int\n)~int^math_bitShiftLeft_int_int","type":"int"},{"original":{"name":"int_negative_large_shift","expr":"math.bitShiftLeft(-1, 200)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n -1^#*expr.Constant_Int64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n -1~int,\n 200~int\n)~int^math_bitShiftLeft_int_int","type":"int"},{"original":{"name":"uint","expr":"math.bitShiftLeft(1u, 2)","value":{"uint64Value":"4"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1u~uint,\n 2~int\n)~uint^math_bitShiftLeft_uint_int","type":"uint"},{"original":{"name":"uint_large_shift","expr":"math.bitShiftLeft(1u, 200)","value":{"uint64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1u~uint,\n 200~int\n)~uint^math_bitShiftLeft_uint_int","type":"uint"},{"original":{"name":"bad_shift","expr":"math.bitShiftLeft(1u, -1)","evalError":{"errors":[{"message":"negative offset"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1u~uint,\n -1~int\n)~uint^math_bitShiftLeft_uint_int","type":"uint"},{"original":{"name":"dyn_int_error","expr":"math.bitShiftLeft(dyn(4.3), 1)","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n dyn(\n 4.3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n dyn(\n 4.3~double\n )~dyn^to_dyn,\n 1~int\n)~dyn^math_bitShiftLeft_int_int|math_bitShiftLeft_uint_int","type":"dyn"}]},{"name":"bit_shift_right","tests":[{"original":{"name":"int","expr":"math.bitShiftRight(1024, 2)","value":{"int64Value":"256"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1024~int,\n 2~int\n)~int^math_bitShiftRight_int_int","type":"int"},{"original":{"name":"int_large_shift","expr":"math.bitShiftRight(1024, 64)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024^#*expr.Constant_Int64Value#,\n 64^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1024~int,\n 64~int\n)~int^math_bitShiftRight_int_int","type":"int"},{"original":{"name":"int_negative","expr":"math.bitShiftRight(-1024, 3)","value":{"int64Value":"2305843009213693824"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n -1024^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n -1024~int,\n 3~int\n)~int^math_bitShiftRight_int_int","type":"int"},{"original":{"name":"int_negative_large_shift","expr":"math.bitShiftRight(-1024, 64)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n -1024^#*expr.Constant_Int64Value#,\n 64^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n -1024~int,\n 64~int\n)~int^math_bitShiftRight_int_int","type":"int"},{"original":{"name":"uint","expr":"math.bitShiftRight(1024u, 2)","value":{"uint64Value":"256"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1024u~uint,\n 2~int\n)~uint^math_bitShiftRight_uint_int","type":"uint"},{"original":{"name":"uint_large_shift","expr":"math.bitShiftRight(1024u, 200)","value":{"uint64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024u^#*expr.Constant_Uint64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1024u~uint,\n 200~int\n)~uint^math_bitShiftRight_uint_int","type":"uint"},{"original":{"name":"bad_shift","expr":"math.bitShiftRight(1u, -1)","evalError":{"errors":[{"message":"negative offset"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1u^#*expr.Constant_Uint64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1u~uint,\n -1~int\n)~uint^math_bitShiftRight_uint_int","type":"uint"},{"original":{"name":"dyn_int_error","expr":"math.bitShiftRight(dyn(b'123'), 1)","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n dyn(\n b\"123\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n dyn(\n b\"123\"~bytes\n )~dyn^to_dyn,\n 1~int\n)~dyn^math_bitShiftRight_int_int|math_bitShiftRight_uint_int","type":"dyn"}]}]},{"name":"namespace","suites":[{"name":"qualified","tests":[{"original":{"name":"self_eval_qualified_lookup","expr":"x.y","typeEnv":[{"name":"x.y","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"x.y":{"value":{"boolValue":true}}},"value":{"boolValue":true}},"ast":"x^#*expr.Expr_IdentExpr#.y^#*expr.Expr_SelectExpr#","checkedAst":"x.y~bool^x.y","type":"bool"}]},{"name":"namespace","tests":[{"original":{"name":"self_eval_container_lookup","expr":"y","typeEnv":[{"name":"x.y","ident":{"type":{"primitive":"BOOL"}}},{"name":"y","ident":{"type":{"primitive":"STRING"}}}],"container":"x","bindings":{"x.y":{"value":{"boolValue":true}},"y":{"value":{"stringValue":"false"}}},"value":{"boolValue":true}},"ast":"y^#*expr.Expr_IdentExpr#","checkedAst":"x.y~bool^x.y","type":"bool"},{"original":{"name":"self_eval_container_lookup_unchecked","expr":"y","disableCheck":true,"typeEnv":[{"name":"x.y","ident":{"type":{"primitive":"BOOL"}}},{"name":"y","ident":{"type":{"primitive":"BOOL"}}}],"container":"x","bindings":{"x.y":{"value":{"boolValue":true}},"y":{"value":{"boolValue":false}}},"value":{"boolValue":true}},"ast":"y^#*expr.Expr_IdentExpr#","checkedAst":"x.y~bool^x.y","type":"bool"}]}]},{"name":"optionals","suites":[{"name":"optionals","tests":[{"original":{"name":"null","expr":"optional.of(null).hasValue()","value":{"boolValue":true}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#","checkedAst":"optional.of(\n null~null\n)~optional_type(null)^optional_of.hasValue()~bool^optional_hasValue","type":"bool"},{"original":{"name":"null_non_zero_value","expr":"optional.ofNonZeroValue(null).hasValue()","value":{"boolValue":false}},"ast":"optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#","checkedAst":"optional.ofNonZeroValue(\n null~null\n)~optional_type(null)^optional_ofNonZeroValue.hasValue()~bool^optional_hasValue","type":"bool"},{"original":{"name":"none_or_none_or_value","expr":"optional.none().or(optional.none()).orValue(42)","value":{"int64Value":"42"}},"ast":"optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.none()~optional_type(int)^optional_none.or(\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^optional_or_optional.orValue(\n 42~int\n)~int^optional_orValue_value","type":"int"},{"original":{"name":"none_optMap_hasValue","expr":"optional.none().optMap(y, y + 1).hasValue()","value":{"boolValue":false}},"ast":"optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#.optMap(\n y^#*expr.Expr_IdentExpr#,\n _+_(\n y^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n optional.none()~optional_type(dyn)^optional_none.hasValue()~bool^optional_hasValue,\n optional.of(\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n y,\n // Init\n optional.none()~optional_type(int)^optional_none.value()~int^optional_value,\n // LoopCondition\n false~bool,\n // LoopStep\n y~int^y,\n // Result\n _+_(\n y~int^y,\n 1~int\n )~int^add_int64)~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^conditional.hasValue()~bool^optional_hasValue","type":"bool"},{"original":{"name":"empty_map_optFlatMap_hasValue","expr":"{}.?key.optFlatMap(k, k.?subkey).hasValue()","value":{"boolValue":false}},"error":"ERROR: empty_map_optFlatMap_hasValue:1:3: unsupported syntax '.?'\n | {}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ..^\nERROR: empty_map_optFlatMap_hasValue:1:24: unsupported syntax '.?'\n | {}.?key.optFlatMap(k, k.?subkey).hasValue()\n | .......................^"},{"original":{"name":"map_empty_submap_optFlatMap_hasValue","expr":"{'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()","value":{"boolValue":false}},"error":"ERROR: map_empty_submap_optFlatMap_hasValue:1:12: unsupported syntax '.?'\n | {'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ...........^\nERROR: map_empty_submap_optFlatMap_hasValue:1:33: unsupported syntax '.?'\n | {'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ................................^"},{"original":{"name":"map_null_entry_hasValue","expr":"{'null_key': dyn(null)}.?null_key.hasValue()","value":{"boolValue":true}},"error":"ERROR: map_null_entry_hasValue:1:24: unsupported syntax '.?'\n | {'null_key': dyn(null)}.?null_key.hasValue()\n | .......................^"},{"original":{"name":"map_null_entry_no_such_key","expr":"{'null_key': dyn(null)}.?null_key.invalid.hasValue()","evalError":{"errors":[{"message":"no such key"}]}},"error":"ERROR: map_null_entry_no_such_key:1:24: unsupported syntax '.?'\n | {'null_key': dyn(null)}.?null_key.invalid.hasValue()\n | .......................^"},{"original":{"name":"map_absent_key_absent_field_none","expr":"{true: dyn(0)}[?false].absent.hasValue()","value":{"boolValue":false}},"error":"ERROR: map_absent_key_absent_field_none:1:15: unsupported syntax '[?'\n | {true: dyn(0)}[?false].absent.hasValue()\n | ..............^"},{"original":{"name":"map_present_key_invalid_field","expr":"{true: dyn(0)}[?true].absent.hasValue()","evalError":{"errors":[{"message":"no such key"}]}},"error":"ERROR: map_present_key_invalid_field:1:15: unsupported syntax '[?'\n | {true: dyn(0)}[?true].absent.hasValue()\n | ..............^"},{"original":{"name":"map_undefined_entry_hasValue","expr":"{}.?null_key.invalid.hasValue()","value":{"boolValue":false}},"error":"ERROR: map_undefined_entry_hasValue:1:3: unsupported syntax '.?'\n | {}.?null_key.invalid.hasValue()\n | ..^"},{"original":{"name":"map_submap_subkey_optFlatMap_value","expr":"{'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()","value":{"stringValue":"subvalue"}},"error":"ERROR: map_submap_subkey_optFlatMap_value:1:32: unsupported syntax '.?'\n | {'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()\n | ...............................^\nERROR: map_submap_subkey_optFlatMap_value:1:53: unsupported syntax '.?'\n | {'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()\n | ....................................................^"},{"original":{"name":"map_submap_optFlatMap_value","expr":"{'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()","value":{"stringValue":""}},"error":"ERROR: map_submap_optFlatMap_value:1:24: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()\n | .......................^\nERROR: map_submap_optFlatMap_value:1:45: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()\n | ............................................^"},{"original":{"name":"map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue","expr":"{'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()","value":{"boolValue":false}},"error":"ERROR: map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue:1:24: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()\n | .......................^"},{"original":{"name":"optional_of_optMap_value","expr":"optional.of(42).optMap(y, y + 1).value()","value":{"int64Value":"43"}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.optMap(\n y^#*expr.Expr_IdentExpr#,\n _+_(\n y^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.value()^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n optional.of(\n 42~int\n )~optional_type(int)^optional_of.hasValue()~bool^optional_hasValue,\n optional.of(\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n y,\n // Init\n optional.of(\n 42~int\n )~optional_type(int)^optional_of.value()~int^optional_value,\n // LoopCondition\n false~bool,\n // LoopStep\n y~int^y,\n // Result\n _+_(\n y~int^y,\n 1~int\n )~int^add_int64)~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^conditional.value()~int^optional_value","type":"int"},{"original":{"name":"optional_ofNonZeroValue_or_optional_value","expr":"optional.ofNonZeroValue(42).or(optional.of(20)).value() == 42","value":{"boolValue":true}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n 42^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.of(\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#.value()^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.ofNonZeroValue(\n 42~int\n )~optional_type(int)^optional_ofNonZeroValue.or(\n optional.of(\n 20~int\n )~optional_type(int)^optional_of\n )~optional_type(int)^optional_or_optional.value()~int^optional_value,\n 42~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_optional_hasValue","expr":"(has({}.x) ? optional.of({}.x) : optional.none()).hasValue()","value":{"boolValue":false}},"ast":"_?_:_(\n {}^#*expr.Expr_StructExpr#.x~test-only~^#*expr.Expr_SelectExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n {}^#*expr.Expr_StructExpr#.x^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n {}~map(dyn, dyn).x~test-only~~bool,\n optional.of(\n {}~map(dyn, dyn).x~dyn\n )~optional_type(dyn)^optional_of,\n optional.none()~optional_type(dyn)^optional_none\n)~optional_type(dyn)^conditional.hasValue()~bool^optional_hasValue","type":"bool"},{"original":{"name":"map_optindex_hasValue","expr":"{}.?x.hasValue()","value":{"boolValue":false}},"error":"ERROR: map_optindex_hasValue:1:3: unsupported syntax '.?'\n | {}.?x.hasValue()\n | ..^"},{"original":{"name":"has_map_optindex","expr":"has({}.?x.y)","value":{"boolValue":false}},"error":"ERROR: has_map_optindex:1:7: unsupported syntax '.?'\n | has({}.?x.y)\n | ......^"},{"original":{"name":"has_map_optindex_field","expr":"has({'x': {'y': 'z'}}.?x.y)","value":{"boolValue":true}},"error":"ERROR: has_map_optindex_field:1:22: unsupported syntax '.?'\n | has({'x': {'y': 'z'}}.?x.y)\n | .....................^"},{"original":{"name":"type","expr":"type(optional.none()) == optional_type","value":{"boolValue":true}},"ast":"_==_(\n type(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional_type^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n optional.none()~optional_type(dyn)^optional_none\n )~type(optional_type(dyn))^type,\n optional_type~type(optional_type)^optional_type\n)~bool^equals","type":"bool"},{"original":{"name":"optional_chaining_1","expr":"optional.ofNonZeroValue('').or(optional.of({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])).orValue('default value')","value":{"stringValue":"goodbye"}},"ast":"optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.of(\n _[_](\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"dashed-index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.c^#*expr.Expr_SelectExpr#,\n \"dashed-index\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.ofNonZeroValue(\n \"\"~string\n)~optional_type(string)^optional_ofNonZeroValue.or(\n optional.of(\n _[_](\n {\n \"c\"~string:{\n \"dashed-index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string)).c~map(string, string),\n \"dashed-index\"~string\n )~string^index_map\n )~optional_type(string)^optional_of\n)~optional_type(string)^optional_or_optional.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_2","expr":"{'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')","value":{"stringValue":"goodbye"}},"error":"ERROR: optional_chaining_2:1:37: unsupported syntax '[?'\n | {'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')\n | ....................................^"},{"original":{"name":"optional_chaining_3","expr":"{'c': {}}.c[?'missing-index'].orValue('default value')","value":{"stringValue":"default value"}},"error":"ERROR: optional_chaining_3:1:12: unsupported syntax '[?'\n | {'c': {}}.c[?'missing-index'].orValue('default value')\n | ...........^"},{"original":{"name":"optional_chaining_4","expr":"optional.of({'c': {'index': 'goodbye'}}).c.index.orValue('default value')","value":{"stringValue":"goodbye"}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.index^#*expr.Expr_SelectExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.of(\n {\n \"c\"~string:{\n \"index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string))\n)~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)).index~optional_type(string).orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_5","expr":"optional.of({'c': {}}).c.missing.or(optional.none()[0]).orValue('default value')","value":{"stringValue":"default value"}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing^#*expr.Expr_SelectExpr#.or(\n _[_](\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.of(\n {\n \"c\"~string:{}~map(dyn, string)\n }~map(string, map(dyn, string))\n)~optional_type(map(string, map(dyn, string)))^optional_of.c~optional_type(map(dyn, string)).missing~optional_type(string).or(\n _[_](\n optional.none()~optional_type(list(string))^optional_none,\n 0~int\n )~optional_type(string)^optional_list_index_int\n)~optional_type(string)^optional_or_optional.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_6","expr":"optional.of({'c': {}}).c.missing.or(optional.of(['list-value'])[0]).orValue('default value')","value":{"stringValue":"list-value"}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing^#*expr.Expr_SelectExpr#.or(\n _[_](\n optional^#*expr.Expr_IdentExpr#.of(\n [\n \"list-value\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.of(\n {\n \"c\"~string:{}~map(dyn, string)\n }~map(string, map(dyn, string))\n)~optional_type(map(string, map(dyn, string)))^optional_of.c~optional_type(map(dyn, string)).missing~optional_type(string).or(\n _[_](\n optional.of(\n [\n \"list-value\"~string\n ]~list(string)\n )~optional_type(list(string))^optional_of,\n 0~int\n )~optional_type(string)^optional_list_index_int\n)~optional_type(string)^optional_or_optional.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_7","expr":"optional.of({'c': {'index': 'goodbye'}}).c['index'].orValue('default value')","value":{"stringValue":"goodbye"}},"ast":"_[_](\n optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#,\n \"index\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n optional.of(\n {\n \"c\"~string:{\n \"index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)),\n \"index\"~string\n)~optional_type(string)^optional_map_index_value.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_8","expr":"optional.of({'c': {}}).c['missing'].orValue('default value')","value":{"stringValue":"default value"}},"ast":"_[_](\n optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#,\n \"missing\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n optional.of(\n {\n \"c\"~string:{}~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)),\n \"missing\"~string\n)~optional_type(string)^optional_map_index_value.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_9","expr":"has(optional.of({'c': {'entry': 'hello world'}}).c) \u0026\u0026 !has(optional.of({'c': {'entry': 'hello world'}}).c.missing)","value":{"boolValue":true}},"ast":"_\u0026\u0026_(\n optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"entry\"^#*expr.Constant_StringValue#:\"hello world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c~test-only~^#*expr.Expr_SelectExpr#,\n !_(\n optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"entry\"^#*expr.Constant_StringValue#:\"hello world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing~test-only~^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n optional.of(\n {\n \"c\"~string:{\n \"entry\"~string:\"hello world\"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~test-only~~bool,\n !_(\n optional.of(\n {\n \"c\"~string:{\n \"entry\"~string:\"hello world\"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)).missing~test-only~~bool\n )~bool^logical_not\n)~bool^logical_and","type":"bool"},{"original":{"name":"optional_chaining_10","expr":"optional.ofNonZeroValue({'c': {'dashed-index': 'goodbye'}}.a.z).orValue({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])","evalError":{"errors":[{"message":"no such key"}]}},"ast":"optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"dashed-index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.a^#*expr.Expr_SelectExpr#.z^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n _[_](\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"dashed-index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.c^#*expr.Expr_SelectExpr#,\n \"dashed-index\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.ofNonZeroValue(\n {\n \"c\"~string:{\n \"dashed-index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string)).a~map(string, string).z~string\n)~optional_type(string)^optional_ofNonZeroValue.orValue(\n _[_](\n {\n \"c\"~string:{\n \"dashed-index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string)).c~map(string, string),\n \"dashed-index\"~string\n )~string^index_map\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_11","expr":"{'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()","value":{"int64Value":"7"}},"error":"ERROR: optional_chaining_11:1:35: unsupported syntax '.?'\n | {'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()\n | ..................................^\nERROR: optional_chaining_11:1:84: unsupported syntax '.?'\n | {'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()\n | ...................................................................................^"},{"original":{"name":"optional_chaining_12","expr":"{?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}","value":{"mapValue":{"entries":[{"key":{"stringValue":"nested_map"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"map"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"dashed-index"},"value":{"stringValue":"goodbye"}}]}}}]}}}]}}},"error":"ERROR: optional_chaining_12:1:2: unsupported syntax '?'\n | {?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}\n | .^"},{"original":{"name":"optional_chaining_13","expr":"{?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}","value":{"mapValue":{"entries":[{"key":{"stringValue":"singleton"},"value":{"boolValue":true}}]}}},"error":"ERROR: optional_chaining_13:1:2: unsupported syntax '?'\n | {?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}\n | .^"},{"original":{"name":"optional_chaining_14","expr":"[?{}.?c, ?optional.of(42), ?optional.none()]","value":{"listValue":{"values":[{"int64Value":"42"}]}}},"error":"ERROR: optional_chaining_14:1:2: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | .^\nERROR: optional_chaining_14:1:5: unsupported syntax '.?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | ....^\nERROR: optional_chaining_14:1:10: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | .........^\nERROR: optional_chaining_14:1:28: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | ...........................^"},{"original":{"name":"optional_chaining_15","expr":"[?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]","value":{"listValue":{}}},"error":"ERROR: optional_chaining_15:1:2: unsupported syntax '?'\n | [?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]\n | .^\nERROR: optional_chaining_15:1:36: unsupported syntax '.?'\n | [?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]\n | ...................................^"},{"original":{"name":"optional_chaining_16","expr":"optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_chaining_16:1:26: unsupported syntax '?'\n | optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()\n | .........................^"},{"original":{"name":"has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field","expr":"has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field:1:18: unsupported syntax '?'\n | has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)\n | .................^"},{"original":{"name":"optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field","expr":"optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field:1:38: unsupported syntax '?'\n | optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()\n | .....................................^"},{"original":{"name":"struct_map_optindex_field","expr":"TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"error":"ERROR: struct_map_optindex_field:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string\n | .............^"},{"original":{"name":"struct_optional_ofNonZeroValue_map_optindex_field","expr":"TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"error":"ERROR: struct_optional_ofNonZeroValue_map_optindex_field:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string\n | .............^"},{"original":{"name":"struct_map_optindex_field_nested","expr":"TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string","container":"cel.expr.conformance.proto2","value":{"mapValue":{"entries":[{"key":{"stringValue":"hello"},"value":{"stringValue":"world"}}]}}},"error":"ERROR: struct_map_optindex_field_nested:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string\n | .............^"},{"original":{"name":"struct_list_optindex_field","expr":"TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"stringValue":"greetings"},{"stringValue":"world"}]}}},"error":"ERROR: struct_list_optindex_field:1:45: unsupported syntax '?'\n | TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string\n | ............................................^\nERROR: struct_list_optindex_field:1:83: unsupported syntax '.?'\n | TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string\n | ..................................................................................^"},{"original":{"name":"optional_empty_map_optindex_hasValue","expr":"optional.of({}).?c.hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_empty_map_optindex_hasValue:1:16: unsupported syntax '.?'\n | optional.of({}).?c.hasValue()\n | ...............^"},{"original":{"name":"empty_struct_optindex_hasValue","expr":"TestAllTypes{}.?repeated_string.hasValue()","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: empty_struct_optindex_hasValue:1:15: unsupported syntax '.?'\n | TestAllTypes{}.?repeated_string.hasValue()\n | ..............^"},{"original":{"name":"optional_empty_struct_optindex_hasValue","expr":"optional.of(TestAllTypes{}).?repeated_string.hasValue()","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: optional_empty_struct_optindex_hasValue:1:28: unsupported syntax '.?'\n | optional.of(TestAllTypes{}).?repeated_string.hasValue()\n | ...........................^"},{"original":{"name":"optional_none_optselect_hasValue","expr":"optional.none().?repeated_string.hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_none_optselect_hasValue:1:16: unsupported syntax '.?'\n | optional.none().?repeated_string.hasValue()\n | ...............^"},{"original":{"name":"struct_optindex_value","expr":"TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"stringValue":"foo"}]}}},"error":"ERROR: struct_optindex_value:1:39: unsupported syntax '.?'\n | TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()\n | ......................................^"},{"original":{"name":"optional_struct_optindex_value","expr":"optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"stringValue":"foo"}]}}},"error":"ERROR: optional_struct_optindex_value:1:52: unsupported syntax '.?'\n | optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()\n | ...................................................^"},{"original":{"name":"optional_struct_optindex_index_value","expr":"optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()","container":"cel.expr.conformance.proto2","value":{"stringValue":"foo"}},"error":"ERROR: optional_struct_optindex_index_value:1:52: unsupported syntax '.?'\n | optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()\n | ...................................................^"},{"original":{"name":"empty_list_optindex_hasValue","expr":"[][?0].hasValue()","value":{"boolValue":false}},"error":"ERROR: empty_list_optindex_hasValue:1:3: unsupported syntax '[?'\n | [][?0].hasValue()\n | ..^"},{"original":{"name":"optional_empty_list_optindex_hasValue","expr":"optional.of([])[?0].hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_empty_list_optindex_hasValue:1:16: unsupported syntax '[?'\n | optional.of([])[?0].hasValue()\n | ...............^"},{"original":{"name":"optional_none_optindex_hasValue","expr":"optional.none()[?0].hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_none_optindex_hasValue:1:16: unsupported syntax '[?'\n | optional.none()[?0].hasValue()\n | ...............^"},{"original":{"name":"list_optindex_value","expr":"['foo'][?0].value()","value":{"stringValue":"foo"}},"error":"ERROR: list_optindex_value:1:8: unsupported syntax '[?'\n | ['foo'][?0].value()\n | .......^"},{"original":{"name":"optional_list_optindex_value","expr":"optional.of(['foo'])[?0].value()","value":{"stringValue":"foo"}},"error":"ERROR: optional_list_optindex_value:1:21: unsupported syntax '[?'\n | optional.of(['foo'])[?0].value()\n | ....................^"},{"original":{"name":"map_key_mixed_type_optindex_value","expr":"{true: 1, 2: 2, 5u: 3}[?true].value()","value":{"int64Value":"1"}},"error":"ERROR: map_key_mixed_type_optindex_value:1:23: unsupported syntax '[?'\n | {true: 1, 2: 2, 5u: 3}[?true].value()\n | ......................^"},{"original":{"name":"map_key_mixed_numbers_double_key_optindex_value","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()","value":{"doubleValue":3}},"error":"ERROR: map_key_mixed_numbers_double_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()\n | ..........................^"},{"original":{"name":"map_key_mixed_numbers_uint_key_optindex_value","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()","value":{"doubleValue":2}},"error":"ERROR: map_key_mixed_numbers_uint_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()\n | ..........................^"},{"original":{"name":"map_key_mixed_numbers_int_key_optindex_value","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()","value":{"doubleValue":1}},"error":"ERROR: map_key_mixed_numbers_int_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()\n | ..........................^"},{"original":{"name":"optional_eq_none_none","expr":"optional.none() == optional.none()","value":{"boolValue":true}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.none()~optional_type(dyn)^optional_none,\n optional.none()~optional_type(dyn)^optional_none\n)~bool^equals","type":"bool"},{"original":{"name":"optional_eq_none_int","expr":"optional.none() == optional.of(1)","value":{"boolValue":false}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^equals","type":"bool"},{"original":{"name":"optional_eq_int_none","expr":"optional.of(1) == optional.none()","value":{"boolValue":false}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~bool^equals","type":"bool"},{"original":{"name":"optional_eq_int_int","expr":"optional.of(1) == optional.of(1)","value":{"boolValue":true}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^equals","type":"bool"},{"original":{"name":"optional_ne_none_none","expr":"optional.none() != optional.none()","value":{"boolValue":false}},"ast":"_!=_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n optional.none()~optional_type(dyn)^optional_none,\n optional.none()~optional_type(dyn)^optional_none\n)~bool^not_equals","type":"bool"},{"original":{"name":"optional_ne_none_int","expr":"optional.none() != optional.of(1)","value":{"boolValue":true}},"ast":"_!=_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^not_equals","type":"bool"},{"original":{"name":"optional_ne_int_none","expr":"optional.of(1) != optional.none()","value":{"boolValue":true}},"ast":"_!=_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~bool^not_equals","type":"bool"},{"original":{"name":"optional_ne_int_int","expr":"optional.of(1) != optional.of(1)","value":{"boolValue":false}},"ast":"_!=_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^not_equals","type":"bool"},{"original":{"name":"map_optional_has","expr":"has({'foo': optional.none()}.foo)","value":{"boolValue":true}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.foo~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"foo\"~string:optional.none()~optional_type(dyn)^optional_none\n}~map(string, optional_type(dyn)).foo~test-only~~bool","type":"bool"},{"original":{"name":"map_optional_select_has","expr":"has({'foo': optional.none()}.foo.bar)","value":{"boolValue":false}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.foo^#*expr.Expr_SelectExpr#.bar~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"foo\"~string:optional.none()~optional_type(dyn)^optional_none\n}~map(string, optional_type(dyn)).foo~optional_type(dyn).bar~test-only~~bool","type":"bool"},{"original":{"name":"map_optional_entry_has","expr":"has({?'foo': optional.none()}.foo)","value":{"boolValue":false}},"error":"ERROR: map_optional_entry_has:1:6: unsupported syntax '?'\n | has({?'foo': optional.none()}.foo)\n | .....^"}]}]},{"name":"parse","suites":[{"name":"nest","tests":[{"original":{"name":"list_index","description":"Member = Member '[' Expr ']'. Nested indices are supported up to 12 times.","expr":"a[a[a[a[a[a[a[a[a[a[a[a[0]]]]]]]]]]]]","typeEnv":[{"name":"a","ident":{"type":{"listType":{"elemType":{"primitive":"INT64"}}}}}],"bindings":{"a":{"value":{"listValue":{"values":[{"int64Value":"0"}]}}}},"value":{"int64Value":"0"}},"ast":"_[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n 0~int\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n)~int^index_list","type":"int"},{"original":{"name":"message_literal","description":"Member = Member '{' [FieldInits] '}'. Nested messages supported up to 12 levels deep.","expr":"NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{payload: TestAllTypes{single_int64: 137}}}}}}}}}}}}.payload.single_int64","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n payload:TestAllTypes{\n single_int64:137^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.payload^#*expr.Expr_SelectExpr#.single_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n payload:cel.expr.conformance.proto3.TestAllTypes{\n single_int64:137~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n}~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes.payload~cel.expr.conformance.proto3.TestAllTypes.single_int64~int","type":"int"},{"original":{"name":"funcall","description":"Primary = ['.'] IDENT ['(' [ExprList] ')']. Nested function calls supported up to 12 levels deep.","expr":"int(uint(int(uint(int(uint(int(uint(int(uint(int(uint(7))))))))))))","value":{"int64Value":"7"}},"ast":"int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n 7~int\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"list_literal","description":"Primary = '[' [ExprList] ']'. Nested list literals up to 12 levels deep.","expr":"size([[[[[[[[[[[[0]]]]]]]]]]]])","value":{"int64Value":"1"}},"ast":"size(\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n 0~int\n ]~list(int)\n ]~list(list(int))\n ]~list(list(list(int)))\n ]~list(list(list(list(int))))\n ]~list(list(list(list(list(int)))))\n ]~list(list(list(list(list(list(int))))))\n ]~list(list(list(list(list(list(list(int)))))))\n ]~list(list(list(list(list(list(list(list(int))))))))\n ]~list(list(list(list(list(list(list(list(list(int)))))))))\n ]~list(list(list(list(list(list(list(list(list(list(int))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(int)))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(list(int))))))))))))\n)~int^size_list","type":"int"},{"original":{"name":"map_literal","description":"Primary = '{' [MapInits] '}'. Nested map literals up to 12 levels deep.","expr":"size({0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: 'foo'}}}}}}}}}}}})","value":{"int64Value":"1"}},"ast":"size(\n {\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n {\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:\"foo\"~string\n }~map(int, string)\n }~map(int, map(int, string))\n }~map(int, map(int, map(int, string)))\n }~map(int, map(int, map(int, map(int, string))))\n }~map(int, map(int, map(int, map(int, map(int, string)))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, string))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))))))\n)~int^size_map","type":"int"},{"original":{"name":"parens","description":"Primary = '(' Expr ')'","expr":"((((((((((((((((((((((((((((((((7))))))))))))))))))))))))))))))))","value":{"int64Value":"7"}},"error":"ERROR: parens:-1:0: expression recursion limit exceeded: 32"}]},{"name":"repeat","tests":[{"original":{"name":"conditional","description":"Expr = ConditionalOr ['?' ConditionalOr ':' Expr]. Chained ternary operators up to 24 levels.","expr":"true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : false","value":{"boolValue":true}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n false~bool\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n)~bool^conditional","type":"bool"},{"original":{"name":"or","description":"ConditionalOr = [ConditionalOr '||'] ConditionalAnd. Logical OR statements with 32 conditions.","expr":"false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || true","value":{"boolValue":true}},"ast":"_||_(\n _||_(\n _||_(\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n _||_(\n _||_(\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n true~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n)~bool^logical_or","type":"bool"},{"original":{"name":"and","description":"ConditionalAnd = [ConditionalAnd '\u0026\u0026'] Relation. Logical AND statements with 32 conditions.","expr":"true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n false~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n)~bool^logical_and","type":"bool"},{"original":{"name":"add_sub","description":"Addition = [Addition ('+' | '-')] Multiplication. Addition operators are supported up to 24 times consecutively.","expr":"3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3","value":{"int64Value":"3"}},"ast":"_+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n 3^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n 3~int,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n)~int^add_int64","type":"int"},{"original":{"name":"mul_div","description":"Multiplication = [Multiplication ('*' | '/' | '%')] Unary. Multiplication operators are supported up to 24 times consecutively.","expr":"4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4","value":{"int64Value":"4"}},"ast":"_/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n 4^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n 4~int,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n)~int^divide_int64","type":"int"},{"original":{"name":"not","description":"Unary = '!' {'!'} Member","expr":"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!true","value":{"boolValue":true}},"ast":"true^#*expr.Constant_BoolValue#","checkedAst":"true~bool","type":"bool"},{"original":{"name":"unary_neg","description":"Unary = '-' {'-'} Member","expr":"--------------------------------19","value":{"int64Value":"19"}},"ast":"19^#*expr.Constant_Int64Value#","checkedAst":"19~int","type":"int"},{"original":{"name":"select","description":"Member = Member '.' IDENT ['(' [ExprList] ')']. Selection is supported up to 12 times consecutively.","expr":"NestedTestAllTypes{}.child.child.child.child.child.child.child.child.child.child.payload.single_int32","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"NestedTestAllTypes{}^#*expr.Expr_StructExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.payload^#*expr.Expr_SelectExpr#.single_int32^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.NestedTestAllTypes{}~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.payload~cel.expr.conformance.proto3.TestAllTypes.single_int32~int","type":"int"},{"original":{"name":"index","description":"Member = Member '[' Expr ']'. Indexing is supported up to 12 times consecutively.","expr":"[[[[[[[[[[[['foo']]]]]]]]]]]][0][0][0][0][0][0][0][0][0][0][0][0]","value":{"stringValue":"foo"}},"ast":"_[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n \"foo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n \"foo\"~string\n ]~list(string)\n ]~list(list(string))\n ]~list(list(list(string)))\n ]~list(list(list(list(string))))\n ]~list(list(list(list(list(string)))))\n ]~list(list(list(list(list(list(string))))))\n ]~list(list(list(list(list(list(list(string)))))))\n ]~list(list(list(list(list(list(list(list(string))))))))\n ]~list(list(list(list(list(list(list(list(list(string)))))))))\n ]~list(list(list(list(list(list(list(list(list(list(string))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(string)))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(list(string)))))))))))),\n 0~int\n )~list(list(list(list(list(list(list(list(list(list(list(string)))))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(list(list(string))))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(list(string)))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(string))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(string)))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(string))))))^index_list,\n 0~int\n )~list(list(list(list(list(string)))))^index_list,\n 0~int\n )~list(list(list(list(string))))^index_list,\n 0~int\n )~list(list(list(string)))^index_list,\n 0~int\n )~list(list(string))^index_list,\n 0~int\n )~list(string)^index_list,\n 0~int\n)~string^index_list","type":"string"},{"original":{"name":"list_literal","description":"Primary = '[' [ExprList] ']'. List literals with up to 32 elements.","expr":"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31][17]","value":{"int64Value":"17"}},"ast":"_[_](\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#,\n 10^#*expr.Constant_Int64Value#,\n 11^#*expr.Constant_Int64Value#,\n 12^#*expr.Constant_Int64Value#,\n 13^#*expr.Constant_Int64Value#,\n 14^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#,\n 16^#*expr.Constant_Int64Value#,\n 17^#*expr.Constant_Int64Value#,\n 18^#*expr.Constant_Int64Value#,\n 19^#*expr.Constant_Int64Value#,\n 20^#*expr.Constant_Int64Value#,\n 21^#*expr.Constant_Int64Value#,\n 22^#*expr.Constant_Int64Value#,\n 23^#*expr.Constant_Int64Value#,\n 24^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#,\n 26^#*expr.Constant_Int64Value#,\n 27^#*expr.Constant_Int64Value#,\n 28^#*expr.Constant_Int64Value#,\n 29^#*expr.Constant_Int64Value#,\n 30^#*expr.Constant_Int64Value#,\n 31^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int,\n 5~int,\n 6~int,\n 7~int,\n 8~int,\n 9~int,\n 10~int,\n 11~int,\n 12~int,\n 13~int,\n 14~int,\n 15~int,\n 16~int,\n 17~int,\n 18~int,\n 19~int,\n 20~int,\n 21~int,\n 22~int,\n 23~int,\n 24~int,\n 25~int,\n 26~int,\n 27~int,\n 28~int,\n 29~int,\n 30~int,\n 31~int\n ]~list(int),\n 17~int\n)~int^index_list","type":"int"},{"original":{"name":"map_literal","description":"Primary = '{' [MapInits] '}'. Map literals with up to 32 entries.","expr":"{0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 21: 'twenty-one', 22: 'twenty-two', 23: 'twenty-three', 24: 'twenty-four', 25: 'twenty-five', 26: 'twenty-six', 27: 'twenty-seven', 28: 'twenty-eight', 29: 'twenty-nine', 30: 'thirty', 31: 'thirty-one'}[17]","value":{"stringValue":"seventeen"}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:\"zero\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:\"one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:\"two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:\"three\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 4^#*expr.Constant_Int64Value#:\"four\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:\"five\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 6^#*expr.Constant_Int64Value#:\"six\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:\"seven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:\"eight\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 9^#*expr.Constant_Int64Value#:\"nine\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 10^#*expr.Constant_Int64Value#:\"ten\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 11^#*expr.Constant_Int64Value#:\"eleven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 12^#*expr.Constant_Int64Value#:\"twelve\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 13^#*expr.Constant_Int64Value#:\"thirteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 14^#*expr.Constant_Int64Value#:\"fourteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 15^#*expr.Constant_Int64Value#:\"fifteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 16^#*expr.Constant_Int64Value#:\"sixteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 17^#*expr.Constant_Int64Value#:\"seventeen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 18^#*expr.Constant_Int64Value#:\"eighteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 19^#*expr.Constant_Int64Value#:\"nineteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 20^#*expr.Constant_Int64Value#:\"twenty\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 21^#*expr.Constant_Int64Value#:\"twenty-one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 22^#*expr.Constant_Int64Value#:\"twenty-two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 23^#*expr.Constant_Int64Value#:\"twenty-three\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 24^#*expr.Constant_Int64Value#:\"twenty-four\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 25^#*expr.Constant_Int64Value#:\"twenty-five\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 26^#*expr.Constant_Int64Value#:\"twenty-six\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 27^#*expr.Constant_Int64Value#:\"twenty-seven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 28^#*expr.Constant_Int64Value#:\"twenty-eight\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 29^#*expr.Constant_Int64Value#:\"twenty-nine\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 30^#*expr.Constant_Int64Value#:\"thirty\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 31^#*expr.Constant_Int64Value#:\"thirty-one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:\"zero\"~string,\n 1~int:\"one\"~string,\n 2~int:\"two\"~string,\n 3~int:\"three\"~string,\n 4~int:\"four\"~string,\n 5~int:\"five\"~string,\n 6~int:\"six\"~string,\n 7~int:\"seven\"~string,\n 8~int:\"eight\"~string,\n 9~int:\"nine\"~string,\n 10~int:\"ten\"~string,\n 11~int:\"eleven\"~string,\n 12~int:\"twelve\"~string,\n 13~int:\"thirteen\"~string,\n 14~int:\"fourteen\"~string,\n 15~int:\"fifteen\"~string,\n 16~int:\"sixteen\"~string,\n 17~int:\"seventeen\"~string,\n 18~int:\"eighteen\"~string,\n 19~int:\"nineteen\"~string,\n 20~int:\"twenty\"~string,\n 21~int:\"twenty-one\"~string,\n 22~int:\"twenty-two\"~string,\n 23~int:\"twenty-three\"~string,\n 24~int:\"twenty-four\"~string,\n 25~int:\"twenty-five\"~string,\n 26~int:\"twenty-six\"~string,\n 27~int:\"twenty-seven\"~string,\n 28~int:\"twenty-eight\"~string,\n 29~int:\"twenty-nine\"~string,\n 30~int:\"thirty\"~string,\n 31~int:\"thirty-one\"~string\n }~map(int, string),\n 17~int\n)~string^index_map","type":"string"},{"original":{"name":"message_literal","description":"Member = Member '{' [FieldInits] '}'. Message literals with up to 32 fields.","expr":"TestAllTypes{single_int32: 5, single_int64: 10, single_uint32: 15u, single_uint64: 20u, single_sint32: 25, single_sint64: 30, single_fixed32: 35u, single_fixed64: 40u, single_float: 45.0, single_double: 50.0, single_bool: true, single_string: 'sixty', single_bytes: b'sixty-five', single_value: 70.0, single_int64_wrapper: 75, single_int32_wrapper: 80, single_double_wrapper: 85.0, single_float_wrapper: 90.0, single_uint64_wrapper: 95u, single_uint32_wrapper: 100u, single_string_wrapper: 'one hundred five', single_bool_wrapper: true, repeated_int32: [115], repeated_int64: [120], repeated_uint32: [125u], repeated_uint64: [130u], repeated_sint32: [135], repeated_sint64: [140], repeated_fixed32: [145u], repeated_fixed64: [150u], repeated_sfixed32: [155], repeated_float: [160.0]}.single_sint64","container":"cel.expr.conformance.proto3","value":{"int64Value":"30"}},"ast":"TestAllTypes{\n single_int32:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_int64:10^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint32:15u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint64:20u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_sint32:25^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_sint64:30^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_fixed32:35u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_fixed64:40u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_float:45^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_double:50^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"sixty\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bytes:b\"sixty-five\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#,\n single_value:70^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_int64_wrapper:75^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_int32_wrapper:80^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_double_wrapper:85^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_float_wrapper:90^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_uint64_wrapper:95u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint32_wrapper:100u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string_wrapper:\"one hundred five\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n repeated_int32:[\n 115^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_int64:[\n 120^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_uint32:[\n 125u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_uint64:[\n 130u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sint32:[\n 135^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sint64:[\n 140^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_fixed32:[\n 145u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_fixed64:[\n 150u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sfixed32:[\n 155^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_float:[\n 160^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_sint64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32:5~int,\n single_int64:10~int,\n single_uint32:15u~uint,\n single_uint64:20u~uint,\n single_sint32:25~int,\n single_sint64:30~int,\n single_fixed32:35u~uint,\n single_fixed64:40u~uint,\n single_float:45~double,\n single_double:50~double,\n single_bool:true~bool,\n single_string:\"sixty\"~string,\n single_bytes:b\"sixty-five\"~bytes,\n single_value:70~double,\n single_int64_wrapper:75~int,\n single_int32_wrapper:80~int,\n single_double_wrapper:85~double,\n single_float_wrapper:90~double,\n single_uint64_wrapper:95u~uint,\n single_uint32_wrapper:100u~uint,\n single_string_wrapper:\"one hundred five\"~string,\n single_bool_wrapper:true~bool,\n repeated_int32:[\n 115~int\n ]~list(int),\n repeated_int64:[\n 120~int\n ]~list(int),\n repeated_uint32:[\n 125u~uint\n ]~list(uint),\n repeated_uint64:[\n 130u~uint\n ]~list(uint),\n repeated_sint32:[\n 135~int\n ]~list(int),\n repeated_sint64:[\n 140~int\n ]~list(int),\n repeated_fixed32:[\n 145u~uint\n ]~list(uint),\n repeated_fixed64:[\n 150u~uint\n ]~list(uint),\n repeated_sfixed32:[\n 155~int\n ]~list(int),\n repeated_float:[\n 160~double\n ]~list(double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_sint64~int","type":"int"}]},{"name":"string_literals","tests":[{"original":{"name":"single_quoted","expr":"'hello'","value":{"stringValue":"hello"}},"ast":"\"hello\"^#*expr.Constant_StringValue#","checkedAst":"\"hello\"~string","type":"string"},{"original":{"name":"double_quoted","expr":"\"hello\"","value":{"stringValue":"hello"}},"ast":"\"hello\"^#*expr.Constant_StringValue#","checkedAst":"\"hello\"~string","type":"string"},{"original":{"name":"triple_single_quoted","expr":"'''hello'''","value":{"stringValue":"hello"}},"ast":"\"hello\"^#*expr.Constant_StringValue#","checkedAst":"\"hello\"~string","type":"string"},{"original":{"name":"triple_double_quoted","expr":"\"\"\"hello\"\"\"","value":{"stringValue":"hello"}},"ast":"\"hello\"^#*expr.Constant_StringValue#","checkedAst":"\"hello\"~string","type":"string"},{"original":{"name":"single_quoted_escaped_punctuation","expr":"' \\\\ \\? \\\" \\' \\` '","value":{"stringValue":" \\ ? \" ' ` "}},"ast":"\" \\\\ ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\ ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_punctuation","expr":"\" \\\\ \\? \\\" \\' \\` \"","value":{"stringValue":" \\ ? \" ' ` "}},"ast":"\" \\\\ ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\ ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_punctuation","expr":"''' \\\\ \\? \\\" \\' \\` '''","value":{"stringValue":" \\ ? \" ' ` "}},"ast":"\" \\\\ ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\ ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_punctuation","expr":"\"\"\" \\\\ \\? \\\" \\' \\` \"\"\"","value":{"stringValue":" \\ ? \" ' ` "}},"ast":"\" \\\\ ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\ ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"triple_single_quoted_unescaped_punctuation","expr":"''' ? \" ' ` '''","value":{"stringValue":" ? \" ' ` "}},"ast":"\" ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"triple_double_quoted_unescaped_punctuation","expr":"\"\"\" ? \" ' ` \"\"\"","value":{"stringValue":" ? \" ' ` "}},"ast":"\" ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_special_control_characters","expr":"' \\a \\b \\f \\t \\v '","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_special_control_characters","expr":"\" \\a \\b \\f \\t \\v \"","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"single_quoted_unescaped_special_control_characters","expr":"' \u0007 \b \f \t \u000b '","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"double_quoted_unescaped_special_control_characters","expr":"\" \u0007 \b \f \t \u000b \"","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_special_control_characters","expr":"''' \\a \\b \\f \\t \\v '''","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_special_control_characters","expr":"\"\"\" \\a \\b \\f \\t \\v \"\"\"","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"triple_single_quoted_unescaped_special_control_characters","expr":"''' \u0007 \b \f \t \u000b '''","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"triple_double_quoted_unescaped_special_control_characters","expr":"\"\"\" \u0007 \b \f \t \u000b \"\"\"","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_line_feed","expr":"' \\n '","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_line_feed","expr":"\" \\n \"","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_line_feed","expr":"''' \\n '''","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_line_feed","expr":"\"\"\" \\n \"\"\"","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"triple_single_quoted_unescaped_line_feed","expr":"''' \n '''","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"triple_double_quoted_unescaped_line_feed","expr":"\"\"\" \n \"\"\"","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_carriage_return","expr":"' \\r '","value":{"stringValue":" \r "}},"ast":"\" \\r \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_carriage_return","expr":"\" \\r \"","value":{"stringValue":" \r "}},"ast":"\" \\r \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_carriage_return","expr":"''' \\r '''","value":{"stringValue":" \r "}},"ast":"\" \\r \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_carriage_return","expr":"\"\"\" \\r \"\"\"","value":{"stringValue":" \r "}},"ast":"\" \\r \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_windows_line_end","expr":"' \\r\\n '","value":{"stringValue":" \r\n "}},"ast":"\" \\r\\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r\\n \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_windows_line_end","expr":"\" \\r\\n \"","value":{"stringValue":" \r\n "}},"ast":"\" \\r\\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r\\n \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_windows_line_end","expr":"''' \\r\\n '''","value":{"stringValue":" \r\n "}},"ast":"\" \\r\\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r\\n \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_windows_line_end","expr":"\"\"\" \\r\\n \"\"\"","value":{"stringValue":" \r\n "}},"ast":"\" \\r\\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r\\n \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_all_control_characters","expr":"' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_all_control_characters","expr":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F \"","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_unescaped_all_control_characters","expr":"' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_unescaped_all_control_characters","expr":"\" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  \"","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_all_control_characters","expr":"''' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '''","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_all_control_characters","expr":"\"\"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F \"\"\"","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_unescaped_all_control_characters","expr":"''' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '''","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_unescaped_all_control_characters","expr":"\"\"\" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  \"\"\"","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_octal_escapes","expr":"' \\000 \\012 \\177 '","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_octal_escapes","expr":"\" \\000 \\012 \\177 \"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_octal_escapes","expr":"''' \\000 \\012 \\177 '''","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_octal_escapes","expr":"\"\"\" \\000 \\012 \\177 \"\"\"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_lower_x_escapes","expr":"' \\x00 \\x0A \\x7F '","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_lower_x_escapes","expr":"\" \\x00 \\x0A \\x7F \"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_lower_x_escapes","expr":"''' \\x00 \\x0A \\x7F '''","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_lower_x_escapes","expr":"\"\"\" \\x00 \\x0A \\x7F \"\"\"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_upper_x_escapes","expr":"' \\X00 \\X0A \\X7F '","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_upper_x_escapes","expr":"\" \\X00 \\X0A \\X7F \"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_upper_x_escapes","expr":"''' \\X00 \\X0A \\X7F '''","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_upper_x_escapes","expr":"\"\"\" \\X00 \\X0A \\X7F \"\"\"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_lower_u_escapes","expr":"' \\u0000 \\u000A \\u007F \\u0100 \\uFFFB '","value":{"stringValue":" \u0000 \n  Ā  "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb \"~string","type":"string"},{"original":{"name":"double_quoted_lower_u_escapes","expr":"\" \\u0000 \\u000A \\u007F \\u0100 \\uFFFB \"","value":{"stringValue":" \u0000 \n  Ā  "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb \"~string","type":"string"},{"original":{"name":"triple_single_quoted_lower_u_escapes","expr":"''' \\u0000 \\u000A \\u007F \\u0100 \\uFFFB '''","value":{"stringValue":" \u0000 \n  Ā  "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb \"~string","type":"string"},{"original":{"name":"triple_double_quoted_lower_u_escapes","expr":"\"\"\" \\u0000 \\u000A \\u007F \\u0100 \\uFFFB \"\"\"","value":{"stringValue":" \u0000 \n  Ā  "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb \"~string","type":"string"},{"original":{"name":"single_quoted_upper_u_escapes","expr":"' \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C '","value":{"stringValue":" \u0000 \n  Ā  𐀀 😬 "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"~string","type":"string"},{"original":{"name":"double_quoted_upper_u_escapes","expr":"\" \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C \"","value":{"stringValue":" \u0000 \n  Ā  𐀀 😬 "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"~string","type":"string"},{"original":{"name":"triple_single_quoted_upper_u_escapes","expr":"''' \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C '''","value":{"stringValue":" \u0000 \n  Ā  𐀀 😬 "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"~string","type":"string"},{"original":{"name":"triple_double_quoted_upper_u_escapes","expr":"\"\"\" \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C \"\"\"","value":{"stringValue":" \u0000 \n  Ā  𐀀 😬 "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"~string","type":"string"},{"original":{"name":"mixed_case_hex_single_quoted_escapes","expr":"' \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB '","value":{"stringValue":" J K L M ƫ ƫ "}},"ast":"\" J K L M ƫ ƫ \"^#*expr.Constant_StringValue#","checkedAst":"\" J K L M ƫ ƫ \"~string","type":"string"},{"original":{"name":"mixed_case_hex_double_quoted_escapes","expr":"\" \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB \"","value":{"stringValue":" J K L M ƫ ƫ "}},"ast":"\" J K L M ƫ ƫ \"^#*expr.Constant_StringValue#","checkedAst":"\" J K L M ƫ ƫ \"~string","type":"string"},{"original":{"name":"mixed_case_hex_triple_single_quoted_escapes","expr":"''' \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB '''","value":{"stringValue":" J K L M ƫ ƫ "}},"ast":"\" J K L M ƫ ƫ \"^#*expr.Constant_StringValue#","checkedAst":"\" J K L M ƫ ƫ \"~string","type":"string"},{"original":{"name":"mixed_case_hex_triple_double_quoted_escapes","expr":"\"\"\" \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB \"\"\"","value":{"stringValue":" J K L M ƫ ƫ "}},"ast":"\" J K L M ƫ ƫ \"^#*expr.Constant_StringValue#","checkedAst":"\" J K L M ƫ ƫ \"~string","type":"string"},{"original":{"name":"unassigned_code_point_single_quoted_escapes","expr":"' \\U00088888 '","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_double_quoted_escapes","expr":"\" \\U00088888 \"","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_triple_single_quoted_escapes","expr":"''' \\U00088888 '''","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_triple_double_quoted_escapes","expr":"\"\"\" \\U00088888 \"\"\"","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_single_quoted_unescaped","expr":"' 򈢈 '","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_double_quoted_unescaped","expr":"\" 򈢈 \"","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_triple_single_quoted_unescaped","expr":"''' 򈢈 '''","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_triple_double_quoted_unescaped","expr":"\"\"\" 򈢈 \"\"\"","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"raw_single_quoted_escapes","expr":"r' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '","value":{"stringValue":" \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"raw_double_quoted_escapes","expr":"r\" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"","value":{"stringValue":" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"raw_triple_single_quoted_escapes","expr":"r''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''","value":{"stringValue":" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"raw_triple_double_quoted_escapes","expr":"r\"\"\" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"\"\"","value":{"stringValue":" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"upper_raw_single_quoted_escapes","expr":"R' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '","value":{"stringValue":" \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"upper_raw_double_quoted_escapes","expr":"R\" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"","value":{"stringValue":" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"upper_raw_triple_single_quoted_escapes","expr":"R''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''","value":{"stringValue":" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"upper_raw_triple_double_quoted_escapes","expr":"R\"\"\" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"\"\"","value":{"stringValue":" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"}]},{"name":"bytes_literals","tests":[{"original":{"name":"single_quoted","expr":"b'hello'","value":{"bytesValue":"aGVsbG8="}},"ast":"b\"hello\"^#*expr.Constant_BytesValue#","checkedAst":"b\"hello\"~bytes","type":"bytes"},{"original":{"name":"double_quoted","expr":"b\"hello\"","value":{"bytesValue":"aGVsbG8="}},"ast":"b\"hello\"^#*expr.Constant_BytesValue#","checkedAst":"b\"hello\"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted","expr":"b'''hello'''","value":{"bytesValue":"aGVsbG8="}},"ast":"b\"hello\"^#*expr.Constant_BytesValue#","checkedAst":"b\"hello\"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted","expr":"b\"\"\"hello\"\"\"","value":{"bytesValue":"aGVsbG8="}},"ast":"b\"hello\"^#*expr.Constant_BytesValue#","checkedAst":"b\"hello\"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_punctuation","expr":"b' \\\\ \\? \\\" \\' \\` '","value":{"bytesValue":"IFwgPyAiICcgYCA="}},"ast":"b\" \\\\ ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\ ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_punctuation","expr":"b\" \\\\ \\? \\\" \\' \\` \"","value":{"bytesValue":"IFwgPyAiICcgYCA="}},"ast":"b\" \\\\ ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\ ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_punctuation","expr":"b''' \\\\ \\? \\\" \\' \\` '''","value":{"bytesValue":"IFwgPyAiICcgYCA="}},"ast":"b\" \\\\ ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\ ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_punctuation","expr":"b\"\"\" \\\\ \\? \\\" \\' \\` \"\"\"","value":{"bytesValue":"IFwgPyAiICcgYCA="}},"ast":"b\" \\\\ ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\ ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_unescaped_punctuation","expr":"b''' ? \" ' ` '''","value":{"bytesValue":"ID8gIiAnIGAg"}},"ast":"b\" ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_unescaped_punctuation","expr":"b\"\"\" ? \" ' ` \"\"\"","value":{"bytesValue":"ID8gIiAnIGAg"}},"ast":"b\" ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_special_control_characters","expr":"b' \\a \\b \\f \\t \\v '","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_special_control_characters","expr":"b\" \\a \\b \\f \\t \\v \"","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_unescaped_special_control_characters","expr":"b' \u0007 \b \f \t \u000b '","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_unescaped_special_control_characters","expr":"b\" \u0007 \b \f \t \u000b \"","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_special_control_characters","expr":"b''' \\a \\b \\f \\t \\v '''","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_special_control_characters","expr":"b\"\"\" \\a \\b \\f \\t \\v \"\"\"","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_unescaped_special_control_characters","expr":"b''' \u0007 \b \f \t \u000b '''","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_unescaped_special_control_characters","expr":"b\"\"\" \u0007 \b \f \t \u000b \"\"\"","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_line_feed","expr":"b' \\n '","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_line_feed","expr":"b\" \\n \"","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_line_feed","expr":"b''' \\n '''","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_line_feed","expr":"b\"\"\" \\n \"\"\"","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_unescaped_line_feed","expr":"b''' \n '''","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_unescaped_line_feed","expr":"b\"\"\" \n \"\"\"","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_carriage_return","expr":"b' \\r '","value":{"bytesValue":"IA0g"}},"ast":"b\" \\r \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_carriage_return","expr":"b\" \\r \"","value":{"bytesValue":"IA0g"}},"ast":"b\" \\r \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_carriage_return","expr":"b''' \\r '''","value":{"bytesValue":"IA0g"}},"ast":"b\" \\r \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_carriage_return","expr":"b\"\"\" \\r \"\"\"","value":{"bytesValue":"IA0g"}},"ast":"b\" \\r \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_windows_line_end","expr":"b' \\r\\n '","value":{"bytesValue":"IA0KIA=="}},"ast":"b\" \\r\\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r\\n \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_windows_line_end","expr":"b\" \\r\\n \"","value":{"bytesValue":"IA0KIA=="}},"ast":"b\" \\r\\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r\\n \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_windows_line_end","expr":"b''' \\r\\n '''","value":{"bytesValue":"IA0KIA=="}},"ast":"b\" \\r\\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r\\n \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_windows_line_end","expr":"b\"\"\" \\r\\n \"\"\"","value":{"bytesValue":"IA0KIA=="}},"ast":"b\" \\r\\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r\\n \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_all_control_characters","expr":"b' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_all_control_characters","expr":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F \"","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_unescaped_all_control_characters","expr":"b' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_unescaped_all_control_characters","expr":"b\" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  \"","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_all_control_characters","expr":"b''' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '''","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_all_control_characters","expr":"b\"\"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F \"\"\"","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_unescaped_all_control_characters","expr":"b''' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '''","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_unescaped_all_control_characters","expr":"b\"\"\" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  \"\"\"","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_octal_escapes","expr":"b' \\000 \\012 \\177 \\377 '","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_octal_escapes","expr":"b\" \\000 \\012 \\177 \\377 \"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_octal_escapes","expr":"b''' \\000 \\012 \\177 \\377 '''","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_octal_escapes","expr":"b\"\"\" \\000 \\012 \\177 \\377 \"\"\"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_lower_x_escapes","expr":"b' \\x00 \\x0A \\x7F \\xFF '","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_lower_x_escapes","expr":"b\" \\x00 \\x0A \\x7F \\xFF \"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_lower_x_escapes","expr":"b''' \\x00 \\x0A \\x7F \\xFF '''","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_lower_x_escapes","expr":"b\"\"\" \\x00 \\x0A \\x7F \\xFF \"\"\"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_upper_x_escapes","expr":"b' \\X00 \\X0A \\X7F \\XFF '","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_upper_x_escapes","expr":"b\" \\X00 \\X0A \\X7F \\XFF \"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_upper_x_escapes","expr":"b''' \\X00 \\X0A \\X7F \\XFF '''","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_upper_x_escapes","expr":"b\"\"\" \\X00 \\X0A \\X7F \\XFF \"\"\"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"mixed_case_hex_single_quoted_escapes","expr":"B' \\x4a \\x4B \\X4c \\X4D '","value":{"bytesValue":"IEogSyBMIE0g"}},"ast":"b\" J K L M \"^#*expr.Constant_BytesValue#","checkedAst":"b\" J K L M \"~bytes","type":"bytes"},{"original":{"name":"mixed_case_hex_double_quoted_escapes","expr":"B\" \\x4a \\x4B \\X4c \\X4D \"","value":{"bytesValue":"IEogSyBMIE0g"}},"ast":"b\" J K L M \"^#*expr.Constant_BytesValue#","checkedAst":"b\" J K L M \"~bytes","type":"bytes"},{"original":{"name":"mixed_case_hex_triple_single_quoted_escapes","expr":"B''' \\x4a \\x4B \\X4c \\X4D '''","value":{"bytesValue":"IEogSyBMIE0g"}},"ast":"b\" J K L M \"^#*expr.Constant_BytesValue#","checkedAst":"b\" J K L M \"~bytes","type":"bytes"},{"original":{"name":"mixed_case_hex_triple_double_quoted_escapes","expr":"B\"\"\" \\x4a \\x4B \\X4c \\X4D \"\"\"","value":{"bytesValue":"IEogSyBMIE0g"}},"ast":"b\" J K L M \"^#*expr.Constant_BytesValue#","checkedAst":"b\" J K L M \"~bytes","type":"bytes"},{"original":{"name":"raw_single_quoted_escapes","expr":"br' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '","value":{"bytesValue":"IFxcIFw/IFwiIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"raw_double_quoted_escapes","expr":"br\" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"","value":{"bytesValue":"IFxcIFw/IFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"raw_triple_single_quoted_escapes","expr":"br''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''","value":{"bytesValue":"IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"raw_triple_double_quoted_escapes","expr":"br\"\"\" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"\"\"","value":{"bytesValue":"IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"upper_raw_single_quoted_escapes","expr":"bR' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '","value":{"bytesValue":"IFxcIFw/IFwiIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"upper_raw_double_quoted_escapes","expr":"bR\" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"","value":{"bytesValue":"IFxcIFw/IFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"upper_raw_triple_single_quoted_escapes","expr":"bR''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''","value":{"bytesValue":"IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"upper_raw_triple_double_quoted_escapes","expr":"bR\"\"\" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"\"\"","value":{"bytesValue":"IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"}]},{"name":"whitespace","tests":[{"original":{"name":"spaces","description":"Check that spaces are ignored.","expr":"[ . cel. expr .conformance. proto3. TestAllTypes { single_int64 : int ( 17 ) } . single_int64 ] [ 0 ] == ( 18 - 1 ) \u0026\u0026 ! false ? 1 : 2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"tabs","description":"Check that tabs (`\\t`) are ignored.","expr":"[\t.\tcel.\texpr\t.conformance.\tproto3.\tTestAllTypes\t{\tsingle_int64\t:\tint\t(\t17\t)\t}\t.\tsingle_int64\t]\t[\t0\t]\t==\t(\t18\t-\t1\t)\t\u0026\u0026\t!\tfalse\t?\t1\t:\t2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"new_lines","description":"Check that new lines (`\\n`) are ignored.","expr":"[\n.\ncel.\nexpr\n.conformance.\nproto3.\nTestAllTypes\n{\nsingle_int64\n:\nint\n(\n17\n)\n}\n.\nsingle_int64\n]\n[\n0\n]\n==\n(\n18\n-\n1\n)\n\u0026\u0026\n!\nfalse\n?\n1\n:\n2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"new_pages","description":"Check that new pages (`\\f`) are ignored.","expr":"[\f.\fcel.\fexpr\f.conformance.\fproto3.\fTestAllTypes\f{\fsingle_int64\f:\fint\f(\f17\f)\f}\f.\fsingle_int64\f]\f[\f0\f]\f==\f(\f18\f-\f1\f)\f\u0026\u0026\f!\ffalse\f?\f1\f:\f2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"carriage_returns","description":"Check that carriage returns (`\\r`) are ignored.","expr":"[\r.\rcel.\rexpr\r.conformance.\rproto3.\rTestAllTypes\r{\rsingle_int64\r:\rint\r(\r17\r)\r}\r.\rsingle_int64\r]\r[\r0\r]\r==\r(\r18\r-\r1\r)\r\u0026\u0026\r!\rfalse\r?\r1\r:\r2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"}]},{"name":"comments","tests":[{"original":{"name":"new_line_terminated","description":"Check that new-line-terminated comments are ignored.","expr":"[// @\n.// @\ncel.// @\nexpr// @\n.conformance.// @\nproto3.// @\nTestAllTypes// @\n{// @\nsingle_int64// @\n:// @\nint// @\n(// @\n17// @\n)// @\n}// @\n.// @\nsingle_int64// @\n]// @\n[// @\n0// @\n]// @\n==// @\n(// @\n18// @\n-// @\n1// @\n)// @\n\u0026\u0026// @\n!// @\nfalse// @\n?// @\n1// @\n:// @\n2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"}]},{"name":"selectors","tests":[{"original":{"name":"as","description":"Check that `as` can be used as a selector.","expr":"{ 'as': 1 }.as","value":{"int64Value":"1"}},"ast":"{\n \"as\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.as^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"as\"~string:1~int\n}~map(string, int).as~int","type":"int"},{"original":{"name":"break","description":"Check that `break` can be used as a selector.","expr":"{ 'break': 1 }.break","value":{"int64Value":"1"}},"ast":"{\n \"break\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.break^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"break\"~string:1~int\n}~map(string, int).break~int","type":"int"},{"original":{"name":"const","description":"Check that `const` can be used as a selector.","expr":"{ 'const': 1 }.const","value":{"int64Value":"1"}},"ast":"{\n \"const\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.const^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"const\"~string:1~int\n}~map(string, int).const~int","type":"int"},{"original":{"name":"continue","description":"Check that `continue` can be used as a selector.","expr":"{ 'continue': 1 }.continue","value":{"int64Value":"1"}},"ast":"{\n \"continue\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.continue^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"continue\"~string:1~int\n}~map(string, int).continue~int","type":"int"},{"original":{"name":"else","description":"Check that `else` can be used as a selector.","expr":"{ 'else': 1 }.else","value":{"int64Value":"1"}},"ast":"{\n \"else\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.else^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"else\"~string:1~int\n}~map(string, int).else~int","type":"int"},{"original":{"name":"for","description":"Check that `for` can be used as a selector.","expr":"{ 'for': 1 }.for","value":{"int64Value":"1"}},"ast":"{\n \"for\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.for^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"for\"~string:1~int\n}~map(string, int).for~int","type":"int"},{"original":{"name":"function","description":"Check that `function` can be used as a selector.","expr":"{ 'function': 1 }.function","value":{"int64Value":"1"}},"ast":"{\n \"function\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.function^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"function\"~string:1~int\n}~map(string, int).function~int","type":"int"},{"original":{"name":"if","description":"Check that `if` can be used as a selector.","expr":"{ 'if': 1 }.if","value":{"int64Value":"1"}},"ast":"{\n \"if\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.if^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"if\"~string:1~int\n}~map(string, int).if~int","type":"int"},{"original":{"name":"import","description":"Check that `import` can be used as a selector.","expr":"{ 'import': 1 }.import","value":{"int64Value":"1"}},"ast":"{\n \"import\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.import^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"import\"~string:1~int\n}~map(string, int).import~int","type":"int"},{"original":{"name":"let","description":"Check that `let` can be used as a selector.","expr":"{ 'let': 1 }.let","value":{"int64Value":"1"}},"ast":"{\n \"let\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.let^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"let\"~string:1~int\n}~map(string, int).let~int","type":"int"},{"original":{"name":"loop","description":"Check that `loop` can be used as a selector.","expr":"{ 'loop': 1 }.loop","value":{"int64Value":"1"}},"ast":"{\n \"loop\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.loop^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"loop\"~string:1~int\n}~map(string, int).loop~int","type":"int"},{"original":{"name":"package","description":"Check that `package` can be used as a selector.","expr":"{ 'package': 1 }.package","value":{"int64Value":"1"}},"ast":"{\n \"package\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.package^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"package\"~string:1~int\n}~map(string, int).package~int","type":"int"},{"original":{"name":"namespace","description":"Check that `namespace` can be used as a selector.","expr":"{ 'namespace': 1 }.namespace","value":{"int64Value":"1"}},"ast":"{\n \"namespace\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.namespace^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"namespace\"~string:1~int\n}~map(string, int).namespace~int","type":"int"},{"original":{"name":"return","description":"Check that `return` can be used as a selector.","expr":"{ 'return': 1 }.return","value":{"int64Value":"1"}},"ast":"{\n \"return\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.return^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"return\"~string:1~int\n}~map(string, int).return~int","type":"int"},{"original":{"name":"var","description":"Check that `var` can be used as a selector.","expr":"{ 'var': 1 }.var","value":{"int64Value":"1"}},"ast":"{\n \"var\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.var^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"var\"~string:1~int\n}~map(string, int).var~int","type":"int"},{"original":{"name":"void","description":"Check that `void` can be used as a selector.","expr":"{ 'void': 1 }.void","value":{"int64Value":"1"}},"ast":"{\n \"void\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.void^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"void\"~string:1~int\n}~map(string, int).void~int","type":"int"},{"original":{"name":"while","description":"Check that `while` can be used as a selector.","expr":"{ 'while': 1 }.while","value":{"int64Value":"1"}},"ast":"{\n \"while\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.while^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"while\"~string:1~int\n}~map(string, int).while~int","type":"int"}]},{"name":"receiver_function_names","tests":[{"original":{"name":"as","description":"Check that `as` can be used as a receiver function.","expr":"a.as() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.as()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.as() || true\n | ^\nERROR: \u003cinput\u003e:1:5: undeclared reference to 'as' (in container '')\n | a.as() || true\n | ....^"},{"original":{"name":"break","description":"Check that `break` can be used as a receiver function.","expr":"a.break() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.break()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.break() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'break' (in container '')\n | a.break() || true\n | .......^"},{"original":{"name":"const","description":"Check that `const` can be used as a receiver function.","expr":"a.const() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.const()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.const() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'const' (in container '')\n | a.const() || true\n | .......^"},{"original":{"name":"continue","description":"Check that `continue` can be used as a receiver function.","expr":"a.continue() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.continue()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.continue() || true\n | ^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'continue' (in container '')\n | a.continue() || true\n | ..........^"},{"original":{"name":"else","description":"Check that `else` can be used as a receiver function.","expr":"a.else() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.else()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.else() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'else' (in container '')\n | a.else() || true\n | ......^"},{"original":{"name":"for","description":"Check that `for` can be used as a receiver function.","expr":"a.for() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.for()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.for() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'for' (in container '')\n | a.for() || true\n | .....^"},{"original":{"name":"function","description":"Check that `function` can be used as a receiver function.","expr":"a.function() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.function()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.function() || true\n | ^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'function' (in container '')\n | a.function() || true\n | ..........^"},{"original":{"name":"if","description":"Check that `if` can be used as a receiver function.","expr":"a.if() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.if()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.if() || true\n | ^\nERROR: \u003cinput\u003e:1:5: undeclared reference to 'if' (in container '')\n | a.if() || true\n | ....^"},{"original":{"name":"import","description":"Check that `import` can be used as a receiver function.","expr":"a.import() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.import()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.import() || true\n | ^\nERROR: \u003cinput\u003e:1:9: undeclared reference to 'import' (in container '')\n | a.import() || true\n | ........^"},{"original":{"name":"let","description":"Check that `let` can be used as a receiver function.","expr":"a.let() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.let()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.let() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'let' (in container '')\n | a.let() || true\n | .....^"},{"original":{"name":"loop","description":"Check that `loop` can be used as a receiver function.","expr":"a.loop() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.loop()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.loop() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'loop' (in container '')\n | a.loop() || true\n | ......^"},{"original":{"name":"package","description":"Check that `package` can be used as a receiver function.","expr":"a.package() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.package()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.package() || true\n | ^\nERROR: \u003cinput\u003e:1:10: undeclared reference to 'package' (in container '')\n | a.package() || true\n | .........^"},{"original":{"name":"namespace","description":"Check that `namespace` can be used as a receiver function.","expr":"a.namespace() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.namespace()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.namespace() || true\n | ^\nERROR: \u003cinput\u003e:1:12: undeclared reference to 'namespace' (in container '')\n | a.namespace() || true\n | ...........^"},{"original":{"name":"return","description":"Check that `return` can be used as a receiver function.","expr":"a.return() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.return()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.return() || true\n | ^\nERROR: \u003cinput\u003e:1:9: undeclared reference to 'return' (in container '')\n | a.return() || true\n | ........^"},{"original":{"name":"var","description":"Check that `var` can be used as a receiver function.","expr":"a.var() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.var()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.var() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'var' (in container '')\n | a.var() || true\n | .....^"},{"original":{"name":"void","description":"Check that `void` can be used as a receiver function.","expr":"a.void() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.void()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.void() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'void' (in container '')\n | a.void() || true\n | ......^"},{"original":{"name":"while","description":"Check that `while` can be used as a receiver function.","expr":"a.while() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.while()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.while() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'while' (in container '')\n | a.while() || true\n | .......^"}]},{"name":"struct_field_names","tests":[{"original":{"name":"as","description":"Check that `as` can be used as a struct field name.","expr":"TestAllTypes{ as: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","as":true}}},"ast":"TestAllTypes{\n as:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n as:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"break","description":"Check that `break` can be used as a struct field name.","expr":"TestAllTypes{ break: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","break":true}}},"ast":"TestAllTypes{\n break:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n break:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"const","description":"Check that `const` can be used as a struct field name.","expr":"TestAllTypes{ const: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","const":true}}},"ast":"TestAllTypes{\n const:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n const:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"continue","description":"Check that `continue` can be used as a struct field name.","expr":"TestAllTypes{ continue: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","continue":true}}},"ast":"TestAllTypes{\n continue:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n continue:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"else","description":"Check that `else` can be used as a struct field name.","expr":"TestAllTypes{ else: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","else":true}}},"ast":"TestAllTypes{\n else:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n else:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"for","description":"Check that `for` can be used as a struct field name.","expr":"TestAllTypes{ for: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","for":true}}},"ast":"TestAllTypes{\n for:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n for:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"function","description":"Check that `function` can be used as a struct field name.","expr":"TestAllTypes{ function: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","function":true}}},"ast":"TestAllTypes{\n function:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n function:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"if","description":"Check that `if` can be used as a struct field name.","expr":"TestAllTypes{ if: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","if":true}}},"ast":"TestAllTypes{\n if:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n if:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"import","description":"Check that `import` can be used as a struct field name.","expr":"TestAllTypes{ import: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","import":true}}},"ast":"TestAllTypes{\n import:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n import:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"let","description":"Check that `let` can be used as a struct field name.","expr":"TestAllTypes{ let: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","let":true}}},"ast":"TestAllTypes{\n let:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n let:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"loop","description":"Check that `loop` can be used as a struct field name.","expr":"TestAllTypes{ loop: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","loop":true}}},"ast":"TestAllTypes{\n loop:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n loop:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"package","description":"Check that `package` can be used as a struct field name.","expr":"TestAllTypes{ package: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","package":true}}},"ast":"TestAllTypes{\n package:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n package:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"namespace","description":"Check that `namespace` can be used as a struct field name.","expr":"TestAllTypes{ namespace: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","namespace":true}}},"ast":"TestAllTypes{\n namespace:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n namespace:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"return","description":"Check that `return` can be used as a struct field name.","expr":"TestAllTypes{ return: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","return":true}}},"ast":"TestAllTypes{\n return:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n return:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"var","description":"Check that `var` can be used as a struct field name.","expr":"TestAllTypes{ var: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","var":true}}},"ast":"TestAllTypes{\n var:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n var:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"void","description":"Check that `void` can be used as a struct field name.","expr":"TestAllTypes{ void: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","void":true}}},"ast":"TestAllTypes{\n void:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n void:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"while","description":"Check that `while` can be used as a struct field name.","expr":"TestAllTypes{ while: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","while":true}}},"ast":"TestAllTypes{\n while:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n while:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]}]},{"name":"plumbing","suites":[{"name":"min","tests":[{"original":{"name":"min_program","description":"Smallest functionality: expr in, result out.","expr":"17","value":{"int64Value":"17"}},"ast":"17^#*expr.Constant_Int64Value#","checkedAst":"17~int","type":"int"}]},{"name":"eval_results","tests":[{"original":{"name":"error_result","description":"Check that error results go through.","expr":"1 / 0","evalError":{"errors":[{"message":"foo"}]}},"ast":"_/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 1~int,\n 0~int\n)~int^divide_int64","type":"int"},{"original":{"name":"eval_map_results","description":"Check that map literals results are order independent.","expr":"{\"k1\":\"v1\",\"k\":\"v\"}","value":{"mapValue":{"entries":[{"key":{"stringValue":"k"},"value":{"stringValue":"v"}},{"key":{"stringValue":"k1"},"value":{"stringValue":"v1"}}]}}},"ast":"{\n \"k1\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"{\n \"k1\"~string:\"v1\"~string,\n \"k\"~string:\"v\"~string\n}~map(string, string)","type":"map(string, string)"}]},{"name":"check_inputs","tests":[{"original":{"name":"skip_check","description":"Make sure we can skip type checking.","expr":"[17, 'pancakes']","disableCheck":true,"value":{"listValue":{"values":[{"int64Value":"17"},{"stringValue":"pancakes"}]}}},"ast":"[\n 17^#*expr.Constant_Int64Value#,\n \"pancakes\"^#*expr.Constant_StringValue#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n 17~int,\n \"pancakes\"~string\n]~list(dyn)","type":"list(dyn)"}]},{"name":"eval_inputs","tests":[{"original":{"name":"one_ignored_value_arg","description":"Check that value bindings can be given, even if ignored.","expr":"'foo'","bindings":{"x":{"value":{"int64Value":"17"}}},"value":{"stringValue":"foo"}},"ast":"\"foo\"^#*expr.Constant_StringValue#","checkedAst":"\"foo\"~string","type":"string"}]}]},{"name":"proto2","suites":[{"name":"literal_singular","tests":[{"original":{"name":"int64_nocontainer","expr":"cel.expr.conformance.proto2.TestAllTypes{single_int64: 17}","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64":"17"}}},"ast":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"int32","expr":"TestAllTypes{single_int32: -34}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":-34}}},"ast":"TestAllTypes{\n single_int32:-34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32:-34~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"int32_eq_uint","expr":"Int32Value{value: 34} == dyn(UInt64Value{value: 34u})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.UInt64Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_int32_eq_uint","expr":"Int32Value{value: 34} == dyn(UInt64Value{value: 18446744073709551615u})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"int32_eq_double","expr":"Int32Value{value: 34} == dyn(DoubleValue{value: 34.0})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:34~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_int32_eq_double","expr":"Int32Value{value: 34} == dyn(DoubleValue{value: -9223372036854775809.0})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:-9.223372036854776e+18^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:-9.223372036854776e+18~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"int64","expr":"TestAllTypes{single_int64: 17}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64":"17"}}},"ast":"TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"uint32","expr":"TestAllTypes{single_uint32: 1u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32":1}}},"ast":"TestAllTypes{\n single_uint32:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32:1u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"uint32_eq_int","expr":"UInt32Value{value: 34u} == dyn(Int64Value{value: 34})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.Int64Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_uint32_eq_int","expr":"UInt32Value{value: 34u} == dyn(Int64Value{value: -1})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.Int64Value{\n value:-1~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"uint32_eq_double","expr":"UInt32Value{value: 34u} == dyn(DoubleValue{value: 34.0})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:34~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_uint32_eq_double","expr":"UInt32Value{value: 34u} == dyn(DoubleValue{value: 18446744073709551616.0})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:1.8446744073709552e+19^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:1.8446744073709552e+19~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"uint64","expr":"TestAllTypes{single_uint64: 9999u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint64":"9999"}}},"ast":"TestAllTypes{\n single_uint64:9999u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64:9999u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"sint32","expr":"TestAllTypes{single_sint32: -3}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleSint32":-3}}},"ast":"TestAllTypes{\n single_sint32:-3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sint32:-3~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"sint64","expr":"TestAllTypes{single_sint64: 255}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleSint64":"255"}}},"ast":"TestAllTypes{\n single_sint64:255^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sint64:255~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"fixed32","expr":"TestAllTypes{single_fixed32: 43u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFixed32":43}}},"ast":"TestAllTypes{\n single_fixed32:43u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_fixed32:43u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"fixed64","expr":"TestAllTypes{single_fixed64: 1880u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFixed64":"1880"}}},"ast":"TestAllTypes{\n single_fixed64:1880u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_fixed64:1880u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"sfixed32","expr":"TestAllTypes{single_sfixed32: -404}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleSfixed32":-404}}},"ast":"TestAllTypes{\n single_sfixed32:-404^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sfixed32:-404~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"sfixed64","expr":"TestAllTypes{single_sfixed64: -1}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleSfixed64":"-1"}}},"ast":"TestAllTypes{\n single_sfixed64:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sfixed64:-1~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"float","expr":"TestAllTypes{single_float: 3.1416}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloat":3.1416}}},"ast":"TestAllTypes{\n single_float:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float:3.1416~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"float_eq_int","expr":"FloatValue{value: 3.0} == dyn(Int64Value{value: 3})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n FloatValue{\n value:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:3~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.Int64Value{\n value:3~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_float_eq_int","expr":"FloatValue{value: -1.14} == dyn(Int64Value{value: -1})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n FloatValue{\n value:-1.14^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:-1.14~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.Int64Value{\n value:-1~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"float_eq_uint","expr":"FloatValue{value: 34.0} == dyn(UInt64Value{value: 34u})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n FloatValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:34~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.UInt64Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_float_eq_uint","expr":"FloatValue{value: -1.0} == dyn(UInt64Value{value: 18446744073709551615u})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n FloatValue{\n value:-1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:-1~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"double","expr":"TestAllTypes{single_double: 6.022e23}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDouble":6.022e+23}}},"ast":"TestAllTypes{\n single_double:6.022e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double:6.022e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"bool","expr":"TestAllTypes{single_bool: true}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBool":true}}},"ast":"TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"string","expr":"TestAllTypes{single_string: 'foo'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleString":"foo"}}},"ast":"TestAllTypes{\n single_string:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_string:\"foo\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"bytes","expr":"TestAllTypes{single_bytes: b'\\377'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBytes":"/w=="}}},"ast":"TestAllTypes{\n single_bytes:b\"\\xff\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bytes:b\"\\xff\"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"}]},{"name":"literal_wellknown","tests":[{"original":{"name":"any","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 1}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleAny":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":1}}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"duration","expr":"TestAllTypes{single_duration: duration('123s')}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDuration":"123s"}}},"ast":"TestAllTypes{\n single_duration:duration(\n \"123s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_duration:duration(\n \"123s\"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"timestamp","expr":"TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleTimestamp":"2009-02-13T23:31:30Z"}}},"ast":"TestAllTypes{\n single_timestamp:timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_timestamp:timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"struct","expr":"TestAllTypes{single_struct: {'one': 1, 'two': 2}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStruct":{"one":1,"two":2}}}},"ast":"TestAllTypes{\n single_struct:{\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"two\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n \"one\"~string:1~int,\n \"two\"~string:2~int\n }~map(string, int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"value","expr":"TestAllTypes{single_value: 'foo'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":"foo"}}},"ast":"TestAllTypes{\n single_value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"foo\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"int64_wrapper","expr":"TestAllTypes{single_int64_wrapper: -321}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64Wrapper":"-321"}}},"ast":"TestAllTypes{\n single_int64_wrapper:-321^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:-321~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"int32_wrapper","expr":"TestAllTypes{single_int32_wrapper: -456}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":-456}}},"ast":"TestAllTypes{\n single_int32_wrapper:-456^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:-456~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"double_wrapper","expr":"TestAllTypes{single_double_wrapper: 2.71828}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDoubleWrapper":2.71828}}},"ast":"TestAllTypes{\n single_double_wrapper:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:2.71828~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"float_wrapper","expr":"TestAllTypes{single_float_wrapper: 2.99792e8}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":299792000}}},"ast":"TestAllTypes{\n single_float_wrapper:2.99792e+08^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:2.99792e+08~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"uint64_wrapper","expr":"TestAllTypes{single_uint64_wrapper: 8675309u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint64Wrapper":"8675309"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:8675309u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:8675309u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"uint32_wrapper","expr":"TestAllTypes{single_uint32_wrapper: 987u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32Wrapper":987}}},"ast":"TestAllTypes{\n single_uint32_wrapper:987u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:987u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"string_wrapper","expr":"TestAllTypes{single_string_wrapper: 'hubba'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStringWrapper":"hubba"}}},"ast":"TestAllTypes{\n single_string_wrapper:\"hubba\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:\"hubba\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"bool_wrapper","expr":"TestAllTypes{single_bool_wrapper: true}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBoolWrapper":true}}},"ast":"TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"bytes_wrapper","expr":"TestAllTypes{single_bytes_wrapper: b'\\301\\103'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBytesWrapper":"wUM="}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"\\xc1C\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b\"\\xc1C\"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"}]},{"name":"singular_bind","tests":[{"original":{"name":"int32","expr":"x.single_int32","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":17}}}},"value":{"int64Value":"17"}},"ast":"x^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto2.TestAllTypes^x.single_int32~int","type":"int"},{"original":{"name":"int64","expr":"x.single_int64","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64":"-99"}}}},"value":{"int64Value":"-99"}},"ast":"x^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto2.TestAllTypes^x.single_int64~int","type":"int"}]},{"name":"empty_field","tests":[{"original":{"name":"scalar_with_default","expr":"TestAllTypes{}.single_int32","container":"cel.expr.conformance.proto2","value":{"int64Value":"-32"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~int","type":"int"},{"original":{"name":"scalar_no_default","expr":"TestAllTypes{}.single_fixed32","container":"cel.expr.conformance.proto2","value":{"uint64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_fixed32^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_fixed32~uint","type":"uint"},{"original":{"name":"nested_message","expr":"TestAllTypes{}.single_nested_message","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes.NestedMessage"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~cel.expr.conformance.proto2.TestAllTypes.NestedMessage","type":"cel.expr.conformance.proto2.TestAllTypes.NestedMessage"},{"original":{"name":"nested_message_subfield","expr":"TestAllTypes{}.single_nested_message.bb","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#.bb^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~cel.expr.conformance.proto2.TestAllTypes.NestedMessage.bb~int","type":"int"},{"original":{"name":"wkt","expr":"TestAllTypes{}.single_int64_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"repeated_scalar","expr":"TestAllTypes{}.repeated_int64","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int64~list(int)","type":"list(int)"},{"original":{"name":"repeated_enum","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"repeated_nested","expr":"TestAllTypes{}.repeated_nested_message","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_message~list(cel.expr.conformance.proto2.TestAllTypes.NestedMessage)","type":"list(cel.expr.conformance.proto2.TestAllTypes.NestedMessage)"},{"original":{"name":"map","expr":"TestAllTypes{}.map_string_string","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~map(string, string)","type":"map(string, string)"}]},{"name":"has","tests":[{"original":{"name":"undefined","expr":"has(TestAllTypes{}.no_such_field)","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"no_such_field"}]}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.no_such_field~test-only~^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:4: undefined field 'no_such_field'\n | has(TestAllTypes{}.no_such_field)\n | ...^"},{"original":{"name":"repeated_none_implicit","expr":"has(TestAllTypes{}.repeated_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_none_explicit","expr":"has(TestAllTypes{repeated_int32: []}.repeated_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{\n repeated_int32:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_one","expr":"has(TestAllTypes{repeated_int32: [1]}.repeated_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[\n 1~int\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_many","expr":"has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"map_none_implicit","expr":"has(TestAllTypes{}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_none_explicit","expr":"has(TestAllTypes{map_string_string: {}}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{\n map_string_string:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{}~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_one_default","expr":"has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"MT\"^#*expr.Constant_StringValue#:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n \"MT\"~string:\"\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_one","expr":"has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"one\"^#*expr.Constant_StringValue#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n \"one\"~string:\"uno\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_many","expr":"has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"one\"^#*expr.Constant_StringValue#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"two\"^#*expr.Constant_StringValue#:\"dos\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n \"one\"~string:\"uno\"~string,\n \"two\"~string:\"dos\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"required","expr":"has(TestRequired{required_int32: 4}.required_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestRequired{\n required_int32:4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.required_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestRequired{\n required_int32:4~int\n}~cel.expr.conformance.proto2.TestRequired^cel.expr.conformance.proto2.TestRequired.required_int32~test-only~~bool","type":"bool"},{"original":{"name":"optional_unset_no_default","expr":"has(TestAllTypes{}.single_sint32)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_sint32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_sint32~test-only~~bool","type":"bool"},{"original":{"name":"optional_set_no_default","expr":"has(TestAllTypes{single_sint32: -4}.single_sint32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_sint32:-4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_sint32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sint32:-4~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_sint32~test-only~~bool","type":"bool"},{"original":{"name":"optional_unset_with_default","expr":"has(TestAllTypes{}.single_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"optional_set_with_default","expr":"has(TestAllTypes{single_int32: 16}.single_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_int32:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32:16~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"optional_set_to_default","expr":"has(TestAllTypes{single_int32: -32}.single_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_int32:-32^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32:-32~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"optional_message_unset","expr":"has(TestAllTypes{}.standalone_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"optional_message_set","expr":"has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_message:cel.expr.conformance.proto2.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto2.TestAllTypes.NestedMessage^cel.expr.conformance.proto2.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"optional_enum_unset","expr":"has(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"optional_enum_set","expr":"has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"optional_enum_set_zero","expr":"has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"oneof_unset","expr":"has(TestAllTypes{}.single_nested_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_other_set","expr":"has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_set","expr":"has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_nested_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_nested_message:cel.expr.conformance.proto2.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto2.TestAllTypes.NestedMessage^cel.expr.conformance.proto2.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_set_default","expr":"has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_enum~test-only~~bool","type":"bool"}]},{"name":"set_null","tests":[{"original":{"name":"single_message","expr":"TestAllTypes{single_nested_message: null} == TestAllTypes{}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_nested_message:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_nested_message:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_any","expr":"TestAllTypes{single_any: null}.single_any","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_any:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_any:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"single_value","expr":"TestAllTypes{single_value: null}.single_value","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"single_duration","expr":"TestAllTypes{single_duration: null} == TestAllTypes{}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_duration:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_duration:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_timestamp","expr":"TestAllTypes{single_timestamp: null} == TestAllTypes{}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_timestamp:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_timestamp:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_scalar","expr":"TestAllTypes{single_bool: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n single_bool:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:25: expected type of field 'single_bool' is 'bool' but provided type is 'null'\n | TestAllTypes{single_bool: null} == TestAllTypes{}\n | ........................^"},{"original":{"name":"repeated","expr":"TestAllTypes{repeated_int32: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n repeated_int32:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: expected type of field 'repeated_int32' is 'list(int)' but provided type is 'null'\n | TestAllTypes{repeated_int32: null} == TestAllTypes{}\n | ...........................^"},{"original":{"name":"map","expr":"TestAllTypes{map_string_string: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n map_string_string:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:31: expected type of field 'map_string_string' is 'map(string, string)' but provided type is 'null'\n | TestAllTypes{map_string_string: null} == TestAllTypes{}\n | ..............................^"},{"original":{"name":"list_value","expr":"TestAllTypes{list_value: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n list_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: expected type of field 'list_value' is 'list(dyn)' but provided type is 'null'\n | TestAllTypes{list_value: null} == TestAllTypes{}\n | .......................^"},{"original":{"name":"single_struct","expr":"TestAllTypes{single_struct: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n single_struct:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'null'\n | TestAllTypes{single_struct: null} == TestAllTypes{}\n | ..........................^"}]},{"name":"quoted_fields","tests":[{"original":{"name":"set_field_with_quoted_name","expr":"TestAllTypes{`in`: true} == TestAllTypes{}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: set_field_with_quoted_name:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true} == TestAllTypes{}\n | .............^"},{"original":{"name":"get_field_with_quoted_name","expr":"TestAllTypes{`in`: true}.`in`","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"error":"ERROR: get_field_with_quoted_name:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .............^\nERROR: get_field_with_quoted_name:1:26: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .........................^"}]},{"name":"extensions_has","tests":[{"original":{"name":"package_scoped_int32","expr":"has(msg.`cel.expr.conformance.proto2.int32_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.int32_ext]":42}}}}},"error":"ERROR: package_scoped_int32:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.int32_ext`)\n | ........^"},{"original":{"name":"package_scoped_nested_ext","expr":"has(msg.`cel.expr.conformance.proto2.nested_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_ext]":{}}}}}},"error":"ERROR: package_scoped_nested_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.nested_ext`)\n | ........^"},{"original":{"name":"package_scoped_test_all_types_ext","expr":"has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.test_all_types_ext]":{}}}}}},"error":"ERROR: package_scoped_test_all_types_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)\n | ........^"},{"original":{"name":"package_scoped_test_all_types_nested_enum_ext","expr":"has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_enum_ext]":"BAR"}}}}},"error":"ERROR: package_scoped_test_all_types_nested_enum_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)\n | ........^"},{"original":{"name":"package_scoped_repeated_test_all_types","expr":"has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"error":"ERROR: package_scoped_repeated_test_all_types:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)\n | ........^"},{"original":{"name":"message_scoped_int64","expr":"has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]":"42"}}}}},"error":"ERROR: message_scoped_int64:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)\n | ........^"},{"original":{"name":"message_scoped_nested_ext","expr":"has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]":{}}}}}},"error":"ERROR: message_scoped_nested_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)\n | ........^"},{"original":{"name":"message_scoped_nested_enum_ext","expr":"has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]":"BAR"}}}}},"error":"ERROR: message_scoped_nested_enum_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)\n | ........^"},{"original":{"name":"message_scoped_repeated_test_all_types","expr":"has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"error":"ERROR: message_scoped_repeated_test_all_types:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)\n | ........^"}]},{"name":"extensions_get","tests":[{"original":{"name":"package_scoped_int32","expr":"msg.`cel.expr.conformance.proto2.int32_ext` == 42","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.int32_ext]":42}}}}},"error":"ERROR: package_scoped_int32:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.int32_ext` == 42\n | ....^"},{"original":{"name":"package_scoped_nested_ext","expr":"msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_ext]":{}}}}}},"error":"ERROR: package_scoped_nested_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^"},{"original":{"name":"package_scoped_test_all_types_ext","expr":"msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.test_all_types_ext]":{}}}}}},"error":"ERROR: package_scoped_test_all_types_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^"},{"original":{"name":"package_scoped_test_all_types_nested_enum_ext","expr":"msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_enum_ext]":"BAR"}}}}},"error":"ERROR: package_scoped_test_all_types_nested_enum_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n | ....^"},{"original":{"name":"package_scoped_repeated_test_all_types","expr":"msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"error":"ERROR: package_scoped_repeated_test_all_types:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]\n | ....^"},{"original":{"name":"message_scoped_int64","expr":"msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]":"42"}}}}},"error":"ERROR: message_scoped_int64:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42\n | ....^"},{"original":{"name":"message_scoped_nested_ext","expr":"msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]":{}}}}}},"error":"ERROR: message_scoped_nested_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^"},{"original":{"name":"message_scoped_nested_enum_ext","expr":"msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]":"BAR"}}}}},"error":"ERROR: message_scoped_nested_enum_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n | ....^"},{"original":{"name":"message_scoped_repeated_test_all_types","expr":"msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"error":"ERROR: message_scoped_repeated_test_all_types:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]\n | ....^"}]}]},{"name":"proto2_ext","suites":[{"name":"has_ext","tests":[{"original":{"name":"package_scoped_int32","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.int32_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.int32_ext]":42}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.int32_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.int32_ext~test-only~~bool","type":"bool"},{"original":{"name":"package_scoped_nested_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.nested_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_ext]":{}}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_ext~test-only~~bool","type":"bool"},{"original":{"name":"package_scoped_test_all_types_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.test_all_types_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.test_all_types_ext]":{}}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.test_all_types_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.test_all_types_ext~test-only~~bool","type":"bool"},{"original":{"name":"package_scoped_test_all_types_nested_enum_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.nested_enum_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_enum_ext]":"BAR"}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_enum_ext~test-only~~bool","type":"bool"},{"original":{"name":"package_scoped_repeated_test_all_types","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.repeated_test_all_types)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.repeated_test_all_types^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.repeated_test_all_types~test-only~~bool","type":"bool"},{"original":{"name":"message_scoped_int64","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]":"42"}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.int64_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext~test-only~~bool","type":"bool"},{"original":{"name":"message_scoped_nested_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]":{}}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_nested_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext~test-only~~bool","type":"bool"},{"original":{"name":"message_scoped_nested_enum_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]":"BAR"}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext~test-only~~bool","type":"bool"},{"original":{"name":"message_scoped_repeated_test_all_types","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_repeated_test_all_types^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types~test-only~~bool","type":"bool"}]},{"name":"get_ext","tests":[{"original":{"name":"package_scoped_int32","expr":"proto.getExt(msg, cel.expr.conformance.proto2.int32_ext) == 42","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.int32_ext]":42}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.int32_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.int32_ext~int,\n 42~int\n)~bool^equals","type":"bool"},{"original":{"name":"package_scoped_nested_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_ext]":{}}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"package_scoped_test_all_types_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.test_all_types_ext) == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.test_all_types_ext]":{}}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.test_all_types_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.test_all_types_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"package_scoped_test_all_types_nested_enum_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_enum_ext]":"BAR"}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.TestAllTypes^#*expr.Expr_SelectExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_enum_ext~int,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n)~bool^equals","type":"bool"},{"original":{"name":"package_scoped_repeated_test_all_types","expr":"proto.getExt(msg, cel.expr.conformance.proto2.repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.repeated_test_all_types^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.repeated_test_all_types~list(cel.expr.conformance.proto2.TestAllTypes),\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n ]~list(cel.expr.conformance.proto2.TestAllTypes)\n)~bool^equals","type":"bool"},{"original":{"name":"message_scoped_int64","expr":"proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext) == 42","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]":"42"}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.int64_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext~int,\n 42~int\n)~bool^equals","type":"bool"},{"original":{"name":"message_scoped_nested_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]":{}}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_nested_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"message_scoped_nested_enum_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]":"BAR"}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.TestAllTypes^#*expr.Expr_SelectExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext~int,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n)~bool^equals","type":"bool"},{"original":{"name":"message_scoped_repeated_test_all_types","expr":"proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_repeated_test_all_types^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types~list(cel.expr.conformance.proto2.TestAllTypes),\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n ]~list(cel.expr.conformance.proto2.TestAllTypes)\n)~bool^equals","type":"bool"}]}]},{"name":"proto3","suites":[{"name":"literal_singular","tests":[{"original":{"name":"int64_nocontainer","expr":"cel.expr.conformance.proto3.TestAllTypes{single_int64: 17}","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64":"17"}}},"ast":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"int32","expr":"TestAllTypes{single_int32: -34}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":-34}}},"ast":"TestAllTypes{\n single_int32:-34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32:-34~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"int64","expr":"TestAllTypes{single_int64: 17}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64":"17"}}},"ast":"TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"uint32","expr":"TestAllTypes{single_uint32: 1u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32":1}}},"ast":"TestAllTypes{\n single_uint32:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32:1u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"uint64","expr":"TestAllTypes{single_uint64: 9999u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint64":"9999"}}},"ast":"TestAllTypes{\n single_uint64:9999u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint64:9999u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"sint32","expr":"TestAllTypes{single_sint32: -3}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleSint32":-3}}},"ast":"TestAllTypes{\n single_sint32:-3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_sint32:-3~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"sint64","expr":"TestAllTypes{single_sint64: 255}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleSint64":"255"}}},"ast":"TestAllTypes{\n single_sint64:255^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_sint64:255~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"fixed32","expr":"TestAllTypes{single_fixed32: 43u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFixed32":43}}},"ast":"TestAllTypes{\n single_fixed32:43u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_fixed32:43u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"fixed64","expr":"TestAllTypes{single_fixed64: 1880u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFixed64":"1880"}}},"ast":"TestAllTypes{\n single_fixed64:1880u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_fixed64:1880u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"sfixed32","expr":"TestAllTypes{single_sfixed32: -404}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleSfixed32":-404}}},"ast":"TestAllTypes{\n single_sfixed32:-404^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_sfixed32:-404~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"sfixed64","expr":"TestAllTypes{single_sfixed64: -1}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleSfixed64":"-1"}}},"ast":"TestAllTypes{\n single_sfixed64:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_sfixed64:-1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"float","expr":"TestAllTypes{single_float: 3.1416}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloat":3.1416}}},"ast":"TestAllTypes{\n single_float:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float:3.1416~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"double","expr":"TestAllTypes{single_double: 6.022e23}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDouble":6.022e+23}}},"ast":"TestAllTypes{\n single_double:6.022e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double:6.022e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"bool","expr":"TestAllTypes{single_bool: true}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBool":true}}},"ast":"TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bool:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"string","expr":"TestAllTypes{single_string: 'foo'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleString":"foo"}}},"ast":"TestAllTypes{\n single_string:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_string:\"foo\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"bytes","expr":"TestAllTypes{single_bytes: b'\\377'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBytes":"/w=="}}},"ast":"TestAllTypes{\n single_bytes:b\"\\xff\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bytes:b\"\\xff\"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"literal_wellknown","tests":[{"original":{"name":"any","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 1}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleAny":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":1}}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:1~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"duration","expr":"TestAllTypes{single_duration: duration('123s')}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDuration":"123s"}}},"ast":"TestAllTypes{\n single_duration:duration(\n \"123s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_duration:duration(\n \"123s\"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"timestamp","expr":"TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleTimestamp":"2009-02-13T23:31:30Z"}}},"ast":"TestAllTypes{\n single_timestamp:timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_timestamp:timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"struct","expr":"TestAllTypes{single_struct: {'one': 1, 'two': 2}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStruct":{"one":1,"two":2}}}},"ast":"TestAllTypes{\n single_struct:{\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"two\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n \"one\"~string:1~int,\n \"two\"~string:2~int\n }~map(string, int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"value","expr":"TestAllTypes{single_value: 'foo'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":"foo"}}},"ast":"TestAllTypes{\n single_value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"foo\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"int64_wrapper","expr":"TestAllTypes{single_int64_wrapper: -321}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64Wrapper":"-321"}}},"ast":"TestAllTypes{\n single_int64_wrapper:-321^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:-321~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"int32_wrapper","expr":"TestAllTypes{single_int32_wrapper: -456}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":-456}}},"ast":"TestAllTypes{\n single_int32_wrapper:-456^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-456~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"double_wrapper","expr":"TestAllTypes{single_double_wrapper: 2.71828}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDoubleWrapper":2.71828}}},"ast":"TestAllTypes{\n single_double_wrapper:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:2.71828~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"float_wrapper","expr":"TestAllTypes{single_float_wrapper: 2.99792e8}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":299792000}}},"ast":"TestAllTypes{\n single_float_wrapper:2.99792e+08^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:2.99792e+08~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"uint64_wrapper","expr":"TestAllTypes{single_uint64_wrapper: 8675309u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint64Wrapper":"8675309"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:8675309u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:8675309u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"uint32_wrapper","expr":"TestAllTypes{single_uint32_wrapper: 987u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32Wrapper":987}}},"ast":"TestAllTypes{\n single_uint32_wrapper:987u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:987u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"string_wrapper","expr":"TestAllTypes{single_string_wrapper: 'hubba'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStringWrapper":"hubba"}}},"ast":"TestAllTypes{\n single_string_wrapper:\"hubba\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:\"hubba\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"bool_wrapper","expr":"TestAllTypes{single_bool_wrapper: true}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBoolWrapper":true}}},"ast":"TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"bytes_wrapper","expr":"TestAllTypes{single_bytes_wrapper: b'\\301\\103'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBytesWrapper":"wUM="}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"\\xc1C\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b\"\\xc1C\"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"singular_bind","tests":[{"original":{"name":"int32","expr":"x.single_int32","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":17}}}},"value":{"int64Value":"17"}},"ast":"x^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.single_int32~int","type":"int"},{"original":{"name":"int64","expr":"x.single_int64","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64":"-99"}}}},"value":{"int64Value":"-99"}},"ast":"x^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.single_int64~int","type":"int"}]},{"name":"empty_field","tests":[{"original":{"name":"scalar","expr":"TestAllTypes{}.single_fixed32","container":"cel.expr.conformance.proto3","value":{"uint64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_fixed32^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_fixed32~uint","type":"uint"},{"original":{"name":"nested_message","expr":"TestAllTypes{}.single_nested_message","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes.NestedMessage"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~cel.expr.conformance.proto3.TestAllTypes.NestedMessage","type":"cel.expr.conformance.proto3.TestAllTypes.NestedMessage"},{"original":{"name":"nested_message_subfield","expr":"TestAllTypes{}.single_nested_message.bb","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#.bb^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~cel.expr.conformance.proto3.TestAllTypes.NestedMessage.bb~int","type":"int"},{"original":{"name":"wkt","expr":"TestAllTypes{}.single_int64_wrapper","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"repeated_scalar","expr":"TestAllTypes{}.repeated_int64","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int64~list(int)","type":"list(int)"},{"original":{"name":"repeated_enum","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"repeated_nested","expr":"TestAllTypes{}.repeated_nested_message","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)","type":"list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)"},{"original":{"name":"map","expr":"TestAllTypes{}.map_string_string","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~map(string, string)","type":"map(string, string)"}]},{"name":"has","tests":[{"original":{"name":"undefined","expr":"has(TestAllTypes{}.no_such_field)","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"no_such_field"}]}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.no_such_field~test-only~^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:4: undefined field 'no_such_field'\n | has(TestAllTypes{}.no_such_field)\n | ...^"},{"original":{"name":"repeated_none_implicit","expr":"has(TestAllTypes{}.repeated_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_none_explicit","expr":"has(TestAllTypes{repeated_int32: []}.repeated_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n repeated_int32:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_one","expr":"has(TestAllTypes{repeated_int32: [1]}.repeated_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[\n 1~int\n ]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_many","expr":"has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"map_none_implicit","expr":"has(TestAllTypes{}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_none_explicit","expr":"has(TestAllTypes{map_string_string: {}}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n map_string_string:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{}~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_one_default","expr":"has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"MT\"^#*expr.Constant_StringValue#:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n \"MT\"~string:\"\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_one","expr":"has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"one\"^#*expr.Constant_StringValue#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n \"one\"~string:\"uno\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_many","expr":"has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"one\"^#*expr.Constant_StringValue#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"two\"^#*expr.Constant_StringValue#:\"dos\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n \"one\"~string:\"uno\"~string,\n \"two\"~string:\"dos\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"single_unset","expr":"has(TestAllTypes{}.single_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"single_set","expr":"has(TestAllTypes{single_int32: 16}.single_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_int32:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32:16~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"single_set_to_default","expr":"has(TestAllTypes{single_int32: 0}.single_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_int32:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"single_message_unset","expr":"has(TestAllTypes{}.standalone_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"single_message_set","expr":"has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{bb: 123}}.standalone_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{\n bb:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{\n bb:123~int\n }~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"single_message_set_to_default","expr":"has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"single_enum_unset","expr":"has(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"single_enum_set","expr":"has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"single_enum_set_zero","expr":"has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"oneof_unset","expr":"has(TestAllTypes{}.single_nested_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_other_set","expr":"has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_set","expr":"has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_nested_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_nested_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_set_default","expr":"has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_enum~test-only~~bool","type":"bool"}]},{"name":"set_null","tests":[{"original":{"name":"single_message","expr":"TestAllTypes{single_nested_message: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_nested_message:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_nested_message:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_any","expr":"TestAllTypes{single_any: null}.single_any","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_any:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"single_value","expr":"TestAllTypes{single_value: null}.single_value","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"single_duration","expr":"TestAllTypes{single_duration: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_duration:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_duration:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_timestamp","expr":"TestAllTypes{single_timestamp: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_timestamp:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_timestamp:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_scalar","expr":"TestAllTypes{single_bool: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n single_bool:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:25: expected type of field 'single_bool' is 'bool' but provided type is 'null'\n | TestAllTypes{single_bool: null} == TestAllTypes{}\n | ........................^"},{"original":{"name":"repeated","expr":"TestAllTypes{repeated_int32: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n repeated_int32:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: expected type of field 'repeated_int32' is 'list(int)' but provided type is 'null'\n | TestAllTypes{repeated_int32: null} == TestAllTypes{}\n | ...........................^"},{"original":{"name":"map","expr":"TestAllTypes{map_string_string: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n map_string_string:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:31: expected type of field 'map_string_string' is 'map(string, string)' but provided type is 'null'\n | TestAllTypes{map_string_string: null} == TestAllTypes{}\n | ..............................^"},{"original":{"name":"list_value","expr":"TestAllTypes{list_value: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n list_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: expected type of field 'list_value' is 'list(dyn)' but provided type is 'null'\n | TestAllTypes{list_value: null} == TestAllTypes{}\n | .......................^"},{"original":{"name":"single_struct","expr":"TestAllTypes{single_struct: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n single_struct:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'null'\n | TestAllTypes{single_struct: null} == TestAllTypes{}\n | ..........................^"}]},{"name":"quoted_fields","tests":[{"original":{"name":"set_field","expr":"TestAllTypes{`in`: true} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"error":"ERROR: set_field:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true} == TestAllTypes{}\n | .............^"},{"original":{"name":"get_field","expr":"TestAllTypes{`in`: true}.`in`","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"error":"ERROR: get_field:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .............^\nERROR: get_field:1:26: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .........................^"}]}]},{"name":"string","suites":[{"name":"size","tests":[{"original":{"name":"empty","expr":"size('')","value":{"int64Value":"0"}},"ast":"size(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"\"~string\n)~int^size_string","type":"int"},{"original":{"name":"one_ascii","expr":"size('A')","value":{"int64Value":"1"}},"ast":"size(\n \"A\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"A\"~string\n)~int^size_string","type":"int"},{"original":{"name":"one_unicode","expr":"size('ÿ')","value":{"int64Value":"1"}},"ast":"size(\n \"ÿ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"ÿ\"~string\n)~int^size_string","type":"int"},{"original":{"name":"ascii","expr":"size('four')","value":{"int64Value":"4"}},"ast":"size(\n \"four\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"four\"~string\n)~int^size_string","type":"int"},{"original":{"name":"unicode","expr":"size('πέντε')","value":{"int64Value":"5"}},"ast":"size(\n \"πέντε\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"πέντε\"~string\n)~int^size_string","type":"int"},{"original":{"name":"bytes_empty","expr":"size(b'')","value":{"int64Value":"0"}},"ast":"size(\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n b\"\"~bytes\n)~int^size_bytes","type":"int"},{"original":{"name":"bytes","expr":"size(b'abc')","value":{"int64Value":"3"}},"ast":"size(\n b\"abc\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n b\"abc\"~bytes\n)~int^size_bytes","type":"int"}]},{"name":"starts_with","tests":[{"original":{"name":"basic_true","expr":"'foobar'.startsWith('foo')","value":{"boolValue":true}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.startsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.startsWith(\n \"foo\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"basic_false","expr":"'foobar'.startsWith('bar')","value":{"boolValue":false}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.startsWith(\n \"bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.startsWith(\n \"bar\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"empty_target","expr":"''.startsWith('foo')","value":{"boolValue":false}},"ast":"\"\"^#*expr.Constant_StringValue#.startsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.startsWith(\n \"foo\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"empty_arg","expr":"'foobar'.startsWith('')","value":{"boolValue":true}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.startsWith(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.startsWith(\n \"\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"empty_empty","expr":"''.startsWith('')","value":{"boolValue":true}},"ast":"\"\"^#*expr.Constant_StringValue#.startsWith(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.startsWith(\n \"\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"unicode","expr":"'завтра'.startsWith('за')","value":{"boolValue":true}},"ast":"\"завтра\"^#*expr.Constant_StringValue#.startsWith(\n \"за\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"завтра\"~string.startsWith(\n \"за\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"unicode_smp","expr":"'🐱😀😛'.startsWith('🐱')","value":{"boolValue":true}},"ast":"\"🐱😀😛\"^#*expr.Constant_StringValue#.startsWith(\n \"🐱\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"🐱😀😛\"~string.startsWith(\n \"🐱\"~string\n)~bool^starts_with_string","type":"bool"}]},{"name":"ends_with","tests":[{"original":{"name":"basic_true","expr":"'foobar'.endsWith('bar')","value":{"boolValue":true}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.endsWith(\n \"bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.endsWith(\n \"bar\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"basic_false","expr":"'foobar'.endsWith('foo')","value":{"boolValue":false}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.endsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.endsWith(\n \"foo\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"empty_target","expr":"''.endsWith('foo')","value":{"boolValue":false}},"ast":"\"\"^#*expr.Constant_StringValue#.endsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.endsWith(\n \"foo\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"empty_arg","expr":"'foobar'.endsWith('')","value":{"boolValue":true}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.endsWith(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.endsWith(\n \"\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"empty_empty","expr":"''.endsWith('')","value":{"boolValue":true}},"ast":"\"\"^#*expr.Constant_StringValue#.endsWith(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.endsWith(\n \"\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"unicode","expr":"'forté'.endsWith('té')","value":{"boolValue":true}},"ast":"\"forté\"^#*expr.Constant_StringValue#.endsWith(\n \"té\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"forté\"~string.endsWith(\n \"té\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"unicode_smp","expr":"'🐱😀😛'.endsWith('😛')","value":{"boolValue":true}},"ast":"\"🐱😀😛\"^#*expr.Constant_StringValue#.endsWith(\n \"😛\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"🐱😀😛\"~string.endsWith(\n \"😛\"~string\n)~bool^ends_with_string","type":"bool"}]},{"name":"matches","tests":[{"original":{"name":"basic","expr":"'hubba'.matches('ubb')","value":{"boolValue":true}},"ast":"\"hubba\"^#*expr.Constant_StringValue#.matches(\n \"ubb\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"hubba\"~string.matches(\n \"ubb\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"empty_target","expr":"''.matches('foo|bar')","value":{"boolValue":false}},"ast":"\"\"^#*expr.Constant_StringValue#.matches(\n \"foo|bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.matches(\n \"foo|bar\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"empty_arg","expr":"'cows'.matches('')","value":{"boolValue":true}},"ast":"\"cows\"^#*expr.Constant_StringValue#.matches(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"cows\"~string.matches(\n \"\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"empty_empty","expr":"''.matches('')","value":{"boolValue":true}},"ast":"\"\"^#*expr.Constant_StringValue#.matches(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.matches(\n \"\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"re_concat","expr":"'abcd'.matches('bc')","value":{"boolValue":true}},"ast":"\"abcd\"^#*expr.Constant_StringValue#.matches(\n \"bc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"abcd\"~string.matches(\n \"bc\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"re_alt","expr":"'grey'.matches('gr(a|e)y')","value":{"boolValue":true}},"ast":"\"grey\"^#*expr.Constant_StringValue#.matches(\n \"gr(a|e)y\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"grey\"~string.matches(\n \"gr(a|e)y\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"re_rep","expr":"'banana'.matches('ba(na)*')","value":{"boolValue":true}},"ast":"\"banana\"^#*expr.Constant_StringValue#.matches(\n \"ba(na)*\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"banana\"~string.matches(\n \"ba(na)*\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"unicode","expr":"'mañana'.matches('a+ñ+a+')","value":{"boolValue":true}},"ast":"\"mañana\"^#*expr.Constant_StringValue#.matches(\n \"a+ñ+a+\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"mañana\"~string.matches(\n \"a+ñ+a+\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"unicode_smp","expr":"'🐱😀😀'.matches('(a|😀){2}')","value":{"boolValue":true}},"ast":"\"🐱😀😀\"^#*expr.Constant_StringValue#.matches(\n \"(a|😀){2}\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"🐱😀😀\"~string.matches(\n \"(a|😀){2}\"~string\n)~bool^matches_string","type":"bool"}]},{"name":"concatenation","tests":[{"original":{"name":"concat_true","expr":"'he' + 'llo'","value":{"stringValue":"hello"}},"ast":"_+_(\n \"he\"^#*expr.Constant_StringValue#,\n \"llo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"he\"~string,\n \"llo\"~string\n)~string^add_string","type":"string"},{"original":{"name":"concat_with_spaces","expr":"'hello' + ' ' == 'hello'","value":{"boolValue":false}},"ast":"_==_(\n _+_(\n \"hello\"^#*expr.Constant_StringValue#,\n \" \"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"hello\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n \"hello\"~string,\n \" \"~string\n )~string^add_string,\n \"hello\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"concat_empty_string_beginning","expr":"'' + 'abc'","value":{"stringValue":"abc"}},"ast":"_+_(\n \"\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"\"~string,\n \"abc\"~string\n)~string^add_string","type":"string"},{"original":{"name":"concat_empty_string_end","expr":"'abc' + ''","value":{"stringValue":"abc"}},"ast":"_+_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"abc\"~string,\n \"\"~string\n)~string^add_string","type":"string"},{"original":{"name":"concat_empty_with_empty","expr":"'' + ''","value":{"stringValue":""}},"ast":"_+_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"\"~string,\n \"\"~string\n)~string^add_string","type":"string"},{"original":{"name":"unicode_unicode","expr":"'¢' + 'ÿ' + 'Ȁ'","value":{"stringValue":"¢ÿȀ"}},"ast":"_+_(\n _+_(\n \"¢\"^#*expr.Constant_StringValue#,\n \"ÿ\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"Ȁ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _+_(\n \"¢\"~string,\n \"ÿ\"~string\n )~string^add_string,\n \"Ȁ\"~string\n)~string^add_string","type":"string"},{"original":{"name":"ascii_unicode","expr":"'r' + 'ô' + 'le'","value":{"stringValue":"rôle"}},"ast":"_+_(\n _+_(\n \"r\"^#*expr.Constant_StringValue#,\n \"ô\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"le\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _+_(\n \"r\"~string,\n \"ô\"~string\n )~string^add_string,\n \"le\"~string\n)~string^add_string","type":"string"},{"original":{"name":"ascii_unicode_unicode_smp","expr":"'a' + 'ÿ' + '🐱'","value":{"stringValue":"aÿ🐱"}},"ast":"_+_(\n _+_(\n \"a\"^#*expr.Constant_StringValue#,\n \"ÿ\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"🐱\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _+_(\n \"a\"~string,\n \"ÿ\"~string\n )~string^add_string,\n \"🐱\"~string\n)~string^add_string","type":"string"},{"original":{"name":"empty_unicode","expr":"'' + 'Ω' + ''","value":{"stringValue":"Ω"}},"ast":"_+_(\n _+_(\n \"\"^#*expr.Constant_StringValue#,\n \"Ω\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _+_(\n \"\"~string,\n \"Ω\"~string\n )~string^add_string,\n \"\"~string\n)~string^add_string","type":"string"}]},{"name":"contains","tests":[{"original":{"name":"contains_true","expr":"'hello'.contains('he')","value":{"boolValue":true}},"ast":"\"hello\"^#*expr.Constant_StringValue#.contains(\n \"he\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"hello\"~string.contains(\n \"he\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_empty","expr":"'hello'.contains('')","value":{"boolValue":true}},"ast":"\"hello\"^#*expr.Constant_StringValue#.contains(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"hello\"~string.contains(\n \"\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_false","expr":"'hello'.contains('ol')","value":{"boolValue":false}},"ast":"\"hello\"^#*expr.Constant_StringValue#.contains(\n \"ol\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"hello\"~string.contains(\n \"ol\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_multiple","expr":"'abababc'.contains('ababc')","value":{"boolValue":true}},"ast":"\"abababc\"^#*expr.Constant_StringValue#.contains(\n \"ababc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"abababc\"~string.contains(\n \"ababc\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_unicode","expr":"'Straße'.contains('aß')","value":{"boolValue":true}},"ast":"\"Straße\"^#*expr.Constant_StringValue#.contains(\n \"aß\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"Straße\"~string.contains(\n \"aß\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_unicode_smp","expr":"'🐱😀😁'.contains('😀')","value":{"boolValue":true}},"ast":"\"🐱😀😁\"^#*expr.Constant_StringValue#.contains(\n \"😀\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"🐱😀😁\"~string.contains(\n \"😀\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"empty_contains","expr":"''.contains('something')","value":{"boolValue":false}},"ast":"\"\"^#*expr.Constant_StringValue#.contains(\n \"something\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.contains(\n \"something\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"empty_empty","expr":"''.contains('')","value":{"boolValue":true}},"ast":"\"\"^#*expr.Constant_StringValue#.contains(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.contains(\n \"\"~string\n)~bool^contains_string","type":"bool"}]},{"name":"bytes_concat","tests":[{"original":{"name":"concat","expr":"b'abc' + b'def'","value":{"bytesValue":"YWJjZGVm"}},"ast":"_+_(\n b\"abc\"^#*expr.Constant_BytesValue#,\n b\"def\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n b\"abc\"~bytes,\n b\"def\"~bytes\n)~bytes^add_bytes","type":"bytes"},{"original":{"name":"left_unit","expr":"b'' + b'\\xffoo'","value":{"bytesValue":"/29v"}},"ast":"_+_(\n b\"\"^#*expr.Constant_BytesValue#,\n b\"\\xffoo\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n b\"\"~bytes,\n b\"\\xffoo\"~bytes\n)~bytes^add_bytes","type":"bytes"},{"original":{"name":"right_unit","expr":"b'zxy' + b''","value":{"bytesValue":"enh5"}},"ast":"_+_(\n b\"zxy\"^#*expr.Constant_BytesValue#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n b\"zxy\"~bytes,\n b\"\"~bytes\n)~bytes^add_bytes","type":"bytes"},{"original":{"name":"empty_empty","expr":"b'' + b''","value":{"bytesValue":""}},"ast":"_+_(\n b\"\"^#*expr.Constant_BytesValue#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n b\"\"~bytes,\n b\"\"~bytes\n)~bytes^add_bytes","type":"bytes"}]}]},{"name":"string_ext","suites":[{"name":"char_at","tests":[{"original":{"name":"middle_index","expr":"'tacocat'.charAt(3)","value":{"stringValue":"o"}},"ast":"\"tacocat\"^#*expr.Constant_StringValue#.charAt(\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"tacocat\"~string.charAt(\n 3~int\n)~string^string_char_at_int","type":"string"},{"original":{"name":"end_index","expr":"'tacocat'.charAt(7)","value":{"stringValue":""}},"ast":"\"tacocat\"^#*expr.Constant_StringValue#.charAt(\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"tacocat\"~string.charAt(\n 7~int\n)~string^string_char_at_int","type":"string"},{"original":{"name":"multiple","expr":"'©αT'.charAt(0) == '©' \u0026\u0026 '©αT'.charAt(1) == 'α' \u0026\u0026 '©αT'.charAt(2) == 'T'"},"ast":"_\u0026\u0026_(\n _\u0026\u0026_(\n _==_(\n \"©αT\"^#*expr.Constant_StringValue#.charAt(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"©\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n \"©αT\"^#*expr.Constant_StringValue#.charAt(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"α\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _==_(\n \"©αT\"^#*expr.Constant_StringValue#.charAt(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"T\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _\u0026\u0026_(\n _==_(\n \"©αT\"~string.charAt(\n 0~int\n )~string^string_char_at_int,\n \"©\"~string\n )~bool^equals,\n _==_(\n \"©αT\"~string.charAt(\n 1~int\n )~string^string_char_at_int,\n \"α\"~string\n )~bool^equals\n )~bool^logical_and,\n _==_(\n \"©αT\"~string.charAt(\n 2~int\n )~string^string_char_at_int,\n \"T\"~string\n )~bool^equals\n)~bool^logical_and","type":"bool"}]},{"name":"index_of","tests":[{"original":{"name":"empty_index","expr":"'tacocat'.indexOf('')","value":{"int64Value":"0"}},"ast":"\"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"tacocat\"~string.indexOf(\n \"\"~string\n)~int^string_index_of_string","type":"int"},{"original":{"name":"string_index","expr":"'tacocat'.indexOf('ac')","value":{"int64Value":"1"}},"ast":"\"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"ac\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"tacocat\"~string.indexOf(\n \"ac\"~string\n)~int^string_index_of_string","type":"int"},{"original":{"name":"nomatch","expr":"'tacocat'.indexOf('none') == -1"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"none\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"none\"~string\n )~int^string_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"empty_index","expr":"'tacocat'.indexOf('', 3) == 3"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 3~int\n)~bool^equals","type":"bool"},{"original":{"name":"char_index","expr":"'tacocat'.indexOf('a', 3) == 5"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"a\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"a\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 5~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_index","expr":"'tacocat'.indexOf('at', 3) == 5"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"at\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"at\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 5~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_char","expr":"'ta©o©αT'.indexOf('©') == 2"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.indexOf(\n \"©\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.indexOf(\n \"©\"~string\n )~int^string_index_of_string,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_char_index","expr":"'ta©o©αT'.indexOf('©', 3) == 4"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.indexOf(\n \"©\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.indexOf(\n \"©\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 4~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_string_index","expr":"'ta©o©αT'.indexOf('©αT', 3) == 4"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.indexOf(\n \"©αT\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.indexOf(\n \"©αT\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 4~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_string_nomatch_index","expr":"'ta©o©αT'.indexOf('©α', 5) == -1"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.indexOf(\n \"©α\"^#*expr.Constant_StringValue#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.indexOf(\n \"©α\"~string,\n 5~int\n )~int^string_index_of_string_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"char_index","expr":"'ijk'.indexOf('k') == 2"},"ast":"_==_(\n \"ijk\"^#*expr.Constant_StringValue#.indexOf(\n \"k\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ijk\"~string.indexOf(\n \"k\"~string\n )~int^string_index_of_string,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_fullmatch","expr":"'hello wello'.indexOf('hello wello') == 0"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.indexOf(\n \"hello wello\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.indexOf(\n \"hello wello\"~string\n )~int^string_index_of_string,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_index","expr":"'hello wello'.indexOf('ello', 6) == 7"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.indexOf(\n \"ello\"^#*expr.Constant_StringValue#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.indexOf(\n \"ello\"~string,\n 6~int\n )~int^string_index_of_string_int,\n 7~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_nomatch_index","expr":"'hello wello'.indexOf('elbo room!!') == -1"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.indexOf(\n \"elbo room!!\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.indexOf(\n \"elbo room!!\"~string\n )~int^string_index_of_string,\n -1~int\n)~bool^equals","type":"bool"}]},{"name":"last_index_of","tests":[{"original":{"name":"empty_string","expr":"''.lastIndexOf('@@') == -1"},"ast":"_==_(\n \"\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"@@\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\"~string.lastIndexOf(\n \"@@\"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"empty_argument","expr":"'tacocat'.lastIndexOf('') == 7"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"\"~string\n )~int^string_last_index_of_string,\n 7~int\n)~bool^equals","type":"bool"},{"original":{"name":"string","expr":"'tacocat'.lastIndexOf('at') == 5"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"at\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"at\"~string\n )~int^string_last_index_of_string,\n 5~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_nomatch","expr":"'tacocat'.lastIndexOf('none') == -1"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"none\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"none\"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"empty_index","expr":"'tacocat'.lastIndexOf('', 3) == 3"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"\"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 3~int\n)~bool^equals","type":"bool"},{"original":{"name":"char_index","expr":"'tacocat'.lastIndexOf('a', 3) == 1"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"a\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"a\"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_char","expr":"'ta©o©αT'.lastIndexOf('©') == 4"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"©\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.lastIndexOf(\n \"©\"~string\n )~int^string_last_index_of_string,\n 4~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_char_index","expr":"'ta©o©αT'.lastIndexOf('©', 3) == 2"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"©\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.lastIndexOf(\n \"©\"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_string_index","expr":"'ta©o©αT'.lastIndexOf('©α', 4) == 4"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"©α\"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.lastIndexOf(\n \"©α\"~string,\n 4~int\n )~int^string_last_index_of_string_int,\n 4~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_string_index","expr":"'hello wello'.lastIndexOf('ello', 6) == 1"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"ello\"^#*expr.Constant_StringValue#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.lastIndexOf(\n \"ello\"~string,\n 6~int\n )~int^string_last_index_of_string_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_string_nomatch","expr":"'hello wello'.lastIndexOf('low') == -1"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"low\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.lastIndexOf(\n \"low\"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_string_with_space_nomatch","expr":"'hello wello'.lastIndexOf('elbo room!!') == -1"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"elbo room!!\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.lastIndexOf(\n \"elbo room!!\"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_fullmatch","expr":"'hello wello'.lastIndexOf('hello wello') == 0"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"hello wello\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.lastIndexOf(\n \"hello wello\"~string\n )~int^string_last_index_of_string,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"repeated_string","expr":"'bananananana'.lastIndexOf('nana', 7) == 6"},"ast":"_==_(\n \"bananananana\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"nana\"^#*expr.Constant_StringValue#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 6^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"bananananana\"~string.lastIndexOf(\n \"nana\"~string,\n 7~int\n )~int^string_last_index_of_string_int,\n 6~int\n)~bool^equals","type":"bool"}]},{"name":"ascii_casing","tests":[{"original":{"name":"lowerascii","expr":"'TacoCat'.lowerAscii() == 'tacocat'"},"ast":"_==_(\n \"TacoCat\"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n \"tacocat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"TacoCat\"~string.lowerAscii()~string^string_lower_ascii,\n \"tacocat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"lowerascii_unicode","expr":"'TacoCÆt'.lowerAscii() == 'tacocÆt'"},"ast":"_==_(\n \"TacoCÆt\"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n \"tacocÆt\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"TacoCÆt\"~string.lowerAscii()~string^string_lower_ascii,\n \"tacocÆt\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"lowerascii_unicode_with_space","expr":"'TacoCÆt Xii'.lowerAscii() == 'tacocÆt xii'"},"ast":"_==_(\n \"TacoCÆt Xii\"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n \"tacocÆt xii\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"TacoCÆt Xii\"~string.lowerAscii()~string^string_lower_ascii,\n \"tacocÆt xii\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"upperascii","expr":"'tacoCat'.upperAscii() == 'TACOCAT'"},"ast":"_==_(\n \"tacoCat\"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n \"TACOCAT\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacoCat\"~string.upperAscii()~string^string_upper_ascii,\n \"TACOCAT\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"upperascii_unicode","expr":"'tacoCαt'.upperAscii() == 'TACOCαT'"},"ast":"_==_(\n \"tacoCαt\"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n \"TACOCαT\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacoCαt\"~string.upperAscii()~string^string_upper_ascii,\n \"TACOCαT\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"upperascii_unicode_with_space","expr":"'TacoCÆt Xii'.upperAscii() == 'TACOCÆT XII'"},"ast":"_==_(\n \"TacoCÆt Xii\"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n \"TACOCÆT XII\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"TacoCÆt Xii\"~string.upperAscii()~string^string_upper_ascii,\n \"TACOCÆT XII\"~string\n)~bool^equals","type":"bool"}]},{"name":"replace","tests":[{"original":{"name":"no_placeholder","expr":"'12 days 12 hours'.replace('{0}', '2') == '12 days 12 hours'"},"ast":"_==_(\n \"12 days 12 hours\"^#*expr.Constant_StringValue#.replace(\n \"{0}\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"12 days 12 hours\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"12 days 12 hours\"~string.replace(\n \"{0}\"~string,\n \"2\"~string\n )~string^string_replace_string_string,\n \"12 days 12 hours\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"basic","expr":"'{0} days {0} hours'.replace('{0}', '2') == '2 days 2 hours'"},"ast":"_==_(\n \"{0} days {0} hours\"^#*expr.Constant_StringValue#.replace(\n \"{0}\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"2 days 2 hours\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"{0} days {0} hours\"~string.replace(\n \"{0}\"~string,\n \"2\"~string\n )~string^string_replace_string_string,\n \"2 days 2 hours\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"chained","expr":"'{0} days {0} hours'.replace('{0}', '2', 1).replace('{0}', '23') == '2 days 23 hours'"},"ast":"_==_(\n \"{0} days {0} hours\"^#*expr.Constant_StringValue#.replace(\n \"{0}\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.replace(\n \"{0}\"^#*expr.Constant_StringValue#,\n \"23\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"2 days 23 hours\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"{0} days {0} hours\"~string.replace(\n \"{0}\"~string,\n \"2\"~string,\n 1~int\n )~string^string_replace_string_string_int.replace(\n \"{0}\"~string,\n \"23\"~string\n )~string^string_replace_string_string,\n \"2 days 23 hours\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode","expr":"'1 ©αT taco'.replace('αT', 'o©α') == '1 ©o©α taco'"},"ast":"_==_(\n \"1 ©αT taco\"^#*expr.Constant_StringValue#.replace(\n \"αT\"^#*expr.Constant_StringValue#,\n \"o©α\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"1 ©o©α taco\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"1 ©αT taco\"~string.replace(\n \"αT\"~string,\n \"o©α\"~string\n )~string^string_replace_string_string,\n \"1 ©o©α taco\"~string\n)~bool^equals","type":"bool"}]},{"name":"split","tests":[{"original":{"name":"empty","expr":"'hello world'.split(' ') == ['hello', 'world']"},"ast":"_==_(\n \"hello world\"^#*expr.Constant_StringValue#.split(\n \" \"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"hello\"^#*expr.Constant_StringValue#,\n \"world\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello world\"~string.split(\n \" \"~string\n )~list(string)^string_split_string,\n [\n \"hello\"~string,\n \"world\"~string\n ]~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"zero_limit","expr":"'hello world events!'.split(' ', 0) == []"},"ast":"_==_(\n \"hello world events!\"^#*expr.Constant_StringValue#.split(\n \" \"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello world events!\"~string.split(\n \" \"~string,\n 0~int\n )~list(string)^string_split_string_int,\n []~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"one_limit","expr":"'hello world events!'.split(' ', 1) == ['hello world events!']"},"ast":"_==_(\n \"hello world events!\"^#*expr.Constant_StringValue#.split(\n \" \"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"hello world events!\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello world events!\"~string.split(\n \" \"~string,\n 1~int\n )~list(string)^string_split_string_int,\n [\n \"hello world events!\"~string\n ]~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_negative_limit","expr":"'o©o©o©o'.split('©', -1) == ['o', 'o', 'o', 'o']"},"ast":"_==_(\n \"o©o©o©o\"^#*expr.Constant_StringValue#.split(\n \"©\"^#*expr.Constant_StringValue#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"o\"^#*expr.Constant_StringValue#,\n \"o\"^#*expr.Constant_StringValue#,\n \"o\"^#*expr.Constant_StringValue#,\n \"o\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"o©o©o©o\"~string.split(\n \"©\"~string,\n -1~int\n )~list(string)^string_split_string_int,\n [\n \"o\"~string,\n \"o\"~string,\n \"o\"~string,\n \"o\"~string\n ]~list(string)\n)~bool^equals","type":"bool"}]},{"name":"substring","tests":[{"original":{"name":"start","expr":"'tacocat'.substring(4) == 'cat'"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 4~int\n )~string^string_substring_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"start_with_max_length","expr":"'tacocat'.substring(7) == ''"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 7~int\n )~string^string_substring_int,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"start_and_end","expr":"'tacocat'.substring(0, 4) == 'taco'"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 0^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"taco\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 0~int,\n 4~int\n )~string^string_substring_int_int,\n \"taco\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"start_and_end_equal_value","expr":"'tacocat'.substring(4, 4) == ''"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 4~int,\n 4~int\n )~string^string_substring_int_int,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_start_and_end","expr":"'ta©o©αT'.substring(2, 6) == '©o©α'"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.substring(\n 2^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"©o©α\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.substring(\n 2~int,\n 6~int\n )~string^string_substring_int_int,\n \"©o©α\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_start_and_end_equal_value","expr":"'ta©o©αT'.substring(7, 7) == ''"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.substring(\n 7^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.substring(\n 7~int,\n 7~int\n )~string^string_substring_int_int,\n \"\"~string\n)~bool^equals","type":"bool"}]},{"name":"trim","tests":[{"original":{"name":"blank_spaces_escaped_chars","expr":"' \\f\\n\\r\\t\\vtext '.trim() == 'text'"},"ast":"_==_(\n \" \\f\\n\\r\\t\\vtext \"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"text\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \" \\f\\n\\r\\t\\vtext \"~string.trim()~string^string_trim,\n \"text\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_space_chars_1","expr":"'\\u0085\\u00a0\\u1680text'.trim() == 'text'"},"ast":"_==_(\n \"\\u0085\\u00a0\\u1680text\"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"text\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\\u0085\\u00a0\\u1680text\"~string.trim()~string^string_trim,\n \"text\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_space_chars_2","expr":"'text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009'.trim() == 'text'"},"ast":"_==_(\n \"text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009\"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"text\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009\"~string.trim()~string^string_trim,\n \"text\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_space_chars_3","expr":"'\\u200atext\\u2028\\u2029\\u202F\\u205F\\u3000'.trim() == 'text'"},"ast":"_==_(\n \"\\u200atext\\u2028\\u2029\\u202f\\u205f\\u3000\"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"text\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\\u200atext\\u2028\\u2029\\u202f\\u205f\\u3000\"~string.trim()~string^string_trim,\n \"text\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_no_trim","expr":"'\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'.trim() == '\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'"},"ast":"_==_(\n \"\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff\"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff\"~string.trim()~string^string_trim,\n \"\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff\"~string\n)~bool^equals","type":"bool"}]},{"name":"join","tests":[{"original":{"name":"empty_separator","expr":"['x', 'y'].join() == 'xy'"},"ast":"_==_(\n [\n \"x\"^#*expr.Constant_StringValue#,\n \"y\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#.join()^#*expr.Expr_CallExpr#,\n \"xy\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n \"x\"~string,\n \"y\"~string\n ]~list(string).join()~string^list_join,\n \"xy\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"dash_separator","expr":"['x', 'y'].join('-') == 'x-y'"},"ast":"_==_(\n [\n \"x\"^#*expr.Constant_StringValue#,\n \"y\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#.join(\n \"-\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"x-y\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n \"x\"~string,\n \"y\"~string\n ]~list(string).join(\n \"-\"~string\n )~string^list_join_string,\n \"x-y\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"empty_string_empty_separator","expr":"[].join() == ''"},"ast":"_==_(\n []^#*expr.Expr_ListExpr#.join()^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n []~list(string).join()~string^list_join,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"empty_string_dash_separator","expr":"[].join('-') == ''"},"ast":"_==_(\n []^#*expr.Expr_ListExpr#.join(\n \"-\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n []~list(string).join(\n \"-\"~string\n )~string^list_join_string,\n \"\"~string\n)~bool^equals","type":"bool"}]},{"name":"quote","tests":[{"original":{"name":"multiline","expr":"strings.quote(\"first\\nsecond\") == \"\\\"first\\\\nsecond\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"first\\nsecond\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"first\\\\nsecond\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"first\\nsecond\"~string\n )~string^strings_quote,\n \"\\\"first\\\\nsecond\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"escaped","expr":"strings.quote(\"bell\\a\") == \"\\\"bell\\\\a\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"bell\\a\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"bell\\\\a\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"bell\\a\"~string\n )~string^strings_quote,\n \"\\\"bell\\\\a\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"backspace","expr":"strings.quote(\"\\bbackspace\") == \"\\\"\\\\bbackspace\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"\\bbackspace\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"\\\\bbackspace\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"\\bbackspace\"~string\n )~string^strings_quote,\n \"\\\"\\\\bbackspace\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"form_feed","expr":"strings.quote(\"\\fform feed\") == \"\\\"\\\\fform feed\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"\\fform feed\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"\\\\fform feed\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"\\fform feed\"~string\n )~string^strings_quote,\n \"\\\"\\\\fform feed\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"carriage_return","expr":"strings.quote(\"carriage \\r return\") == \"\\\"carriage \\\\r return\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"carriage \\r return\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"carriage \\\\r return\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"carriage \\r return\"~string\n )~string^strings_quote,\n \"\\\"carriage \\\\r return\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"horizontal_tab","expr":"strings.quote(\"horizontal tab\\t\") == \"\\\"horizontal tab\\\\t\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"horizontal tab\\t\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"horizontal tab\\\\t\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"horizontal tab\\t\"~string\n )~string^strings_quote,\n \"\\\"horizontal tab\\\\t\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"vertical_tab","expr":"strings.quote(\"vertical \\v tab\") == \"\\\"vertical \\\\v tab\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"vertical \\v tab\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"vertical \\\\v tab\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"vertical \\v tab\"~string\n )~string^strings_quote,\n \"\\\"vertical \\\\v tab\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"double_slash","expr":"strings.quote(\"double \\\\\\\\ slash\") == \"\\\"double \\\\\\\\\\\\\\\\ slash\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"double \\\\\\\\ slash\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"double \\\\\\\\\\\\\\\\ slash\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"double \\\\\\\\ slash\"~string\n )~string^strings_quote,\n \"\\\"double \\\\\\\\\\\\\\\\ slash\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"two_escape_sequences","expr":"strings.quote(\"two escape sequences \\\\a\\\\n\") == \"\\\"two escape sequences \\\\\\\\a\\\\\\\\n\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"two escape sequences \\\\a\\\\n\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"two escape sequences \\\\\\\\a\\\\\\\\n\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"two escape sequences \\\\a\\\\n\"~string\n )~string^strings_quote,\n \"\\\"two escape sequences \\\\\\\\a\\\\\\\\n\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"verbatim","expr":"strings.quote(\"verbatim\") == \"\\\"verbatim\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"verbatim\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"verbatim\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"verbatim\"~string\n )~string^strings_quote,\n \"\\\"verbatim\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"ends_with","expr":"strings.quote(\"ends with \\\\\") == \"\\\"ends with \\\\\\\\\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"ends with \\\\\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"ends with \\\\\\\\\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"ends with \\\\\"~string\n )~string^strings_quote,\n \"\\\"ends with \\\\\\\\\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"starts_with","expr":"strings.quote(\"\\\\ starts with\") == \"\\\"\\\\\\\\ starts with\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"\\\\ starts with\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"\\\\\\\\ starts with\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"\\\\ starts with\"~string\n )~string^strings_quote,\n \"\\\"\\\\\\\\ starts with\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"printable_unicode","expr":"strings.quote(\"printable unicode😀\") == \"\\\"printable unicode😀\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"printable unicode😀\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"printable unicode😀\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"printable unicode😀\"~string\n )~string^strings_quote,\n \"\\\"printable unicode😀\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"mid_string_quote","expr":"strings.quote(\"mid string \\\" quote\") == \"\\\"mid string \\\\\\\" quote\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"mid string \\\" quote\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"mid string \\\\\\\" quote\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"mid string \\\" quote\"~string\n )~string^strings_quote,\n \"\\\"mid string \\\\\\\" quote\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"single_quote_with_double_quote","expr":"strings.quote('single-quote with \"double quote\"') == \"\\\"single-quote with \\\\\\\"double quote\\\\\\\"\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"single-quote with \\\"double quote\\\"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"single-quote with \\\\\\\"double quote\\\\\\\"\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"single-quote with \\\"double quote\\\"\"~string\n )~string^strings_quote,\n \"\\\"single-quote with \\\\\\\"double quote\\\\\\\"\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"size_unicode_char","expr":"strings.quote(\"size('ÿ')\") == \"\\\"size('ÿ')\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"size('ÿ')\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"size('ÿ')\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"size('ÿ')\"~string\n )~string^strings_quote,\n \"\\\"size('ÿ')\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"size_unicode_string","expr":"strings.quote(\"size('πέντε')\") == \"\\\"size('πέντε')\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"size('πέντε')\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"size('πέντε')\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"size('πέντε')\"~string\n )~string^strings_quote,\n \"\\\"size('πέντε')\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode","expr":"strings.quote(\"завтра\") == \"\\\"завтра\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"завтра\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"завтра\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"завтра\"~string\n )~string^strings_quote,\n \"\\\"завтра\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_code_points","expr":"strings.quote(\"\\U0001F431\\U0001F600\\U0001F61B\")","value":{"stringValue":"\"🐱😀😛\""}},"ast":"strings^#*expr.Expr_IdentExpr#.quote(\n \"🐱😀😛\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"strings.quote(\n \"🐱😀😛\"~string\n)~string^strings_quote","type":"string"},{"original":{"name":"unicode_2","expr":"strings.quote(\"ta©o©αT\") == \"\\\"ta©o©αT\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"ta©o©αT\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"ta©o©αT\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"ta©o©αT\"~string\n )~string^strings_quote,\n \"\\\"ta©o©αT\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"empty_quote","expr":"strings.quote(\"\")","value":{"stringValue":"\"\""}},"ast":"strings^#*expr.Expr_IdentExpr#.quote(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"strings.quote(\n \"\"~string\n)~string^strings_quote","type":"string"}]},{"name":"format","tests":[{"original":{"name":"no-op","expr":"\"no substitution\".format([])","value":{"stringValue":"no substitution"}},"ast":"\"no substitution\"^#*expr.Constant_StringValue#.format(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"no substitution\"~string.format(\n []~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"mid-string substitution","expr":"\"str is %s and some more\".format([\"filler\"])","value":{"stringValue":"str is filler and some more"}},"ast":"\"str is %s and some more\"^#*expr.Constant_StringValue#.format(\n [\n \"filler\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"str is %s and some more\"~string.format(\n [\n \"filler\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"percent escaping","expr":"\"%% and also %%\".format([])","value":{"stringValue":"% and also %"}},"ast":"\"%% and also %%\"^#*expr.Constant_StringValue#.format(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%% and also %%\"~string.format(\n []~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"substitution inside escaped percent signs","expr":"\"%%%s%%\".format([\"text\"])","value":{"stringValue":"%text%"}},"ast":"\"%%%s%%\"^#*expr.Constant_StringValue#.format(\n [\n \"text\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%%%s%%\"~string.format(\n [\n \"text\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"substitution with one escaped percent sign on the right","expr":"\"%s%%\".format([\"percent on the right\"])","value":{"stringValue":"percent on the right%"}},"ast":"\"%s%%\"^#*expr.Constant_StringValue#.format(\n [\n \"percent on the right\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s%%\"~string.format(\n [\n \"percent on the right\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"substitution with one escaped percent sign on the left","expr":"\"%%%s\".format([\"percent on the left\"])","value":{"stringValue":"%percent on the left"}},"ast":"\"%%%s\"^#*expr.Constant_StringValue#.format(\n [\n \"percent on the left\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%%%s\"~string.format(\n [\n \"percent on the left\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"multiple substitutions","expr":"\"%d %d %d, %s %s %s, %d %d %d, %s %s %s\".format([1, 2, 3, \"A\", \"B\", \"C\", 4, 5, 6, \"D\", \"E\", \"F\"])","value":{"stringValue":"1 2 3, A B C, 4 5 6, D E F"}},"ast":"\"%d %d %d, %s %s %s, %d %d %d, %s %s %s\"^#*expr.Constant_StringValue#.format(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n \"A\"^#*expr.Constant_StringValue#,\n \"B\"^#*expr.Constant_StringValue#,\n \"C\"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n \"D\"^#*expr.Constant_StringValue#,\n \"E\"^#*expr.Constant_StringValue#,\n \"F\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d %d %d, %s %s %s, %d %d %d, %s %s %s\"~string.format(\n [\n 1~int,\n 2~int,\n 3~int,\n \"A\"~string,\n \"B\"~string,\n \"C\"~string,\n 4~int,\n 5~int,\n 6~int,\n \"D\"~string,\n \"E\"~string,\n \"F\"~string\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"percent sign escape sequence support","expr":"\"%%escaped %s%%\".format([\"percent\"])","value":{"stringValue":"%escaped percent%"}},"ast":"\"%%escaped %s%%\"^#*expr.Constant_StringValue#.format(\n [\n \"percent\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%%escaped %s%%\"~string.format(\n [\n \"percent\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"fixed point formatting clause","expr":"\"%.3f\".format([1.2345])","value":{"stringValue":"1.234"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n 1.2345^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n 1.2345~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"binary formatting clause","expr":"\"this is 5 in binary: %b\".format([5])","value":{"stringValue":"this is 5 in binary: 101"}},"ast":"\"this is 5 in binary: %b\"^#*expr.Constant_StringValue#.format(\n [\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"this is 5 in binary: %b\"~string.format(\n [\n 5~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"uint support for binary formatting","expr":"\"unsigned 64 in binary: %b\".format([uint(64)])","value":{"stringValue":"unsigned 64 in binary: 1000000"}},"ast":"\"unsigned 64 in binary: %b\"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 64^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"unsigned 64 in binary: %b\"~string.format(\n [\n uint(\n 64~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format","type":"string"},{"original":{"name":"bool support for binary formatting","expr":"\"bit set from bool: %b\".format([true])","value":{"stringValue":"bit set from bool: 1"}},"ast":"\"bit set from bool: %b\"^#*expr.Constant_StringValue#.format(\n [\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"bit set from bool: %b\"~string.format(\n [\n true~bool\n ]~list(bool)\n)~string^string_format","type":"string"},{"original":{"name":"octal formatting clause","expr":"\"%o\".format([11])","value":{"stringValue":"13"}},"ast":"\"%o\"^#*expr.Constant_StringValue#.format(\n [\n 11^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%o\"~string.format(\n [\n 11~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"uint support for octal formatting clause","expr":"\"this is an unsigned octal: %o\".format([uint(65535)])","value":{"stringValue":"this is an unsigned octal: 177777"}},"ast":"\"this is an unsigned octal: %o\"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 65535^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"this is an unsigned octal: %o\"~string.format(\n [\n uint(\n 65535~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format","type":"string"},{"original":{"name":"lowercase hexadecimal formatting clause","expr":"\"%x is 20 in hexadecimal\".format([30])","value":{"stringValue":"1e is 20 in hexadecimal"}},"ast":"\"%x is 20 in hexadecimal\"^#*expr.Constant_StringValue#.format(\n [\n 30^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x is 20 in hexadecimal\"~string.format(\n [\n 30~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"uppercase hexadecimal formatting clause","expr":"\"%X is 20 in hexadecimal\".format([30])","value":{"stringValue":"1E is 20 in hexadecimal"}},"ast":"\"%X is 20 in hexadecimal\"^#*expr.Constant_StringValue#.format(\n [\n 30^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X is 20 in hexadecimal\"~string.format(\n [\n 30~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"unsigned support for hexadecimal formatting clause","expr":"\"%X is 6000 in hexadecimal\".format([uint(6000)])","value":{"stringValue":"1770 is 6000 in hexadecimal"}},"ast":"\"%X is 6000 in hexadecimal\"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 6000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X is 6000 in hexadecimal\"~string.format(\n [\n uint(\n 6000~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format","type":"string"},{"original":{"name":"string support with hexadecimal formatting clause","expr":"\"%x\".format([\"Hello world!\"])","value":{"stringValue":"48656c6c6f20776f726c6421"}},"ast":"\"%x\"^#*expr.Constant_StringValue#.format(\n [\n \"Hello world!\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x\"~string.format(\n [\n \"Hello world!\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"string support with uppercase hexadecimal formatting clause","expr":"\"%X\".format([\"Hello world!\"])","value":{"stringValue":"48656C6C6F20776F726C6421"}},"ast":"\"%X\"^#*expr.Constant_StringValue#.format(\n [\n \"Hello world!\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X\"~string.format(\n [\n \"Hello world!\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"byte support with hexadecimal formatting clause","expr":"\"%x\".format([b\"byte string\"])","value":{"stringValue":"6279746520737472696e67"}},"ast":"\"%x\"^#*expr.Constant_StringValue#.format(\n [\n b\"byte string\"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x\"~string.format(\n [\n b\"byte string\"~bytes\n ]~list(bytes)\n)~string^string_format","type":"string"},{"original":{"name":"byte support with uppercase hexadecimal formatting clause","expr":"\"%X\".format([b\"byte string\"])","value":{"stringValue":"6279746520737472696E67"}},"ast":"\"%X\"^#*expr.Constant_StringValue#.format(\n [\n b\"byte string\"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X\"~string.format(\n [\n b\"byte string\"~bytes\n ]~list(bytes)\n)~string^string_format","type":"string"},{"original":{"name":"scientific notation formatting clause","expr":"\"%.6e\".format([1052.032911275])","value":{"stringValue":"1.052033e+03"}},"ast":"\"%.6e\"^#*expr.Constant_StringValue#.format(\n [\n 1052.032911275^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.6e\"~string.format(\n [\n 1052.032911275~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"default precision for fixed-point clause","expr":"\"%f\".format([2.71828])","value":{"stringValue":"2.718280"}},"ast":"\"%f\"^#*expr.Constant_StringValue#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%f\"~string.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"default precision for scientific notation","expr":"\"%e\".format([2.71828])","value":{"stringValue":"2.718280e+00"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"NaN support for scientific notation","expr":"\"%e\".format([double(\"NaN\")])","value":{"stringValue":"NaN"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n double(\n \"NaN\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"positive infinity support for scientific notation","expr":"\"%e\".format([double(\"Infinity\")])","value":{"stringValue":"Infinity"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n double(\n \"Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"negative infinity support for scientific notation","expr":"\"%e\".format([double(\"-Infinity\")])","value":{"stringValue":"-Infinity"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"-Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n double(\n \"-Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"NaN support for decimal","expr":"\"%d\".format([double(\"NaN\")])","value":{"stringValue":"NaN"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n double(\n \"NaN\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"positive infinity support for decimal","expr":"\"%d\".format([double(\"Infinity\")])","value":{"stringValue":"Infinity"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n double(\n \"Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"negative infinity support for decimal","expr":"\"%d\".format([double(\"-Infinity\")])","value":{"stringValue":"-Infinity"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"-Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n double(\n \"-Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"NaN support for fixed-point","expr":"\"%f\".format([double(\"NaN\")])","value":{"stringValue":"NaN"}},"ast":"\"%f\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%f\"~string.format(\n [\n double(\n \"NaN\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"positive infinity support for fixed-point","expr":"\"%f\".format([double(\"Infinity\")])","value":{"stringValue":"Infinity"}},"ast":"\"%f\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%f\"~string.format(\n [\n double(\n \"Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"negative infinity support for fixed-point","expr":"\"%f\".format([double(\"-Infinity\")])","value":{"stringValue":"-Infinity"}},"ast":"\"%f\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"-Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%f\"~string.format(\n [\n double(\n \"-Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"uint support for decimal clause","expr":"\"%d\".format([uint(64)])","value":{"stringValue":"64"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 64^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n uint(\n 64~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format","type":"string"},{"original":{"name":"null support for string","expr":"\"%s\".format([null])","value":{"stringValue":"null"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n null~null\n ]~list(null)\n)~string^string_format","type":"string"},{"original":{"name":"int support for string","expr":"\"%s\".format([999999999999])","value":{"stringValue":"999999999999"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n 999999999999^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n 999999999999~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"bytes support for string","expr":"\"%s\".format([b\"xyz\"])","value":{"stringValue":"xyz"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n b\"xyz\"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n b\"xyz\"~bytes\n ]~list(bytes)\n)~string^string_format","type":"string"},{"original":{"name":"type() support for string","expr":"\"%s\".format([type(\"test string\")])","value":{"stringValue":"string"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n type(\n \"test string\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n type(\n \"test string\"~string\n )~type(string)^type\n ]~list(type(string))\n)~string^string_format","type":"string"},{"original":{"name":"timestamp support for string","expr":"\"%s\".format([timestamp(\"2023-02-03T23:31:20+00:00\")])","value":{"stringValue":"2023-02-03T23:31:20Z"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n timestamp(\n \"2023-02-03T23:31:20+00:00\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n timestamp(\n \"2023-02-03T23:31:20+00:00\"~string\n )~timestamp^string_to_timestamp\n ]~list(timestamp)\n)~string^string_format","type":"string"},{"original":{"name":"duration support for string","expr":"\"%s\".format([duration(\"1h45m47s\")])","value":{"stringValue":"6347s"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n duration(\n \"1h45m47s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n duration(\n \"1h45m47s\"~string\n )~duration^string_to_duration\n ]~list(duration)\n)~string^string_format","type":"string"},{"original":{"name":"list support for string","expr":"\"%s\".format([[\"abc\", 3.14, null, [9, 8, 7, 6], timestamp(\"2023-02-03T23:31:20Z\")]])","value":{"stringValue":"[abc, 3.14, null, [9, 8, 7, 6], 2023-02-03T23:31:20Z]"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n [\n \"abc\"^#*expr.Constant_StringValue#,\n 3.14^#*expr.Constant_DoubleValue#,\n null^#*expr.Constant_NullValue#,\n [\n 9^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n timestamp(\n \"2023-02-03T23:31:20Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n [\n \"abc\"~string,\n 3.14~double,\n null~null,\n [\n 9~int,\n 8~int,\n 7~int,\n 6~int\n ]~list(int),\n timestamp(\n \"2023-02-03T23:31:20Z\"~string\n )~timestamp^string_to_timestamp\n ]~list(dyn)\n ]~list(list(dyn))\n)~string^string_format","type":"string"},{"original":{"name":"map support for string","expr":"\"%s\".format([{\"key1\": b\"xyz\", \"key5\": null, \"key2\": duration(\"2h\"), \"key4\": true, \"key3\": 2.71828}])","value":{"stringValue":"{key1: xyz, key2: 7200s, key3: 2.71828, key4: true, key5: null}"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n {\n \"key1\"^#*expr.Constant_StringValue#:b\"xyz\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#,\n \"key5\"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:duration(\n \"2h\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"key4\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n \"key3\"^#*expr.Constant_StringValue#:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n {\n \"key1\"~string:b\"xyz\"~bytes,\n \"key5\"~string:null~null,\n \"key2\"~string:duration(\n \"2h\"~string\n )~duration^string_to_duration,\n \"key4\"~string:true~bool,\n \"key3\"~string:2.71828~double\n }~map(string, dyn)\n ]~list(map(string, dyn))\n)~string^string_format","type":"string"},{"original":{"name":"map support (all key types)","expr":"\"%s\".format([{1: \"value1\", uint(2): \"value2\", true: double(\"NaN\")}])","value":{"stringValue":"{1: value1, 2: value2, true: NaN}"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n {\n 1^#*expr.Constant_Int64Value#:\"value1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n uint(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#:\"value2\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n {\n 1~int:\"value1\"~string,\n uint(\n 2~int\n )~uint^int64_to_uint64:\"value2\"~string,\n true~bool:double(\n \"NaN\"~string\n )~double^string_to_double\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn))\n)~string^string_format","type":"string"},{"original":{"name":"boolean support for %s","expr":"\"%s, %s\".format([true, false])","value":{"stringValue":"true, false"}},"ast":"\"%s, %s\"^#*expr.Constant_StringValue#.format(\n [\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s, %s\"~string.format(\n [\n true~bool,\n false~bool\n ]~list(bool)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for string formatting clause","expr":"\"%s\".format([dyn(\"a string\")])","value":{"stringValue":"a string"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n \"a string\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n dyn(\n \"a string\"~string\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for numbers with string formatting clause","expr":"\"%s, %s\".format([dyn(32), dyn(56.8)])","value":{"stringValue":"32, 56.8"}},"ast":"\"%s, %s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 32^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 56.8^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s, %s\"~string.format(\n [\n dyn(\n 32~int\n )~dyn^to_dyn,\n dyn(\n 56.8~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for integer formatting clause","expr":"\"%d\".format([dyn(128)])","value":{"stringValue":"128"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 128^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n dyn(\n 128~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for integer formatting clause (unsigned)","expr":"\"%d\".format([dyn(256u)])","value":{"stringValue":"256"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 256u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n dyn(\n 256u~uint\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for hex formatting clause","expr":"\"%x\".format([dyn(22)])","value":{"stringValue":"16"}},"ast":"\"%x\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x\"~string.format(\n [\n dyn(\n 22~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for hex formatting clause (uppercase)","expr":"\"%X\".format([dyn(26)])","value":{"stringValue":"1A"}},"ast":"\"%X\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 26^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X\"~string.format(\n [\n dyn(\n 26~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for unsigned hex formatting clause","expr":"\"%x\".format([dyn(500u)])","value":{"stringValue":"1f4"}},"ast":"\"%x\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 500u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x\"~string.format(\n [\n dyn(\n 500u~uint\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for fixed-point formatting clause","expr":"\"%.3f\".format([dyn(4.5)])","value":{"stringValue":"4.500"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 4.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n dyn(\n 4.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for scientific notation","expr":"\"%e\".format([dyn(2.71828)])","value":{"stringValue":"2.718280e+00"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 2.71828^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n dyn(\n 2.71828~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype NaN/infinity support","expr":"\"%s\".format([[double(\"NaN\"), double(\"Infinity\"), double(\"-Infinity\")]])","value":{"stringValue":"[NaN, Infinity, -Infinity]"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n [\n double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n double(\n \"Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n double(\n \"-Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n [\n double(\n \"NaN\"~string\n )~double^string_to_double,\n double(\n \"Infinity\"~string\n )~double^string_to_double,\n double(\n \"-Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n ]~list(list(double))\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for timestamp","expr":"\"%s\".format([dyn(timestamp(\"2009-11-10T23:00:00Z\"))])","value":{"stringValue":"2009-11-10T23:00:00Z"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n timestamp(\n \"2009-11-10T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n dyn(\n timestamp(\n \"2009-11-10T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for duration","expr":"\"%s\".format([dyn(duration(\"8747s\"))])","value":{"stringValue":"8747s"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n duration(\n \"8747s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n dyn(\n duration(\n \"8747s\"~string\n )~duration^string_to_duration\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for lists","expr":"\"%s\".format([dyn([6, 4.2, \"a string\"])])","value":{"stringValue":"[6, 4.2, a string]"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n [\n 6^#*expr.Constant_Int64Value#,\n 4.2^#*expr.Constant_DoubleValue#,\n \"a string\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n dyn(\n [\n 6~int,\n 4.2~double,\n \"a string\"~string\n ]~list(dyn)\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for maps","expr":"\"%s\".format([{\"strKey\":\"x\", 6:duration(\"422s\"), true:42}])","value":{"stringValue":"{6: 422s, strKey: x, true: 42}"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n {\n \"strKey\"^#*expr.Constant_StringValue#:\"x\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 6^#*expr.Constant_Int64Value#:duration(\n \"422s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n {\n \"strKey\"~string:\"x\"~string,\n 6~int:duration(\n \"422s\"~string\n )~duration^string_to_duration,\n true~bool:42~int\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn))\n)~string^string_format","type":"string"},{"original":{"name":"string substitution in a string variable","expr":"str_var.format([\"filler\"])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%s"}}},"value":{"stringValue":"filler"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n \"filler\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n \"filler\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"multiple substitutions in a string variable","expr":"str_var.format([1, 2, 3, \"A\", \"B\", \"C\", 4, 5, 6, \"D\", \"E\", \"F\"])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%d %d %d, %s %s %s, %d %d %d, %s %s %s"}}},"value":{"stringValue":"1 2 3, A B C, 4 5 6, D E F"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n \"A\"^#*expr.Constant_StringValue#,\n \"B\"^#*expr.Constant_StringValue#,\n \"C\"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n \"D\"^#*expr.Constant_StringValue#,\n \"E\"^#*expr.Constant_StringValue#,\n \"F\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 1~int,\n 2~int,\n 3~int,\n \"A\"~string,\n \"B\"~string,\n \"C\"~string,\n 4~int,\n 5~int,\n 6~int,\n \"D\"~string,\n \"E\"~string,\n \"F\"~string\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"substitution inside escaped percent signs in a string variable","expr":"str_var.format([\"text\"])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%%%s%%"}}},"value":{"stringValue":"%text%"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n \"text\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n \"text\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"fixed point formatting clause in a string variable","expr":"str_var.format([1.2345])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%.3f"}}},"value":{"stringValue":"1.234"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1.2345^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 1.2345~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"binary formatting clause in a string variable","expr":"str_var.format([5])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%b"}}},"value":{"stringValue":"101"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 5~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"scientific notation formatting clause in a string variable","expr":"str_var.format([1052.032911275])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%.6e"}}},"value":{"stringValue":"1.052033e+03"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1052.032911275^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 1052.032911275~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"default precision for fixed-point clause in a string variable","expr":"str_var.format([2.71828])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%f"}}},"value":{"stringValue":"2.718280"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_insignificant_zeroes_removed","expr":"\"%.0f\".format([123.000000])","value":{"stringValue":"123"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 123^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 123~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_positive_round_to_whole_number","expr":"\"%.0f\".format([3.5001])","value":{"stringValue":"4"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 3.5001^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 3.5001~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_negative_truncate_to_whole_number","expr":"\"%.0f\".format([3.4999])","value":{"stringValue":"3"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 3.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 3.4999~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_halfway_round_up_to_nearest_even","expr":"\"%.0f\".format([1.5])","value":{"stringValue":"2"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 1.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 1.5~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_halfway_truncate_to_nearest_even","expr":"\"%.0f\".format([2.5])","value":{"stringValue":"2"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 2.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 2.5~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_positive_round_up","expr":"\"%.3f\".format([123.4999])","value":{"stringValue":"123.500"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n 123.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n 123.4999~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_positive_round_down","expr":"\"%.3f\".format([123.4994])","value":{"stringValue":"123.499"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n 123.4994^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n 123.4994~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_negative_round_up","expr":"\"%.3f\".format([-123.4999])","value":{"stringValue":"-123.500"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n -123.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n -123.4999~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_negative_round_down","expr":"\"%.3f\".format([-123.4994])","value":{"stringValue":"-123.499"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n -123.4994^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n -123.4994~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_zero_padding","expr":"\"%.5f\".format([-1.2])","value":{"stringValue":"-1.20000"}},"ast":"\"%.5f\"^#*expr.Constant_StringValue#.format(\n [\n -1.2^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.5f\"~string.format(\n [\n -1.2~double\n ]~list(double)\n)~string^string_format","type":"string"}]},{"name":"format_errors","tests":[{"original":{"name":"unrecognized formatting clause","expr":"\"%a\".format([1])","disableCheck":true,"evalError":{"errors":[{"message":"could not parse formatting clause: unrecognized formatting clause \"a\""}]}},"ast":"\"%a\"^#*expr.Constant_StringValue#.format(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:12: could not parse formatting clause: unrecognized formatting clause \"a\"\n | \"%a\".format([1])\n | ...........^"},{"original":{"name":"out of bounds arg index","expr":"\"%d %d %d\".format([0, 1])","disableCheck":true,"evalError":{"errors":[{"message":"index 2 out of range"}]}},"ast":"\"%d %d %d\"^#*expr.Constant_StringValue#.format(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: index 2 out of range\n | \"%d %d %d\".format([0, 1])\n | .................^"},{"original":{"name":"string substitution is not allowed with binary clause","expr":"\"string is %b\".format([\"abc\"])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers and bools can be formatted as binary, was given string"}]}},"ast":"\"string is %b\"^#*expr.Constant_StringValue#.format(\n [\n \"abc\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: error during formatting: only ints, uints, and bools can be formatted as binary, was given string\n | \"string is %b\".format([\"abc\"])\n | .......................^"},{"original":{"name":"duration substitution not allowed with decimal clause","expr":"\"%d\".format([duration(\"30m2s\")])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: decimal clause can only be used on integers, was given google.protobuf.Duration"}]}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n duration(\n \"30m2s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:22: error during formatting: decimal clause can only be used on ints, uints, and doubles, was given google.protobuf.Duration\n | \"%d\".format([duration(\"30m2s\")])\n | .....................^"},{"original":{"name":"string substitution not allowed with octal clause","expr":"\"octal: %o\".format([\"a string\"])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: octal clause can only be used on integers, was given string"}]}},"ast":"\"octal: %o\"^#*expr.Constant_StringValue#.format(\n [\n \"a string\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:21: error during formatting: octal clause can only be used on ints and uints, was given string\n | \"octal: %o\".format([\"a string\"])\n | ....................^"},{"original":{"name":"double substitution not allowed with hex clause","expr":"\"double is %x\".format([0.5])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given double"}]}},"ast":"\"double is %x\"^#*expr.Constant_StringValue#.format(\n [\n 0.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given double\n | \"double is %x\".format([0.5])\n | .......................^"},{"original":{"name":"uppercase not allowed for scientific clause","expr":"\"double is %E\".format([0.5])","disableCheck":true,"evalError":{"errors":[{"message":"could not parse formatting clause: unrecognized formatting clause \"E\""}]}},"ast":"\"double is %E\"^#*expr.Constant_StringValue#.format(\n [\n 0.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:22: could not parse formatting clause: unrecognized formatting clause \"E\"\n | \"double is %E\".format([0.5])\n | .....................^"},{"original":{"name":"object not allowed","expr":"\"object is %s\".format([cel.expr.conformance.proto3.TestAllTypes{}])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes"}]}},"ast":"\"object is %s\"^#*expr.Constant_StringValue#.format(\n [\n cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:64: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | \"object is %s\".format([cel.expr.conformance.proto3.TestAllTypes{}])\n | ...............................................................^"},{"original":{"name":"object inside list","expr":"\"%s\".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes"}]}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:61: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | \"%s\".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])\n | ............................................................^"},{"original":{"name":"object inside map","expr":"\"%s\".format([{1: \"a\", 2: cel.expr.conformance.proto3.TestAllTypes{}}])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes"}]}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n {\n 1^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:66: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | \"%s\".format([{1: \"a\", 2: cel.expr.conformance.proto3.TestAllTypes{}}])\n | .................................................................^"},{"original":{"name":"null not allowed for %d","expr":"\"null: %d\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: decimal clause can only be used on integers, was given null_type"}]}},"ast":"\"null: %d\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: decimal clause can only be used on ints, uints, and doubles, was given null_type\n | \"null: %d\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %e","expr":"\"null: %e\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: scientific clause can only be used on doubles, was given null_type"}]}},"ast":"\"null: %e\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: scientific clause can only be used on ints, uints, and doubles, was given null_type\n | \"null: %e\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %f","expr":"\"null: %f\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: fixed-point clause can only be used on doubles, was given null_type"}]}},"ast":"\"null: %f\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: fixed-point clause can only be used on ints, uints, and doubles, was given null_type\n | \"null: %f\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %x","expr":"\"null: %x\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type"}]}},"ast":"\"null: %x\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given null_type\n | \"null: %x\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %X","expr":"\"null: %X\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type"}]}},"ast":"\"null: %X\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given null_type\n | \"null: %X\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %b","expr":"\"null: %b\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers and bools can be formatted as binary, was given null_type"}]}},"ast":"\"null: %b\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, and bools can be formatted as binary, was given null_type\n | \"null: %b\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %o","expr":"\"null: %o\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: octal clause can only be used on integers, was given null_type"}]}},"ast":"\"null: %o\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: octal clause can only be used on ints and uints, was given null_type\n | \"null: %o\".format([null])\n | ...................^"}]},{"name":"value_errors","tests":[{"original":{"name":"charat_out_of_range","expr":"'tacocat'.charAt(30) == ''","evalError":{"errors":[{"message":"index out of range: 30"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.charAt(\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.charAt(\n 30~int\n )~string^string_char_at_int,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"indexof_out_of_range","expr":"'tacocat'.indexOf('a', 30) == -1","evalError":{"errors":[{"message":"index out of range: 30"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"a\"^#*expr.Constant_StringValue#,\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"a\"~string,\n 30~int\n )~int^string_index_of_string_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"lastindexof_negative_index","expr":"'tacocat'.lastIndexOf('a', -1) == -1","evalError":{"errors":[{"message":"index out of range: -1"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"a\"^#*expr.Constant_StringValue#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"a\"~string,\n -1~int\n )~int^string_last_index_of_string_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"lastindexof_out_of_range","expr":"'tacocat'.lastIndexOf('a', 30) == -1","evalError":{"errors":[{"message":"index out of range: 30"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"a\"^#*expr.Constant_StringValue#,\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"a\"~string,\n 30~int\n )~int^string_last_index_of_string_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"substring_out_of_range","expr":"'tacocat'.substring(40) == 'cat'","evalError":{"errors":[{"message":"index out of range: 40"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 40^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 40~int\n )~string^string_substring_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"substring_negative_index","expr":"'tacocat'.substring(-1) == 'cat'","evalError":{"errors":[{"message":"index out of range: -1"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n -1~int\n )~string^string_substring_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"substring_end_index_out_of_range","expr":"'tacocat'.substring(1, 50) == 'cat'","evalError":{"errors":[{"message":"index out of range: 50"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 1^#*expr.Constant_Int64Value#,\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 1~int,\n 50~int\n )~string^string_substring_int_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"substring_begin_index_out_of_range","expr":"'tacocat'.substring(49, 50) == 'cat'","evalError":{"errors":[{"message":"index out of range: 49"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 49^#*expr.Constant_Int64Value#,\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 49~int,\n 50~int\n )~string^string_substring_int_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"substring_end_index_greater_than_begin_index","expr":"'tacocat'.substring(4, 3) == ''","evalError":{"errors":[{"message":"invalid substring range. start: 4, end: 3"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 4~int,\n 3~int\n )~string^string_substring_int_int,\n \"\"~string\n)~bool^equals","type":"bool"}]},{"name":"type_errors","tests":[{"original":{"name":"charat_invalid_type","expr":"42.charAt(2) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.charAt(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: found no matching overload for 'charAt' applied to 'int.(int)'\n | 42.charAt(2) == ''\n | .........^"},{"original":{"name":"charat_invalid_argument","expr":"'hello'.charAt(true) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"hello\"^#*expr.Constant_StringValue#.charAt(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:15: found no matching overload for 'charAt' applied to 'string.(bool)'\n | 'hello'.charAt(true) == ''\n | ..............^"},{"original":{"name":"indexof_unary_invalid_type","expr":"24.indexOf('2') == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 24^#*expr.Constant_Int64Value#.indexOf(\n \"2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'indexOf' applied to 'int.(string)'\n | 24.indexOf('2') == 0\n | ..........^"},{"original":{"name":"indexof_unary_invalid_argument","expr":"'hello'.indexOf(true) == 1","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"hello\"^#*expr.Constant_StringValue#.indexOf(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:16: found no matching overload for 'indexOf' applied to 'string.(bool)'\n | 'hello'.indexOf(true) == 1\n | ...............^"},{"original":{"name":"indexof_binary_invalid_argument","expr":"42.indexOf('4', 0) == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.indexOf(\n \"4\"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'indexOf' applied to 'int.(string, int)'\n | 42.indexOf('4', 0) == 0\n | ..........^"},{"original":{"name":"indexof_binary_invalid_argument_2","expr":"'42'.indexOf(4, 0) == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.indexOf(\n 4^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(int, int)'\n | '42'.indexOf(4, 0) == 0\n | ............^"},{"original":{"name":"indexof_binary_both_invalid_arguments","expr":"'42'.indexOf('4', '0') == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.indexOf(\n \"4\"^#*expr.Constant_StringValue#,\n \"0\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(string, string)'\n | '42'.indexOf('4', '0') == 0\n | ............^"},{"original":{"name":"indexof_ternary_invalid_arguments","expr":"'42'.indexOf('4', 0, 1) == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.indexOf(\n \"4\"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(string, int, int)'\n | '42'.indexOf('4', 0, 1) == 0\n | ............^"},{"original":{"name":"split_invalid_type","expr":"42.split('2') == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.split(\n \"2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string)'\n | 42.split('2') == ['4']\n | ........^"},{"original":{"name":"replace_invalid_type","expr":"42.replace(2, 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.replace(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'replace' applied to 'int.(int, int)'\n | 42.replace(2, 1) == '41'\n | ..........^"},{"original":{"name":"replace_binary_invalid_argument","expr":"'42'.replace(2, 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(int, int)'\n | '42'.replace(2, 1) == '41'\n | ............^"},{"original":{"name":"replace_binary_invalid_argument_2","expr":"'42'.replace('2', 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, int)'\n | '42'.replace('2', 1) == '41'\n | ............^"},{"original":{"name":"replace_ternary_invalid_argument","expr":"42.replace('2', '1', 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'replace' applied to 'int.(string, string, int)'\n | 42.replace('2', '1', 1) == '41'\n | ..........^"},{"original":{"name":"replace_ternary_invalid_argument_2","expr":"'42'.replace(2, '1', 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n 2^#*expr.Constant_Int64Value#,\n \"1\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(int, string, int)'\n | '42'.replace(2, '1', 1) == '41'\n | ............^"},{"original":{"name":"replace_ternary_invalid_argument_3","expr":"'42'.replace('2', 1, 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, int, int)'\n | '42'.replace('2', 1, 1) == '41'\n | ............^"},{"original":{"name":"replace_ternary_invalid_argument_4","expr":"'42'.replace('2', '1', '1') == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, string, string)'\n | '42'.replace('2', '1', '1') == '41'\n | ............^"},{"original":{"name":"replace_quaternary_invalid_argument","expr":"'42'.replace('2', '1', 1, false) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, string, int, bool)'\n | '42'.replace('2', '1', 1, false) == '41'\n | ............^"},{"original":{"name":"split_invalid_type_empty_arg","expr":"42.split('') == ['4', '2']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.split(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string)'\n | 42.split('') == ['4', '2']\n | ........^"},{"original":{"name":"split_invalid_argument","expr":"'42'.split(2) == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.split(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(int)'\n | '42'.split(2) == ['4']\n | ..........^"},{"original":{"name":"split_binary_invalid_type","expr":"42.split('2', '1') == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.split(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string, string)'\n | 42.split('2', '1') == ['4']\n | ........^"},{"original":{"name":"split_binary_invalid_argument","expr":"'42'.split(2, 1) == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.split(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(int, int)'\n | '42'.split(2, 1) == ['4']\n | ..........^"},{"original":{"name":"split_binary_invalid_argument_2","expr":"'42'.split('2', '1') == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.split(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(string, string)'\n | '42'.split('2', '1') == ['4']\n | ..........^"},{"original":{"name":"split_ternary_invalid_argument","expr":"'42'.split('2', 1, 1) == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.split(\n \"2\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(string, int, int)'\n | '42'.split('2', 1, 1) == ['4']\n | ..........^"},{"original":{"name":"substring_ternary_invalid_argument","expr":"'hello'.substring(1, 2, 3) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"hello\"^#*expr.Constant_StringValue#.substring(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: found no matching overload for 'substring' applied to 'string.(int, int, int)'\n | 'hello'.substring(1, 2, 3) == ''\n | .................^"},{"original":{"name":"substring_binary_invalid_type","expr":"30.substring(true, 3) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 30^#*expr.Constant_Int64Value#.substring(\n true^#*expr.Constant_BoolValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'substring' applied to 'int.(bool, int)'\n | 30.substring(true, 3) == ''\n | ............^"},{"original":{"name":"substring_binary_invalid_argument","expr":"'tacocat'.substring(true, 3) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n true^#*expr.Constant_BoolValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: found no matching overload for 'substring' applied to 'string.(bool, int)'\n | 'tacocat'.substring(true, 3) == ''\n | ...................^"},{"original":{"name":"substring_binary_invalid_argument_2","expr":"'tacocat'.substring(0, false) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 0^#*expr.Constant_Int64Value#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: found no matching overload for 'substring' applied to 'string.(int, bool)'\n | 'tacocat'.substring(0, false) == ''\n | ...................^"}]}]},{"name":"timestamps","suites":[{"name":"timestamp_conversions","tests":[{"original":{"name":"toInt_timestamp","expr":"int(timestamp('2009-02-13T23:31:30Z'))","value":{"int64Value":"1234567890"}},"ast":"int(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~int^timestamp_to_int64","type":"int"},{"original":{"name":"toString_timestamp","expr":"string(timestamp('2009-02-13T23:31:30Z'))","value":{"stringValue":"2009-02-13T23:31:30Z"}},"ast":"string(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~string^timestamp_to_string","type":"string"},{"original":{"name":"toString_timestamp_nanos","expr":"string(timestamp('9999-12-31T23:59:59.999999999Z'))","value":{"stringValue":"9999-12-31T23:59:59.999999999Z"}},"ast":"string(\n timestamp(\n \"9999-12-31T23:59:59.999999999Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n timestamp(\n \"9999-12-31T23:59:59.999999999Z\"~string\n )~timestamp^string_to_timestamp\n)~string^timestamp_to_string","type":"string"},{"original":{"name":"toType_timestamp","expr":"type(timestamp('2009-02-13T23:31:30Z'))","value":{"typeValue":"google.protobuf.Timestamp"}},"ast":"type(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~type(timestamp)^type","type":"type(timestamp)"},{"original":{"name":"type_comparison","expr":"google.protobuf.Timestamp == type(timestamp('2009-02-13T23:31:30Z'))","value":{"boolValue":true}},"ast":"_==_(\n google^#*expr.Expr_IdentExpr#.protobuf^#*expr.Expr_SelectExpr#.Timestamp^#*expr.Expr_SelectExpr#,\n type(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Timestamp~type(timestamp)^google.protobuf.Timestamp,\n type(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n )~type(timestamp)^type\n)~bool^equals","type":"bool"}]},{"name":"duration_conversions","tests":[{"original":{"name":"toString_duration","expr":"string(duration('1000000s'))","value":{"stringValue":"1000000s"}},"ast":"string(\n duration(\n \"1000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n duration(\n \"1000000s\"~string\n )~duration^string_to_duration\n)~string^duration_to_string","type":"string"},{"original":{"name":"toType_duration","expr":"type(duration('1000000s'))","value":{"typeValue":"google.protobuf.Duration"}},"ast":"type(\n duration(\n \"1000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n duration(\n \"1000000s\"~string\n )~duration^string_to_duration\n)~type(duration)^type","type":"type(duration)"},{"original":{"name":"type_comparison","expr":"google.protobuf.Duration == type(duration('1000000s'))","value":{"boolValue":true}},"ast":"_==_(\n google^#*expr.Expr_IdentExpr#.protobuf^#*expr.Expr_SelectExpr#.Duration^#*expr.Expr_SelectExpr#,\n type(\n duration(\n \"1000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Duration~type(duration)^google.protobuf.Duration,\n type(\n duration(\n \"1000000s\"~string\n )~duration^string_to_duration\n )~type(duration)^type\n)~bool^equals","type":"bool"}]},{"name":"timestamp_selectors","tests":[{"original":{"name":"getDate","expr":"timestamp('2009-02-13T23:31:30Z').getDate()","value":{"int64Value":"13"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDate()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDate()~int^timestamp_to_day_of_month_1_based","type":"int"},{"original":{"name":"getDayOfMonth","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfMonth()","value":{"int64Value":"12"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth()~int^timestamp_to_day_of_month","type":"int"},{"original":{"name":"getDayOfWeek","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfWeek()","value":{"int64Value":"5"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfWeek()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfWeek()~int^timestamp_to_day_of_week","type":"int"},{"original":{"name":"getDayOfYear","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfYear()","value":{"int64Value":"43"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfYear()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfYear()~int^timestamp_to_day_of_year","type":"int"},{"original":{"name":"getFullYear","expr":"timestamp('2009-02-13T23:31:30Z').getFullYear()","value":{"int64Value":"2009"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getFullYear()~int^timestamp_to_year","type":"int"},{"original":{"name":"getHours","expr":"timestamp('2009-02-13T23:31:30Z').getHours()","value":{"int64Value":"23"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getHours()~int^timestamp_to_hours","type":"int"},{"original":{"name":"getMilliseconds","expr":"timestamp('2009-02-13T23:31:20.123456789Z').getMilliseconds()","value":{"int64Value":"123"}},"ast":"timestamp(\n \"2009-02-13T23:31:20.123456789Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMilliseconds()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:20.123456789Z\"~string\n)~timestamp^string_to_timestamp.getMilliseconds()~int^timestamp_to_milliseconds","type":"int"},{"original":{"name":"getMinutes","expr":"timestamp('2009-02-13T23:31:30Z').getMinutes()","value":{"int64Value":"31"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getMinutes()~int^timestamp_to_minutes","type":"int"},{"original":{"name":"getMonth","expr":"timestamp('2009-02-13T23:31:30Z').getMonth()","value":{"int64Value":"1"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMonth()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getMonth()~int^timestamp_to_month","type":"int"},{"original":{"name":"getSeconds","expr":"timestamp('2009-02-13T23:31:30Z').getSeconds()","value":{"int64Value":"30"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getSeconds()~int^timestamp_to_seconds","type":"int"}]},{"name":"timestamp_selectors_tz","tests":[{"original":{"name":"getDate","expr":"timestamp('2009-02-13T23:31:30Z').getDate('Australia/Sydney')","value":{"int64Value":"14"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDate(\n \"Australia/Sydney\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDate(\n \"Australia/Sydney\"~string\n)~int^timestamp_to_day_of_month_1_based_with_tz","type":"int"},{"original":{"name":"getDayOfMonth_name_pos","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfMonth('US/Central')","value":{"int64Value":"12"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n \"US/Central\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n \"US/Central\"~string\n)~int^timestamp_to_day_of_month_with_tz","type":"int"},{"original":{"name":"getDayOfMonth_numerical_pos","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfMonth('+11:00')","value":{"int64Value":"13"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n \"+11:00\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n \"+11:00\"~string\n)~int^timestamp_to_day_of_month_with_tz","type":"int"},{"original":{"name":"getDayOfMonth_numerical_neg","expr":"timestamp('2009-02-13T02:00:00Z').getDayOfMonth('-02:30')","value":{"int64Value":"11"}},"ast":"timestamp(\n \"2009-02-13T02:00:00Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n \"-02:30\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T02:00:00Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n \"-02:30\"~string\n)~int^timestamp_to_day_of_month_with_tz","type":"int"},{"original":{"name":"getDayOfMonth_name_neg","expr":"timestamp('2009-02-13T02:00:00Z').getDayOfMonth('America/St_Johns')","value":{"int64Value":"11"}},"ast":"timestamp(\n \"2009-02-13T02:00:00Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n \"America/St_Johns\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T02:00:00Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n \"America/St_Johns\"~string\n)~int^timestamp_to_day_of_month_with_tz","type":"int"},{"original":{"name":"getDayOfWeek","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfWeek('UTC')","value":{"int64Value":"5"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfWeek(\n \"UTC\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfWeek(\n \"UTC\"~string\n)~int^timestamp_to_day_of_week_with_tz","type":"int"},{"original":{"name":"getDayOfYear","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfYear('US/Central')","value":{"int64Value":"43"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfYear(\n \"US/Central\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfYear(\n \"US/Central\"~string\n)~int^timestamp_to_day_of_year_with_tz","type":"int"},{"original":{"name":"getFullYear","expr":"timestamp('2009-02-13T23:31:30Z').getFullYear('-09:30')","value":{"int64Value":"2009"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getFullYear(\n \"-09:30\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getFullYear(\n \"-09:30\"~string\n)~int^timestamp_to_year_with_tz","type":"int"},{"original":{"name":"getHours","expr":"timestamp('2009-02-13T23:31:30Z').getHours('02:00')","value":{"int64Value":"1"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours(\n \"02:00\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getHours(\n \"02:00\"~string\n)~int^timestamp_to_hours_with_tz","type":"int"},{"original":{"name":"getMinutes","expr":"timestamp('2009-02-13T23:31:30Z').getMinutes('Asia/Kathmandu')","value":{"int64Value":"16"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes(\n \"Asia/Kathmandu\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getMinutes(\n \"Asia/Kathmandu\"~string\n)~int^timestamp_to_minutes_with_tz","type":"int"},{"original":{"name":"getMonth","expr":"timestamp('2009-02-13T23:31:30Z').getMonth('UTC')","value":{"int64Value":"1"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMonth(\n \"UTC\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getMonth(\n \"UTC\"~string\n)~int^timestamp_to_month_with_tz","type":"int"},{"original":{"name":"getSeconds","expr":"timestamp('2009-02-13T23:31:30Z').getSeconds('-00:00')","value":{"int64Value":"30"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds(\n \"-00:00\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getSeconds(\n \"-00:00\"~string\n)~int^timestamp_to_seconds_tz","type":"int"}]},{"name":"timestamp_equality","tests":[{"original":{"name":"eq_same","expr":"timestamp('2009-02-13T23:31:30Z') == timestamp('2009-02-13T23:31:30Z')","value":{"boolValue":true}},"ast":"_==_(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"eq_diff","expr":"timestamp('2009-02-13T23:31:29Z') == timestamp('2009-02-13T23:31:30Z')","value":{"boolValue":false}},"ast":"_==_(\n timestamp(\n \"2009-02-13T23:31:29Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n timestamp(\n \"2009-02-13T23:31:29Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"neq_same","expr":"timestamp('1945-05-07T02:41:00Z') != timestamp('1945-05-07T02:41:00Z')","value":{"boolValue":false}},"ast":"_!=_(\n timestamp(\n \"1945-05-07T02:41:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"1945-05-07T02:41:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n timestamp(\n \"1945-05-07T02:41:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"1945-05-07T02:41:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^not_equals","type":"bool"},{"original":{"name":"neq_diff","expr":"timestamp('2000-01-01T00:00:00Z') != timestamp('2001-01-01T00:00:00Z')","value":{"boolValue":true}},"ast":"_!=_(\n timestamp(\n \"2000-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n timestamp(\n \"2000-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^not_equals","type":"bool"}]},{"name":"duration_equality","tests":[{"original":{"name":"eq_same","expr":"duration('123s') == duration('123s')","value":{"boolValue":true}},"ast":"_==_(\n duration(\n \"123s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"123s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n duration(\n \"123s\"~string\n )~duration^string_to_duration,\n duration(\n \"123s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"eq_diff","expr":"duration('60s') == duration('3600s')","value":{"boolValue":false}},"ast":"_==_(\n duration(\n \"60s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"3600s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n duration(\n \"60s\"~string\n )~duration^string_to_duration,\n duration(\n \"3600s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"neq_same","expr":"duration('604800s') != duration('604800s')","value":{"boolValue":false}},"ast":"_!=_(\n duration(\n \"604800s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"604800s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n duration(\n \"604800s\"~string\n )~duration^string_to_duration,\n duration(\n \"604800s\"~string\n )~duration^string_to_duration\n)~bool^not_equals","type":"bool"},{"original":{"name":"neq_diff","expr":"duration('86400s') != duration('86164s')","value":{"boolValue":true}},"ast":"_!=_(\n duration(\n \"86400s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"86164s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n duration(\n \"86400s\"~string\n )~duration^string_to_duration,\n duration(\n \"86164s\"~string\n )~duration^string_to_duration\n)~bool^not_equals","type":"bool"}]},{"name":"timestamp_arithmetic","tests":[{"original":{"name":"add_duration_to_time","expr":"timestamp('2009-02-13T23:00:00Z') + duration('240s') == timestamp('2009-02-13T23:04:00Z')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"240s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:04:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"240s\"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n \"2009-02-13T23:04:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"add_time_to_duration","expr":"duration('120s') + timestamp('2009-02-13T23:01:00Z') == timestamp('2009-02-13T23:03:00Z')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n duration(\n \"120s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:01:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:03:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n duration(\n \"120s\"~string\n )~duration^string_to_duration,\n timestamp(\n \"2009-02-13T23:01:00Z\"~string\n )~timestamp^string_to_timestamp\n )~timestamp^add_duration_timestamp,\n timestamp(\n \"2009-02-13T23:03:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"add_duration_to_duration","expr":"duration('600s') + duration('50s') == duration('650s')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n duration(\n \"600s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"50s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"650s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n duration(\n \"600s\"~string\n )~duration^string_to_duration,\n duration(\n \"50s\"~string\n )~duration^string_to_duration\n )~duration^add_duration_duration,\n duration(\n \"650s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"add_time_to_duration_nanos_negative","expr":"timestamp('0001-01-01T00:00:01.000000001Z') + duration('-999999999ns') == timestamp('0001-01-01T00:00:00.000000002Z')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n timestamp(\n \"0001-01-01T00:00:01.000000001Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-999999999ns\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"0001-01-01T00:00:00.000000002Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n timestamp(\n \"0001-01-01T00:00:01.000000001Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"-999999999ns\"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n \"0001-01-01T00:00:00.000000002Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"add_time_to_duration_nanos_positive","expr":"timestamp('0001-01-01T00:00:01.999999999Z') + duration('999999999ns') == timestamp('0001-01-01T00:00:02.999999998Z')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n timestamp(\n \"0001-01-01T00:00:01.999999999Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"999999999ns\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"0001-01-01T00:00:02.999999998Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n timestamp(\n \"0001-01-01T00:00:01.999999999Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"999999999ns\"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n \"0001-01-01T00:00:02.999999998Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"subtract_duration_from_time","expr":"timestamp('2009-02-13T23:10:00Z') - duration('600s') == timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_==_(\n _-_(\n timestamp(\n \"2009-02-13T23:10:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"600s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _-_(\n timestamp(\n \"2009-02-13T23:10:00Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"600s\"~string\n )~duration^string_to_duration\n )~timestamp^subtract_timestamp_duration,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"subtract_time_from_time","expr":"timestamp('2009-02-13T23:31:00Z') - timestamp('2009-02-13T23:29:00Z') == duration('120s')","value":{"boolValue":true}},"ast":"_==_(\n _-_(\n timestamp(\n \"2009-02-13T23:31:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:29:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"120s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _-_(\n timestamp(\n \"2009-02-13T23:31:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:29:00Z\"~string\n )~timestamp^string_to_timestamp\n )~duration^subtract_timestamp_timestamp,\n duration(\n \"120s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"subtract_duration_from_duration","expr":"duration('900s') - duration('42s') == duration('858s')","value":{"boolValue":true}},"ast":"_==_(\n _-_(\n duration(\n \"900s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"42s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"858s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _-_(\n duration(\n \"900s\"~string\n )~duration^string_to_duration,\n duration(\n \"42s\"~string\n )~duration^string_to_duration\n )~duration^subtract_duration_duration,\n duration(\n \"858s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"}]},{"name":"comparisons","tests":[{"original":{"name":"leq_timestamp_true","expr":"timestamp('2009-02-13T23:00:00Z') \u003c= timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_\u003c=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^less_equals_timestamp","type":"bool"},{"original":{"name":"leq_timestamp_false","expr":"timestamp('2009-02-13T23:00:00Z') \u003c= timestamp('2009-02-13T22:59:59Z')","value":{"boolValue":false}},"ast":"_\u003c=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T22:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T22:59:59Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^less_equals_timestamp","type":"bool"},{"original":{"name":"leq_duration_true","expr":"duration('200s') \u003c= duration('200s')","value":{"boolValue":true}},"ast":"_\u003c=_(\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n duration(\n \"200s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^less_equals_duration","type":"bool"},{"original":{"name":"leq_duration_false","expr":"duration('300s') \u003c= duration('200s')","value":{"boolValue":false}},"ast":"_\u003c=_(\n duration(\n \"300s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n duration(\n \"300s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^less_equals_duration","type":"bool"},{"original":{"name":"less_timestamp_true","expr":"timestamp('2009-02-13T23:00:00Z') \u003c timestamp('2009-03-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_\u003c_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-03-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-03-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^less_timestamp","type":"bool"},{"original":{"name":"less_duration_true","expr":"duration('200s') \u003c duration('300s')","value":{"boolValue":true}},"ast":"_\u003c_(\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"300s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n duration(\n \"200s\"~string\n )~duration^string_to_duration,\n duration(\n \"300s\"~string\n )~duration^string_to_duration\n)~bool^less_duration","type":"bool"},{"original":{"name":"geq_timestamp_true","expr":"timestamp('2009-02-13T23:00:00Z') \u003e= timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_\u003e=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_equals_timestamp","type":"bool"},{"original":{"name":"geq_timestamp_false","expr":"timestamp('2009-02-13T22:58:00Z') \u003e= timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":false}},"ast":"_\u003e=_(\n timestamp(\n \"2009-02-13T22:58:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n timestamp(\n \"2009-02-13T22:58:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_equals_timestamp","type":"bool"},{"original":{"name":"geq_duration_true","expr":"duration('200s') \u003e= duration('200s')","value":{"boolValue":true}},"ast":"_\u003e=_(\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n duration(\n \"200s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^greater_equals_duration","type":"bool"},{"original":{"name":"geq_duration_false","expr":"duration('120s') \u003e= duration('200s')","value":{"boolValue":false}},"ast":"_\u003e=_(\n duration(\n \"120s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n duration(\n \"120s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^greater_equals_duration","type":"bool"},{"original":{"name":"greater_timestamp_true","expr":"timestamp('2009-02-13T23:59:00Z') \u003e timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_\u003e_(\n timestamp(\n \"2009-02-13T23:59:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n timestamp(\n \"2009-02-13T23:59:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_timestamp","type":"bool"},{"original":{"name":"greater_duration_true","expr":"duration('300s') \u003e duration('200s')","value":{"boolValue":true}},"ast":"_\u003e_(\n duration(\n \"300s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n duration(\n \"300s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^greater_duration","type":"bool"}]},{"name":"duration_converters","tests":[{"original":{"name":"get_hours","expr":"duration('10000s').getHours()","value":{"int64Value":"2"}},"ast":"duration(\n \"10000s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours()^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"10000s\"~string\n)~duration^string_to_duration.getHours()~int^duration_to_hours","type":"int"},{"original":{"name":"get_milliseconds","description":"Obtain the milliseconds component of the duration. Note, this is not the same as converting the duration to milliseconds. This behavior will be deprecated.","expr":"x.getMilliseconds()","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Duration"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Duration","value":"123.321456789s"}}}},"value":{"int64Value":"321"}},"ast":"x^#*expr.Expr_IdentExpr#.getMilliseconds()^#*expr.Expr_CallExpr#","checkedAst":"x~duration^x.getMilliseconds()~int^duration_to_milliseconds","type":"int"},{"original":{"name":"get_minutes","expr":"duration('3730s').getMinutes()","value":{"int64Value":"62"}},"ast":"duration(\n \"3730s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"3730s\"~string\n)~duration^string_to_duration.getMinutes()~int^duration_to_minutes","type":"int"},{"original":{"name":"get_seconds","expr":"duration('3730s').getSeconds()","value":{"int64Value":"3730"}},"ast":"duration(\n \"3730s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"3730s\"~string\n)~duration^string_to_duration.getSeconds()~int^duration_to_seconds","type":"int"}]},{"name":"timestamp_range","tests":[{"original":{"name":"from_string_under","expr":"timestamp('0000-01-01T00:00:00Z')","evalError":{"errors":[{"message":"range"}]}},"ast":"timestamp(\n \"0000-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"0000-01-01T00:00:00Z\"~string\n)~timestamp^string_to_timestamp","type":"timestamp"},{"original":{"name":"from_string_over","expr":"timestamp('10000-01-01T00:00:00Z')","evalError":{"errors":[{"message":"range"}]}},"ast":"timestamp(\n \"10000-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"10000-01-01T00:00:00Z\"~string\n)~timestamp^string_to_timestamp","type":"timestamp"},{"original":{"name":"add_duration_under","expr":"timestamp('0001-01-01T00:00:00Z') + duration('-1s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n timestamp(\n \"0001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-1s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n timestamp(\n \"0001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"-1s\"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration","type":"timestamp"},{"original":{"name":"add_duration_over","expr":"timestamp('9999-12-31T23:59:59Z') + duration('1s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n timestamp(\n \"9999-12-31T23:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"1s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n timestamp(\n \"9999-12-31T23:59:59Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"1s\"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration","type":"timestamp"},{"original":{"name":"add_duration_nanos_over","expr":"timestamp('9999-12-31T23:59:59.999999999Z') + duration('1ns')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n timestamp(\n \"9999-12-31T23:59:59.999999999Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"1ns\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n timestamp(\n \"9999-12-31T23:59:59.999999999Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"1ns\"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration","type":"timestamp"},{"original":{"name":"add_duration_nanos_under","expr":"timestamp('0001-01-01T00:00:00Z') + duration('-1ns')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n timestamp(\n \"0001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-1ns\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n timestamp(\n \"0001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"-1ns\"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration","type":"timestamp"},{"original":{"name":"sub_time_duration_over","expr":"timestamp('9999-12-31T23:59:59Z') - timestamp('0001-01-01T00:00:00Z')","evalError":{"errors":[{"message":"range"}]}},"ast":"_-_(\n timestamp(\n \"9999-12-31T23:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"0001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n timestamp(\n \"9999-12-31T23:59:59Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"0001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~duration^subtract_timestamp_timestamp","type":"duration"},{"original":{"name":"sub_time_duration_under","expr":"timestamp('0001-01-01T00:00:00Z') - timestamp('9999-12-31T23:59:59Z')","evalError":{"errors":[{"message":"range"}]}},"ast":"_-_(\n timestamp(\n \"0001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"9999-12-31T23:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n timestamp(\n \"0001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"9999-12-31T23:59:59Z\"~string\n )~timestamp^string_to_timestamp\n)~duration^subtract_timestamp_timestamp","type":"duration"}]},{"name":"duration_range","tests":[{"original":{"name":"from_string_under","expr":"duration('-320000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"duration(\n \"-320000000000s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"-320000000000s\"~string\n)~duration^string_to_duration","type":"duration"},{"original":{"name":"from_string_over","expr":"duration('320000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"duration(\n \"320000000000s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"320000000000s\"~string\n)~duration^string_to_duration","type":"duration"},{"original":{"name":"add_under","expr":"duration('-200000000000s') + duration('-200000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n duration(\n \"-200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n duration(\n \"-200000000000s\"~string\n )~duration^string_to_duration,\n duration(\n \"-200000000000s\"~string\n )~duration^string_to_duration\n)~duration^add_duration_duration","type":"duration"},{"original":{"name":"add_over","expr":"duration('200000000000s') + duration('200000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n duration(\n \"200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n duration(\n \"200000000000s\"~string\n )~duration^string_to_duration,\n duration(\n \"200000000000s\"~string\n )~duration^string_to_duration\n)~duration^add_duration_duration","type":"duration"},{"original":{"name":"sub_under","expr":"duration('-200000000000s') - duration('200000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_-_(\n duration(\n \"-200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n duration(\n \"-200000000000s\"~string\n )~duration^string_to_duration,\n duration(\n \"200000000000s\"~string\n )~duration^string_to_duration\n)~duration^subtract_duration_duration","type":"duration"},{"original":{"name":"sub_over","expr":"duration('200000000000s') - duration('-200000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_-_(\n duration(\n \"200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n duration(\n \"200000000000s\"~string\n )~duration^string_to_duration,\n duration(\n \"-200000000000s\"~string\n )~duration^string_to_duration\n)~duration^subtract_duration_duration","type":"duration"}]}]},{"name":"type_deductions","suites":[{"name":"constant_literals","tests":[{"original":{"name":"bool","expr":"true","typedResult":{"result":{"boolValue":true},"deducedType":{"primitive":"BOOL"}}},"ast":"true^#*expr.Constant_BoolValue#","checkedAst":"true~bool","type":"bool"},{"original":{"name":"int","expr":"42","typedResult":{"result":{"int64Value":"42"},"deducedType":{"primitive":"INT64"}}},"ast":"42^#*expr.Constant_Int64Value#","checkedAst":"42~int","type":"int"},{"original":{"name":"uint","expr":"42u","typedResult":{"result":{"uint64Value":"42"},"deducedType":{"primitive":"UINT64"}}},"ast":"42u^#*expr.Constant_Uint64Value#","checkedAst":"42u~uint","type":"uint"},{"original":{"name":"double","expr":"0.1","typedResult":{"result":{"doubleValue":0.1},"deducedType":{"primitive":"DOUBLE"}}},"ast":"0.1^#*expr.Constant_DoubleValue#","checkedAst":"0.1~double","type":"double"},{"original":{"name":"string","expr":"\"test\"","typedResult":{"result":{"stringValue":"test"},"deducedType":{"primitive":"STRING"}}},"ast":"\"test\"^#*expr.Constant_StringValue#","checkedAst":"\"test\"~string","type":"string"},{"original":{"name":"bytes","expr":"b\"test\"","typedResult":{"result":{"bytesValue":"dGVzdA=="},"deducedType":{"primitive":"BYTES"}}},"ast":"b\"test\"^#*expr.Constant_BytesValue#","checkedAst":"b\"test\"~bytes","type":"bytes"},{"original":{"name":"null","expr":"null","typedResult":{"result":{"nullValue":null},"deducedType":{"null":null}}},"ast":"null^#*expr.Constant_NullValue#","checkedAst":"null~null","type":"null"}]},{"name":"complex_initializers","tests":[{"original":{"name":"list","expr":"[1]","typedResult":{"result":{"listValue":{"values":[{"int64Value":"1"}]}},"deducedType":{"listType":{"elemType":{"primitive":"INT64"}}}}},"ast":"[\n 1^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n 1~int\n]~list(int)","type":"list(int)"},{"original":{"name":"map","expr":"{'abc': 123}","typedResult":{"result":{"mapValue":{"entries":[{"key":{"stringValue":"abc"},"value":{"int64Value":"123"}}]}},"deducedType":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"INT64"}}}}},"ast":"{\n \"abc\"^#*expr.Constant_StringValue#:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"{\n \"abc\"~string:123~int\n}~map(string, int)","type":"map(string, int)"},{"original":{"name":"struct","expr":"TestAllTypes{single_int64: 1}","container":"cel.expr.conformance.proto3","typedResult":{"result":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64":"1"}},"deducedType":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}},"ast":"TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"field_access","tests":[{"original":{"name":"int_field","expr":"TestAllTypes{single_int64: 1}.single_int64","container":"cel.expr.conformance.proto3","typedResult":{"result":{"int64Value":"1"},"deducedType":{"primitive":"INT64"}}},"ast":"TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int","type":"int"},{"original":{"name":"repeated_int_field","expr":"TestAllTypes{}.repeated_int64","container":"cel.expr.conformance.proto3","typedResult":{"result":{"listValue":{}},"deducedType":{"listType":{"elemType":{"primitive":"INT64"}}}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int64~list(int)","type":"list(int)"},{"original":{"name":"map_bool_int","expr":"TestAllTypes{}.map_bool_int64","container":"cel.expr.conformance.proto3","typedResult":{"result":{"mapValue":{}},"deducedType":{"mapType":{"keyType":{"primitive":"BOOL"},"valueType":{"primitive":"INT64"}}}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_bool_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_bool_int64~map(bool, int)","type":"map(bool, int)"},{"original":{"name":"enum_field","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto3","typedResult":{"result":{"int64Value":"0"},"deducedType":{"primitive":"INT64"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"repeated_enum_field","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto3","typedResult":{"result":{"listValue":{}},"deducedType":{"listType":{"elemType":{"primitive":"INT64"}}}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"enum_map_field","expr":"TestAllTypes{}.map_int32_enum","container":"cel.expr.conformance.proto3","typedResult":{"result":{"mapValue":{}},"deducedType":{"mapType":{"keyType":{"primitive":"INT64"},"valueType":{"primitive":"INT64"}}}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_int32_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_int32_enum~map(int, int)","type":"map(int, int)"}]},{"name":"indexing","tests":[{"original":{"name":"list","expr":"['foo'][0]","typedResult":{"result":{"stringValue":"foo"},"deducedType":{"primitive":"STRING"}}},"ast":"_[_](\n [\n \"foo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n \"foo\"~string\n ]~list(string),\n 0~int\n)~string^index_list","type":"string"},{"original":{"name":"map","expr":"{'abc': 123}['abc']","typedResult":{"result":{"int64Value":"123"},"deducedType":{"primitive":"INT64"}}},"ast":"_[_](\n {\n \"abc\"^#*expr.Constant_StringValue#:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"abc\"~string:123~int\n }~map(string, int),\n \"abc\"~string\n)~int^index_map","type":"int"}]},{"name":"functions","tests":[{"original":{"name":"nested_calls","expr":"('foo' + 'bar').startsWith('foo')","typedResult":{"result":{"boolValue":true},"deducedType":{"primitive":"BOOL"}}},"ast":"_+_(\n \"foo\"^#*expr.Constant_StringValue#,\n \"bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.startsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"foo\"~string,\n \"bar\"~string\n)~string^add_string.startsWith(\n \"foo\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"function_result_type","expr":"fn('abc', 123)","checkOnly":true,"typeEnv":[{"name":"fn","function":{"overloads":[{"overloadId":"fn_string_int","params":[{"primitive":"STRING"},{"primitive":"INT64"}],"resultType":{"primitive":"STRING"}}]}}],"typedResult":{"deducedType":{"primitive":"STRING"}}},"ast":"fn(\n \"abc\"^#*expr.Constant_StringValue#,\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"fn(\n \"abc\"~string,\n 123~int\n)~string^fn_string_int","type":"string"}]},{"name":"flexible_type_parameter_assignment","tests":[{"original":{"name":"list_parameter","expr":"[[], [[]], [[[]]], [[[[]]]]]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"dyn":{}}}}}}}}}}}}}},"ast":"[\n []^#*expr.Expr_ListExpr#,\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n []~list(list(list(list(dyn)))),\n [\n []~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n [\n [\n []~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n [\n [\n [\n []~list(dyn)\n ]~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn))))\n]~list(list(list(list(list(dyn)))))","type":"list(list(list(list(list(dyn)))))"},{"original":{"name":"list_parameter_order_independent","expr":"[[[[[]]]], [], [[[]]]]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"dyn":{}}}}}}}}}}}}}},"ast":"[\n [\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#,\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n [\n [\n [\n []~list(dyn)\n ]~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n []~list(list(list(list(dyn)))),\n [\n [\n []~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn))))\n]~list(list(list(list(list(dyn)))))","type":"list(list(list(list(list(dyn)))))"},{"original":{"name":"comprehension_type_var_aliasing","expr":"msg.repeated_nested_message.map(x, x).map(y, y.bb)","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"primitive":"INT64"}}}}},"ast":"__comprehension__(\n // Variable\n y,\n // Target\n __comprehension__(\n // Variable\n x,\n // Target\n msg^#*expr.Expr_IdentExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n y^#*expr.Expr_IdentExpr#.bb^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n y,\n // Target\n __comprehension__(\n // Variable\n x,\n // Target\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // Accumulator\n @result,\n // Init\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^@result,\n [\n x~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^x\n ]~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n // Result\n @result~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^@result)~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n y~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^y.bb~int\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"overload_type_var_aliasing","expr":"([] + msg.repeated_nested_message + [])[0].bb","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"primitive":"INT64"}}},"ast":"_[_](\n _+_(\n _+_(\n []^#*expr.Expr_ListExpr#,\n msg^#*expr.Expr_IdentExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.bb^#*expr.Expr_SelectExpr#","checkedAst":"_[_](\n _+_(\n _+_(\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n 0~int\n)~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^index_list.bb~int","type":"int"},{"original":{"name":"unconstrained_type_var_as_dyn","expr":"([].map(x,x))[0].foo","checkOnly":true,"typedResult":{"deducedType":{"dyn":{}}}},"ast":"_[_](\n __comprehension__(\n // Variable\n x,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.foo^#*expr.Expr_SelectExpr#","checkedAst":"_[_](\n __comprehension__(\n // Variable\n x,\n // Target\n []~list(dyn),\n // Accumulator\n @result,\n // Init\n []~list(dyn),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(dyn)^@result,\n [\n x~dyn^x\n ]~list(dyn)\n )~list(dyn)^add_list,\n // Result\n @result~list(dyn)^@result)~list(dyn),\n 0~int\n)~dyn^index_list.foo~dyn","type":"dyn"},{"original":{"name":"list_parameters_do_not_unify","expr":"[msg.single_int64_wrapper, msg.single_string_wrapper]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"dyn":{}}}}}},"ast":"[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_string_wrapper~wrapper(string)\n]~list(dyn)","type":"list(dyn)"},{"original":{"name":"optional_none","expr":"[optional.none(), optional.of(1)]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"abstractType":{"name":"optional_type","parameterTypes":[{"primitive":"INT64"}]}}}}}},"ast":"[\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n]~list(optional_type(int))","type":"list(optional_type(int))"},{"original":{"name":"optional_none_2","expr":"[optional.of(1), optional.none()]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"abstractType":{"name":"optional_type","parameterTypes":[{"primitive":"INT64"}]}}}}}},"ast":"[\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n]~list(optional_type(int))","type":"list(optional_type(int))"},{"original":{"name":"optional_dyn_promotion","expr":"[optional.of(1), optional.of(dyn(1))]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"abstractType":{"name":"optional_type","parameterTypes":[{"dyn":{}}]}}}}}},"ast":"[\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of\n]~list(optional_type(dyn))","type":"list(optional_type(dyn))"},{"original":{"name":"optional_dyn_promotion_2","expr":"[optional.of(dyn(1)), optional.of(1)]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"abstractType":{"name":"optional_type","parameterTypes":[{"dyn":{}}]}}}}}},"ast":"[\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n]~list(optional_type(dyn))","type":"list(optional_type(dyn))"},{"original":{"name":"optional_in_ternary","expr":"true ? optional.of(dyn(1)) : optional.of(1)","checkOnly":true,"typedResult":{"deducedType":{"abstractType":{"name":"optional_type","parameterTypes":[{"dyn":{}}]}}}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n true~bool,\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~optional_type(dyn)^conditional","type":"optional_type(dyn)"}]},{"name":"wrappers","tests":[{"original":{"name":"wrapper_promotion","expr":"[msg.single_int64_wrapper, msg.single_int64]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"wrapper":"INT64"}}}}},"ast":"[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int\n]~list(wrapper(int))","type":"list(wrapper(int))"},{"original":{"name":"wrapper_promotion_2","expr":"[msg.single_int64, msg.single_int64_wrapper]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"wrapper":"INT64"}}}}},"ast":"[\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int)\n]~list(int)","type":"list(int)"},{"original":{"name":"wrapper_dyn_promotion","expr":"[msg.single_int64_wrapper, msg.single_int64, dyn(1)]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"dyn":{}}}}}},"ast":"[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n dyn(\n 1~int\n )~dyn^to_dyn\n]~list(dyn)","type":"list(dyn)"},{"original":{"name":"wrapper_dyn_promotion_2","expr":"[dyn(1), msg.single_int64_wrapper, msg.single_int64]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"dyn":{}}}}}},"ast":"[\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n dyn(\n 1~int\n )~dyn^to_dyn,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int\n]~list(dyn)","type":"list(dyn)"},{"original":{"name":"wrapper_primitive_assignable","expr":"msg.single_int64_wrapper + 1","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"primitive":"INT64"}}},"ast":"_+_(\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n 1~int\n)~int^add_int64","type":"int"},{"original":{"name":"wrapper_null_assignable","expr":"msg.single_int64_wrapper == null","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"primitive":"BOOL"}}},"ast":"_==_(\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"wrapper_ternary_parameter_assignment","expr":"false ? msg.single_int64_wrapper : null","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"wrapper":"INT64"}}},"ast":"_?_:_(\n false^#*expr.Constant_BoolValue#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n false~bool,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n null~null\n)~wrapper(int)^conditional","type":"wrapper(int)"},{"original":{"name":"wrapper_ternary_parameter_assignment_2","expr":"true ? msg.single_int64_wrapper : 42","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"wrapper":"INT64"}}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n true~bool,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n 42~int\n)~wrapper(int)^conditional","type":"wrapper(int)"}]},{"name":"type_parameters","tests":[{"original":{"name":"multiple_parameters_generality","expr":"[tuple(1, 2u, 3.0), tuple(dyn(1), dyn(2u), dyn(3.0))][0]","checkOnly":true,"typeEnv":[{"name":"tuple","function":{"overloads":[{"overloadId":"tuple_T_U_V","params":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}]}}}]}}],"typedResult":{"deducedType":{"abstractType":{"name":"tuple","parameterTypes":[{"dyn":{}},{"dyn":{}},{"dyn":{}}]}}}},"ast":"_[_](\n [\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V,\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n dyn(\n 3~double\n )~dyn^to_dyn\n )~tuple(dyn, dyn, dyn)^tuple_T_U_V\n ]~list(tuple(dyn, dyn, dyn)),\n 0~int\n)~tuple(dyn, dyn, dyn)^index_list","type":"tuple(dyn, dyn, dyn)"},{"original":{"name":"multiple_parameters_generality_2","expr":"sort(tuple(dyn(1), 2u, 3.0))","checkOnly":true,"typeEnv":[{"name":"tuple","function":{"overloads":[{"overloadId":"tuple_T_U_V","params":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}]}}}]}},{"name":"sort","function":{"overloads":[{"overloadId":"sort_tuple_T_T_T","params":[{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"T"},{"typeParam":"T"}]}}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"T"},{"typeParam":"T"}]}}}]}}],"typedResult":{"deducedType":{"abstractType":{"name":"tuple","parameterTypes":[{"dyn":{}},{"dyn":{}},{"dyn":{}}]}}}},"ast":"sort(\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"sort(\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint,\n 3~double\n )~tuple(dyn, uint, double)^tuple_T_U_V\n)~tuple(dyn, dyn, dyn)^sort_tuple_T_T_T","type":"tuple(dyn, dyn, dyn)"},{"original":{"name":"multiple_parameters_parameterized_ovl","expr":"tuple(1, 2u, 3.0) == tuple(1, dyn(2u), dyn(3.0))","checkOnly":true,"typeEnv":[{"name":"tuple","function":{"overloads":[{"overloadId":"tuple_T_U_V","params":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}]}}}]}}],"typedResult":{"deducedType":{"primitive":"BOOL"}}},"ast":"_==_(\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n 1^#*expr.Constant_Int64Value#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V,\n tuple(\n 1~int,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n dyn(\n 3~double\n )~dyn^to_dyn\n )~tuple(int, dyn, dyn)^tuple_T_U_V\n)~bool^equals","type":"bool"},{"original":{"name":"multiple_parameters_parameterized_ovl_2","expr":"tuple(dyn(1), dyn(2u), 3.0) == tuple(1, 2u, 3.0)","checkOnly":true,"typeEnv":[{"name":"tuple","function":{"overloads":[{"overloadId":"tuple_T_U_V","params":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}]}}}]}}],"typedResult":{"deducedType":{"primitive":"BOOL"}}},"ast":"_==_(\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 3~double\n )~tuple(dyn, dyn, double)^tuple_T_U_V,\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V\n)~bool^equals","type":"bool"}]},{"name":"legacy_nullable_types","tests":[{"original":{"name":"null_assignable_to_message_parameter_candidate","expr":"[msg, null][0]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes"}}}},"typedResult":{"result":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes"}},"deducedType":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}},"ast":"_[_](\n [\n msg^#*expr.Expr_IdentExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list","type":"null"},{"original":{"name":"null_assignable_to_duration_parameter_candidate","expr":"[msg.single_duration, null][0]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes"}}}},"typedResult":{"result":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Duration","value":"0s"}},"deducedType":{"wellKnown":"DURATION"}}},"ast":"_[_](\n [\n msg^#*expr.Expr_IdentExpr#.single_duration^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_duration~duration,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list","type":"null"},{"original":{"name":"null_assignable_to_timestamp_parameter_candidate","expr":"[msg.single_timestamp, null][0]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes"}}}},"typedResult":{"result":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Timestamp","value":"1970-01-01T00:00:00Z"}},"deducedType":{"wellKnown":"TIMESTAMP"}}},"ast":"_[_](\n [\n msg^#*expr.Expr_IdentExpr#.single_timestamp^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_timestamp~timestamp,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list","type":"null"},{"original":{"name":"null_assignable_to_abstract_parameter_candidate","expr":"[optional.of(1), null][0]","checkOnly":true,"typedResult":{"deducedType":{"abstractType":{"name":"optional_type","parameterTypes":[{"primitive":"INT64"}]}}}},"ast":"_[_](\n [\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list","type":"null"}]}]},{"name":"unknowns"},{"name":"wrappers","suites":[{"name":"bool","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.BoolValue{value: true}}.single_any","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_any:google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.BoolValue{value: true}}.single_value","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_value:google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_bool_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_bool_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"int32","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.Int32Value{value: 1}}.single_any","container":"cel.expr.conformance.proto3","value":{"int64Value":"1"}},"ast":"TestAllTypes{\n single_any:google.protobuf.Int32Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Int32Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.Int32Value{value: 1}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.Int32Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int32Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_int32_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_int32_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"int64","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.Int64Value{value: 1}}.single_any","container":"cel.expr.conformance.proto3","value":{"int64Value":"1"}},"ast":"TestAllTypes{\n single_any:google.protobuf.Int64Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Int64Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json_number","expr":"TestAllTypes{single_value: google.protobuf.Int64Value{value: 1}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_json_string","expr":"TestAllTypes{single_value: google.protobuf.Int64Value{value: 9223372036854775807}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"9223372036854775807"}},"ast":"TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:9223372036854775807^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:9223372036854775807~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_int64_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_int64_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"uint32","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.UInt32Value{value: 1u}}.single_any","container":"cel.expr.conformance.proto3","value":{"uint64Value":"1"}},"ast":"TestAllTypes{\n single_any:google.protobuf.UInt32Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.UInt32Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.UInt32Value{value: 1u}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.UInt32Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt32Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_uint32_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_uint32_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"uint64","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.UInt64Value{value: 1u}}.single_any","container":"cel.expr.conformance.proto3","value":{"uint64Value":"1"}},"ast":"TestAllTypes{\n single_any:google.protobuf.UInt64Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.UInt64Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json_number","expr":"TestAllTypes{single_value: google.protobuf.UInt64Value{value: 1u}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_json_string","expr":"TestAllTypes{single_value: google.protobuf.UInt64Value{value: 18446744073709551615u}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"18446744073709551615"}},"ast":"TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_uint64_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_uint64_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"float","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.FloatValue{value: 1.0}}.single_any","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_any:google.protobuf.FloatValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.FloatValue{\n value:1~double\n }~wrapper(double)^google.protobuf.FloatValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.FloatValue{value: 1.0}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.FloatValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.FloatValue{\n value:1~double\n }~wrapper(double)^google.protobuf.FloatValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_float_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_float_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"double","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.DoubleValue{value: 1.0}}.single_any","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_any:google.protobuf.DoubleValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.DoubleValue{\n value:1~double\n }~wrapper(double)^google.protobuf.DoubleValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.DoubleValue{value: 1.0}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.DoubleValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.DoubleValue{\n value:1~double\n }~wrapper(double)^google.protobuf.DoubleValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_double_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_double_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"bytes","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.BytesValue{value: b'foo'}}.single_any","container":"cel.expr.conformance.proto3","value":{"bytesValue":"Zm9v"}},"ast":"TestAllTypes{\n single_any:google.protobuf.BytesValue{\n value:b\"foo\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.BytesValue{\n value:b\"foo\"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.BytesValue{value: b'foo'}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"Zm9v"}},"ast":"TestAllTypes{\n single_value:google.protobuf.BytesValue{\n value:b\"foo\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.BytesValue{\n value:b\"foo\"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_bytes_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_bytes_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"string","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.StringValue{value: 'foo'}}.single_any","container":"cel.expr.conformance.proto3","value":{"stringValue":"foo"}},"ast":"TestAllTypes{\n single_any:google.protobuf.StringValue{\n value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.StringValue{\n value:\"foo\"~string\n }~wrapper(string)^google.protobuf.StringValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.StringValue{value: 'foo'}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"foo"}},"ast":"TestAllTypes{\n single_value:google.protobuf.StringValue{\n value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.StringValue{\n value:\"foo\"~string\n }~wrapper(string)^google.protobuf.StringValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_string_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_string_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"value","tests":[{"original":{"name":"default_to_json","expr":"TestAllTypes{single_any: TestAllTypes{}.single_value}.single_any","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_any:TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]},{"name":"list_value","tests":[{"original":{"name":"literal_to_any","expr":"TestAllTypes{single_any: []}.single_any","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{\n single_any:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]},{"name":"struct","tests":[{"original":{"name":"literal_to_any","expr":"TestAllTypes{single_any: {}}.single_any","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_any:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]},{"name":"field_mask","tests":[{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.FieldMask{paths: ['foo', 'bar']}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"foo,bar"}},"ast":"TestAllTypes{\n single_value:google.protobuf.FieldMask{\n paths:[\n \"foo\"^#*expr.Constant_StringValue#,\n \"bar\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.FieldMask{\n paths:[\n \"foo\"~string,\n \"bar\"~string\n ]~list(string)\n }~google.protobuf.FieldMask^google.protobuf.FieldMask\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"duration","tests":[{"original":{"name":"to_json","expr":"TestAllTypes{single_value: duration('1000000s')}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"1000000s"}},"ast":"TestAllTypes{\n single_value:duration(\n \"1000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:duration(\n \"1000000s\"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"timestamp","tests":[{"original":{"name":"to_json","expr":"TestAllTypes{single_value: timestamp('9999-12-31T23:59:59.999999999Z')}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"9999-12-31T23:59:59.999999999Z"}},"ast":"TestAllTypes{\n single_value:timestamp(\n \"9999-12-31T23:59:59.999999999Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:timestamp(\n \"9999-12-31T23:59:59.999999999Z\"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"empty","tests":[{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.Empty{}}.single_value","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_value:google.protobuf.Empty{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Empty{}~google.protobuf.Empty^google.protobuf.Empty\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]}]}]} as const; diff --git a/packages/cel/src/checker.ts b/packages/cel/src/checker.ts index 6e687ad..ed04c70 100644 --- a/packages/cel/src/checker.ts +++ b/packages/cel/src/checker.ts @@ -46,6 +46,7 @@ import type { CelEnv } from "./env.js"; import { resolveCandidateNames } from "./namespace.js"; import { celError } from "./error.js"; import { isCelUint } from "./uint.js"; +import { createScope, type VariableScope } from "./scope.js"; export class Checker { private readonly referenceMap: Map< @@ -53,6 +54,7 @@ export class Checker { MessageInitShape > = new Map(); private readonly typeMap: Map = new Map(); + private scope: VariableScope | undefined; constructor(private readonly env: CelEnv) {} @@ -60,6 +62,7 @@ export class Checker { // Clear each time we check since Checker instances are cached per environment. this.referenceMap.clear(); this.typeMap.clear(); + this.scope = createScope(); return create(CheckedExprSchema, { expr: this.checkExpr(expr), sourceInfo, @@ -129,15 +132,23 @@ export class Checker { id: bigint, ident: Expr_Ident, ): MessageInitShape { - const found = this.resolveSimpleVariable(ident.name); - if (found) { - this.setType(id, found); - this.setReference(id, identReference(ident.name)); + const { type, requiresDisambiguation } = this.resolveSimpleVariableType( + ident.name, + ); + if (type) { + let name = ident.name; + if (requiresDisambiguation && !name.startsWith(".")) { + name = `.${name}`; + } + this.setType(id, type); + this.setReference(id, identReference(name)); return { id, exprKind: { case: "identExpr", - value: ident, + value: { + name, + }, }, }; } @@ -158,18 +169,32 @@ export class Checker { this.referenceMap.set(id, reference); } - private resolveSimpleVariable(name: string): CelType | undefined { - const ident = this.env.variables.findLocal(name); - if (ident) { - return ident; + private resolveSimpleVariableType(name: string): { + type: CelType | undefined; + requiresDisambiguation: boolean; + } { + const local = this.scope?.find(name); + // Local variables that do not start with a "." shadow global variables + // and do not require disambiguation. + if (local !== undefined && !name.startsWith(".")) { + return { + type: local, + requiresDisambiguation: false, + }; } for (const candidate of resolveCandidateNames(this.env.namespace, name)) { - const ident = this.env.variables.find(candidate); - if (ident) { - return ident; + const type = this.env.variables.find(candidate); + if (type) { + return { + type, + requiresDisambiguation: local !== undefined, + }; } } - return undefined; + return { + type: undefined, + requiresDisambiguation: false, + }; } } diff --git a/packages/cel/src/scope.test.ts b/packages/cel/src/scope.test.ts index 57be4b7..def1172 100644 --- a/packages/cel/src/scope.test.ts +++ b/packages/cel/src/scope.test.ts @@ -84,21 +84,19 @@ void suite("scope", () => { assert.equal(grandChild.findInScope("b"), undefined); assert.equal(grandChild.findInScope("c"), CelScalar.BOOL); }); - void test("findLocal()", () => { + }); + void suite("dot prefix", () => { + void test("dot prefix does not affect find()", () => { const root = createScope({ a: CelScalar.INT }); const child = root.push({ b: CelScalar.STRING }); - const grandChild = child.push({ c: CelScalar.BOOL }); - assert.equal(grandChild.findLocal("a"), undefined); - assert.equal(grandChild.findLocal("b"), CelScalar.STRING); - assert.equal(grandChild.findLocal("c"), CelScalar.BOOL); + assert.equal(child.find(".a"), CelScalar.INT); + assert.equal(child.find(".b"), CelScalar.STRING); }); - void test("findGlobal()", () => { + void test("dot prefix does not affect findInScope()", () => { const root = createScope({ a: CelScalar.INT }); const child = root.push({ b: CelScalar.STRING }); - const grandChild = child.push({ c: CelScalar.BOOL }); - assert.equal(grandChild.findGlobal("a"), CelScalar.INT); - assert.equal(grandChild.findGlobal("b"), undefined); - assert.equal(grandChild.findGlobal("c"), undefined); + assert.equal(child.findInScope(".a"), undefined); + assert.equal(child.findInScope(".b"), CelScalar.STRING); }); }); }); diff --git a/packages/cel/src/scope.ts b/packages/cel/src/scope.ts index 84f0bbe..1b2cae1 100644 --- a/packages/cel/src/scope.ts +++ b/packages/cel/src/scope.ts @@ -29,10 +29,6 @@ export interface VariableScope { * All the variables in the scope. */ [Symbol.iterator](): IterableIterator<[string, CelType]>; - /** - * The parent VariableScope for the current scope or undefined. - */ - parent: VariableScope | undefined; /** * Creates a new VariableScope with the current scope as the parent and the * provided inputs as the new scope's variables. @@ -52,14 +48,6 @@ export interface VariableScope { * Finds a variable with a given name in the current scope only. */ findInScope(name: string): CelType | undefined; - /** - * Finds a locally scoped variable with a given name, ignoring the root scope. - */ - findLocal(name: string): CelType | undefined; - /** - * Finds a globally scoped variable with a given name, only searching the root scope. - */ - findGlobal(name: string): CelType | undefined; } /** @@ -99,10 +87,6 @@ class Scope } } - get parent(): VariableScope | undefined { - return this._parent; - } - push( inputs: PushVars, ): VariableScope { @@ -114,34 +98,17 @@ class Scope } find(name: string): CelType | undefined { - if (this._variables.has(name)) { - return this._variables.get(name); + const found = this.findInScope(name); + if (found !== undefined) { + return found; } return this._parent?.find(name); } findInScope(name: string): CelType | undefined { - return this._variables.get(name); - } - - findLocal(name: string): CelType | undefined { - if (!this._parent) { - return undefined; + if (name.startsWith(".")) { + return this._variables.get(name.slice(1)); } - if (this._variables.has(name)) { - return this._variables.get(name); - } - return this._parent.findLocal(name); - } - - findGlobal(name: string): CelType | undefined { - if (!this._parent) { - return this._variables.get(name); - } - let parent = this._parent; - while (parent.parent) { - parent = parent.parent; - } - return parent.findInScope(name); + return this._variables.get(name); } } From 6c0c65a34cea2b35e618df28b1fc9363ae862dc2 Mon Sep 17 00:00:00 2001 From: Sri Krishna Date: Wed, 11 Feb 2026 17:40:16 +0530 Subject: [PATCH 7/7] Simplify --- packages/cel-spec/src/testdata/conformance.ts | 31639 +++++++++++++++- packages/cel/src/checker.test.ts | 1 - packages/cel/src/checker.ts | 87 +- packages/cel/src/scope.test.ts | 35 - packages/cel/src/scope.ts | 16 +- 5 files changed, 31685 insertions(+), 93 deletions(-) diff --git a/packages/cel-spec/src/testdata/conformance.ts b/packages/cel-spec/src/testdata/conformance.ts index 8ffbef0..9c9703d 100644 --- a/packages/cel-spec/src/testdata/conformance.ts +++ b/packages/cel-spec/src/testdata/conformance.ts @@ -1,2 +1,31639 @@ +// Copyright 2024-2026 Buf Technologies, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Generated from cel-go ../src/testdata/json -import type { SerializedIncrementalTestSuite } from './tests.js';export const tests: SerializedIncrementalTestSuite = {"name":"conformance","suites":[{"name":"basic","suites":[{"name":"self_eval_zeroish","tests":[{"original":{"name":"self_eval_int_zero","expr":"0","value":{"int64Value":"0"}},"ast":"0^#*expr.Constant_Int64Value#","checkedAst":"0~int","type":"int"},{"original":{"name":"self_eval_uint_zero","expr":"0u","value":{"uint64Value":"0"}},"ast":"0u^#*expr.Constant_Uint64Value#","checkedAst":"0u~uint","type":"uint"},{"original":{"name":"self_eval_uint_alias_zero","expr":"0U","value":{"uint64Value":"0"}},"ast":"0u^#*expr.Constant_Uint64Value#","checkedAst":"0u~uint","type":"uint"},{"original":{"name":"self_eval_float_zero","expr":"0.0","value":{"doubleValue":0}},"ast":"0^#*expr.Constant_DoubleValue#","checkedAst":"0~double","type":"double"},{"original":{"name":"self_eval_float_zerowithexp","expr":"0e+0","value":{"doubleValue":0}},"ast":"0^#*expr.Constant_DoubleValue#","checkedAst":"0~double","type":"double"},{"original":{"name":"self_eval_string_empty","expr":"''","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"},{"original":{"name":"self_eval_string_empty_quotes","expr":"\"\"","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"},{"original":{"name":"self_eval_string_raw_prefix","expr":"r\"\"","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"},{"original":{"name":"self_eval_bytes_empty","expr":"b\"\"","value":{"bytesValue":""}},"ast":"b\"\"^#*expr.Constant_BytesValue#","checkedAst":"b\"\"~bytes","type":"bytes"},{"original":{"name":"self_eval_bool_false","expr":"false","value":{"boolValue":false}},"ast":"false^#*expr.Constant_BoolValue#","checkedAst":"false~bool","type":"bool"},{"original":{"name":"self_eval_null","expr":"null","value":{"nullValue":null}},"ast":"null^#*expr.Constant_NullValue#","checkedAst":"null~null","type":"null"},{"original":{"name":"self_eval_empty_list","expr":"[]","value":{"listValue":{}}},"ast":"[]^#*expr.Expr_ListExpr#","checkedAst":"[]~list(dyn)","type":"list(dyn)"},{"original":{"name":"self_eval_empty_map","expr":"{}","value":{"mapValue":{}}},"ast":"{}^#*expr.Expr_StructExpr#","checkedAst":"{}~map(dyn, dyn)","type":"map(dyn, dyn)"},{"original":{"name":"self_eval_string_raw_prefix_triple_double","expr":"r\"\"\"\"\"\"","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"},{"original":{"name":"self_eval_string_raw_prefix_triple_single","expr":"r''''''","value":{"stringValue":""}},"ast":"\"\"^#*expr.Constant_StringValue#","checkedAst":"\"\"~string","type":"string"}]},{"name":"self_eval_nonzeroish","tests":[{"original":{"name":"self_eval_int_nonzero","expr":"42","value":{"int64Value":"42"}},"ast":"42^#*expr.Constant_Int64Value#","checkedAst":"42~int","type":"int"},{"original":{"name":"self_eval_uint_nonzero","expr":"123456789u","value":{"uint64Value":"123456789"}},"ast":"123456789u^#*expr.Constant_Uint64Value#","checkedAst":"123456789u~uint","type":"uint"},{"original":{"name":"self_eval_uint_alias_nonzero","expr":"123456789U","value":{"uint64Value":"123456789"}},"ast":"123456789u^#*expr.Constant_Uint64Value#","checkedAst":"123456789u~uint","type":"uint"},{"original":{"name":"self_eval_int_negative_min","expr":"-9223372036854775808","value":{"int64Value":"-9223372036854775808"}},"ast":"-9223372036854775808^#*expr.Constant_Int64Value#","checkedAst":"-9223372036854775808~int","type":"int"},{"original":{"name":"self_eval_float_negative_exp","expr":"-2.3e+1","value":{"doubleValue":-23}},"ast":"-23^#*expr.Constant_DoubleValue#","checkedAst":"-23~double","type":"double"},{"original":{"name":"self_eval_string_excl","expr":"\"!\"","value":{"stringValue":"!"}},"ast":"\"!\"^#*expr.Constant_StringValue#","checkedAst":"\"!\"~string","type":"string"},{"original":{"name":"self_eval_string_escape","expr":"'\\''","value":{"stringValue":"'"}},"ast":"\"'\"^#*expr.Constant_StringValue#","checkedAst":"\"'\"~string","type":"string"},{"original":{"name":"self_eval_bytes_escape","expr":"b'ÿ'","value":{"bytesValue":"w78="}},"ast":"b\"ÿ\"^#*expr.Constant_BytesValue#","checkedAst":"b\"ÿ\"~bytes","type":"bytes"},{"original":{"name":"self_eval_bytes_invalid_utf8","expr":"b'\\000\\xff'","value":{"bytesValue":"AP8="}},"ast":"b\"\\x00\\xff\"^#*expr.Constant_BytesValue#","checkedAst":"b\"\\x00\\xff\"~bytes","type":"bytes"},{"original":{"name":"self_eval_list_singleitem","expr":"[-1]","value":{"listValue":{"values":[{"int64Value":"-1"}]}}},"ast":"[\n -1^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n -1~int\n]~list(int)","type":"list(int)"},{"original":{"name":"self_eval_map_singleitem","expr":"{\"k\":\"v\"}","value":{"mapValue":{"entries":[{"key":{"stringValue":"k"},"value":{"stringValue":"v"}}]}}},"ast":"{\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"{\n \"k\"~string:\"v\"~string\n}~map(string, string)","type":"map(string, string)"},{"original":{"name":"self_eval_bool_true","expr":"true","value":{"boolValue":true}},"ast":"true^#*expr.Constant_BoolValue#","checkedAst":"true~bool","type":"bool"},{"original":{"name":"self_eval_int_hex","expr":"0x55555555","value":{"int64Value":"1431655765"}},"ast":"1431655765^#*expr.Constant_Int64Value#","checkedAst":"1431655765~int","type":"int"},{"original":{"name":"self_eval_int_hex_negative","expr":"-0x55555555","value":{"int64Value":"-1431655765"}},"ast":"-1431655765^#*expr.Constant_Int64Value#","checkedAst":"-1431655765~int","type":"int"},{"original":{"name":"self_eval_uint_hex","expr":"0x55555555u","value":{"uint64Value":"1431655765"}},"ast":"1431655765u^#*expr.Constant_Uint64Value#","checkedAst":"1431655765u~uint","type":"uint"},{"original":{"name":"self_eval_uint_alias_hex","expr":"0x55555555U","value":{"uint64Value":"1431655765"}},"ast":"1431655765u^#*expr.Constant_Uint64Value#","checkedAst":"1431655765u~uint","type":"uint"},{"original":{"name":"self_eval_unicode_escape_four","expr":"\"\\u270c\"","value":{"stringValue":"✌"}},"ast":"\"✌\"^#*expr.Constant_StringValue#","checkedAst":"\"✌\"~string","type":"string"},{"original":{"name":"self_eval_unicode_escape_eight","expr":"\"\\U0001f431\"","value":{"stringValue":"🐱"}},"ast":"\"🐱\"^#*expr.Constant_StringValue#","checkedAst":"\"🐱\"~string","type":"string"},{"original":{"name":"self_eval_ascii_escape_seq","expr":"\"\\a\\b\\f\\n\\r\\t\\v\\\"\\'\\\\\"","value":{"stringValue":"\u0007\b\f\n\r\t\u000b\"'\\"}},"ast":"\"\\a\\b\\f\\n\\r\\t\\v\\\"'\\\\\"^#*expr.Constant_StringValue#","checkedAst":"\"\\a\\b\\f\\n\\r\\t\\v\\\"'\\\\\"~string","type":"string"}]},{"name":"variables","tests":[{"original":{"name":"self_eval_bound_lookup","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"x":{"value":{"int64Value":"123"}}},"value":{"int64Value":"123"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~int^x","type":"int"},{"original":{"name":"self_eval_unbound_lookup","description":"An unbound variable should be marked as an error during execution. See google/cel-go#154","expr":"x","disableCheck":true,"evalError":{"errors":[{"message":"undeclared reference to 'x' (in container '')"}]}},"ast":"x^#*expr.Expr_IdentExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'x' (in container '')\n | x\n | ^"},{"original":{"name":"unbound_is_runtime_error","description":"Make sure we can short-circuit around an unbound variable.","expr":"x || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n x^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'x' (in container '')\n | x || true\n | ^"}]},{"name":"functions","tests":[{"original":{"name":"binop","expr":"1 + 1","value":{"int64Value":"2"}},"ast":"_+_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 1~int,\n 1~int\n)~int^add_int64","type":"int"},{"original":{"name":"unbound","expr":"f_unknown(17)","disableCheck":true,"evalError":{"errors":[{"message":"unbound function"}]}},"ast":"f_unknown(\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: undeclared reference to 'f_unknown' (in container '')\n | f_unknown(17)\n | .........^"},{"original":{"name":"unbound_is_runtime_error","expr":"f_unknown(17) || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n f_unknown(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: undeclared reference to 'f_unknown' (in container '')\n | f_unknown(17) || true\n | .........^"}]},{"name":"reserved_const","tests":[{"original":{"name":"false","expr":"false","typeEnv":[{"name":"false","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"false":{"value":{"boolValue":true}}},"value":{"boolValue":false}},"ast":"false^#*expr.Constant_BoolValue#","checkedAst":"false~bool","type":"bool"},{"original":{"name":"true","expr":"true","typeEnv":[{"name":"true","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"true":{"value":{"boolValue":false}}},"value":{"boolValue":true}},"ast":"true^#*expr.Constant_BoolValue#","checkedAst":"true~bool","type":"bool"},{"original":{"name":"null","expr":"null","typeEnv":[{"name":"null","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"null":{"value":{"boolValue":true}}},"value":{"nullValue":null}},"ast":"null^#*expr.Constant_NullValue#","checkedAst":"null~null","type":"null"}]}]},{"name":"bindings_ext","suites":[{"name":"bind","tests":[{"original":{"name":"boolean_literal","expr":"cel.bind(t, true, t)","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n t^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n t^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t~bool^t,\n // Result\n t~bool^t)~bool","type":"bool"},{"original":{"name":"string_concat","expr":"cel.bind(msg, \"hello\", msg + msg + msg)","value":{"stringValue":"hellohellohello"}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n msg^#*expr.Expr_IdentExpr#,\n \"hello\"^#*expr.Constant_StringValue#,\n _+_(\n _+_(\n msg^#*expr.Expr_IdentExpr#,\n msg^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n msg,\n // Init\n \"hello\"~string,\n // LoopCondition\n false~bool,\n // LoopStep\n msg~string^msg,\n // Result\n _+_(\n _+_(\n msg~string^msg,\n msg~string^msg\n )~string^add_string,\n msg~string^msg\n )~string^add_string)~string","type":"string"},{"original":{"name":"bind_nested","expr":"cel.bind(t1, true, cel.bind(t2, true, t1 \u0026\u0026 t2))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n t1^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n cel^#*expr.Expr_IdentExpr#.bind(\n t2^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n _\u0026\u0026_(\n t1^#*expr.Expr_IdentExpr#,\n t2^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t1,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t1~bool^t1,\n // Result\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t2,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t2~bool^t2,\n // Result\n _\u0026\u0026_(\n t1~bool^t1,\n t2~bool^t2\n )~bool^logical_and)~bool)~bool","type":"bool"},{"original":{"name":"macro_exists","expr":"cel.bind(valid_elems, [1, 2, 3], [3, 4, 5].exists(e, e in valid_elems))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n valid_elems^#*expr.Expr_IdentExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n @in(\n e^#*expr.Expr_IdentExpr#,\n valid_elems^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n valid_elems,\n // Init\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // LoopCondition\n false~bool,\n // LoopStep\n valid_elems~list(int)^valid_elems,\n // Result\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n @in(\n e~int^e,\n valid_elems~list(int)^valid_elems\n )~bool^in_list\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool)~bool","type":"bool"},{"original":{"name":"macro_not_exists","expr":"cel.bind(valid_elems, [1, 2, 3], ![4, 5].exists(e, e in valid_elems))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.bind(\n valid_elems^#*expr.Expr_IdentExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n !_(\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n @in(\n e^#*expr.Expr_IdentExpr#,\n valid_elems^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n valid_elems,\n // Init\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // LoopCondition\n false~bool,\n // LoopStep\n valid_elems~list(int)^valid_elems,\n // Result\n !_(\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 4~int,\n 5~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n @in(\n e~int^e,\n valid_elems~list(int)^valid_elems\n )~bool^in_list\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n )~bool^logical_not)~bool","type":"bool"}]}]},{"name":"block_ext","suites":[{"name":"basic","tests":[{"original":{"name":"int_add","expr":"cel.block([1, cel.index(0) + 1, cel.index(1) + 1, cel.index(2) + 1], cel.index(3))","value":{"int64Value":"4"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n 1^#*expr.Constant_Int64Value#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n 1~int,\n _+_(\n @index0~dyn^@index0,\n 1~int\n )~int^add_int64,\n _+_(\n @index1~dyn^@index1,\n 1~int\n )~int^add_int64,\n _+_(\n @index2~dyn^@index2,\n 1~int\n )~int^add_int64\n ]~list(int),\n @index3~dyn^@index3\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"size_1","expr":"cel.block([[1, 2], size(cel.index(0)), cel.index(1) + cel.index(1), cel.index(2) + 1], cel.index(3))","value":{"int64Value":"5"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index2~dyn^@index2,\n 1~int\n )~int^add_int64\n ]~list(dyn),\n @index3~dyn^@index3\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"size_2","expr":"cel.block([[1, 2], size(cel.index(0)), 2 + cel.index(1), cel.index(2) + cel.index(1), cel.index(3) + 1], cel.index(4))","value":{"int64Value":"7"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n 2~int,\n @index1~dyn^@index1\n )~int^add_int64,\n _+_(\n @index2~dyn^@index2,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index3~dyn^@index3,\n 1~int\n )~int^add_int64\n ]~list(dyn),\n @index4~dyn^@index4\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"size_3","expr":"cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), cel.index(1) + cel.index(1), cel.index(4) + cel.index(3), cel.index(5) + cel.index(3)], cel.index(6))","value":{"int64Value":"6"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 0~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index2~dyn^@index2\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index5~dyn^@index5,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index6~dyn^@index6\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"size_4","expr":"cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), [1, 2, 3], size(cel.index(4)), 5 + cel.index(1), cel.index(6) + cel.index(1), cel.index(7) + cel.index(3), cel.index(8) + cel.index(3), cel.index(9) + cel.index(5), cel.index(10) + cel.index(5)], cel.index(11))","value":{"int64Value":"17"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 5^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 0~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index2~dyn^@index2\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n size(\n @index4~dyn^@index4\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n 5~int,\n @index1~dyn^@index1\n )~int^add_int64,\n _+_(\n @index6~dyn^@index6,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index7~dyn^@index7,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index8~dyn^@index8,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index9~dyn^@index9,\n @index5~dyn^@index5\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index10~dyn^@index10,\n @index5~dyn^@index5\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index11~dyn^@index11\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"timestamp","expr":"cel.block([timestamp(1000000000), int(cel.index(0)), timestamp(cel.index(1)), cel.index(2).getFullYear(), timestamp(50), int(cel.index(4)), timestamp(cel.index(5)), timestamp(200), int(cel.index(7)), timestamp(cel.index(8)), cel.index(9).getFullYear(), timestamp(75), int(cel.index(11)), timestamp(cel.index(12)), cel.index(13).getFullYear(), cel.index(3) + cel.index(14), cel.index(6).getFullYear(), cel.index(15) + cel.index(16), cel.index(17) + cel.index(3), cel.index(6).getSeconds(), cel.index(18) + cel.index(19), cel.index(20) + cel.index(10), cel.index(21) + cel.index(10), cel.index(13).getMinutes(), cel.index(22) + cel.index(23), cel.index(24) + cel.index(3)], cel.index(25))","value":{"int64Value":"13934"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n timestamp(\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n 200^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n timestamp(\n 75^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 14^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 16^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 18^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 19^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 21^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 23^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp,\n int(\n @index0~dyn^@index0\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index1~dyn^@index1\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index2~dyn^@index2.getFullYear()~int^timestamp_to_year,\n timestamp(\n 50~int\n )~timestamp^int64_to_timestamp,\n int(\n @index4~dyn^@index4\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index5~dyn^@index5\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n timestamp(\n 200~int\n )~timestamp^int64_to_timestamp,\n int(\n @index7~dyn^@index7\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index8~dyn^@index8\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index9~dyn^@index9.getFullYear()~int^timestamp_to_year,\n timestamp(\n 75~int\n )~timestamp^int64_to_timestamp,\n int(\n @index11~dyn^@index11\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index12~dyn^@index12\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index13~dyn^@index13.getFullYear()~int^timestamp_to_year,\n _+_(\n @index3~dyn^@index3,\n @index14~dyn^@index14\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index6~dyn^@index6.getFullYear()~int^timestamp_to_year,\n _+_(\n @index15~dyn^@index15,\n @index16~dyn^@index16\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index17~dyn^@index17,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index6~dyn^@index6.getSeconds()~int^duration_to_seconds|timestamp_to_seconds,\n _+_(\n @index18~dyn^@index18,\n @index19~dyn^@index19\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index20~dyn^@index20,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index21~dyn^@index21,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index13~dyn^@index13.getMinutes()~int^duration_to_minutes|timestamp_to_minutes,\n _+_(\n @index22~dyn^@index22,\n @index23~dyn^@index23\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index24~dyn^@index24,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index25~dyn^@index25\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"map_index","expr":"cel.block([{\"a\": 2}, cel.index(0)[\"a\"], cel.index(1) * cel.index(1), cel.index(1) + cel.index(2)], cel.index(3))","value":{"int64Value":"6"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n \"a\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"a\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n \"a\"~string:2~int\n }~map(string, int),\n _[_](\n @index0~dyn^@index0,\n \"a\"~string\n )~dyn^index_map|optional_map_index_value,\n _*_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^multiply_double|multiply_int64|multiply_uint64,\n _+_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index3~dyn^@index3\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"nested_map_construction","expr":"cel.block([{\"b\": 1}, {\"e\": cel.index(0)}], {\"a\": cel.index(0), \"c\": cel.index(0), \"d\": cel.index(1), \"e\": cel.index(1)})","value":{"mapValue":{"entries":[{"key":{"stringValue":"a"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"b"},"value":{"int64Value":"1"}}]}}},{"key":{"stringValue":"c"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"b"},"value":{"int64Value":"1"}}]}}},{"key":{"stringValue":"d"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"e"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"b"},"value":{"int64Value":"1"}}]}}}]}}},{"key":{"stringValue":"e"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"e"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"b"},"value":{"int64Value":"1"}}]}}}]}}}]}}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n \"b\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"e\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#,\n {\n \"a\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"c\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"d\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"e\"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n \"b\"~string:1~int\n }~map(string, int),\n {\n \"e\"~string:@index0~dyn^@index0\n }~map(string, dyn)\n ]~list(map(string, dyn)),\n {\n \"a\"~string:@index0~dyn^@index0,\n \"c\"~string:@index0~dyn^@index0,\n \"d\"~string:@index1~dyn^@index1,\n \"e\"~string:@index1~dyn^@index1\n }~map(string, dyn)\n)~map(string, dyn)^cel_block_list","type":"map(string, dyn)"},{"original":{"name":"nested_list_construction","expr":"cel.block([[1, 2, 3, 4], [1, 2], [cel.index(1), cel.index(0)]], [1, cel.index(0), 2, cel.index(0), 5, cel.index(0), 7, cel.index(2), cel.index(1)])","value":{"listValue":{"values":[{"int64Value":"1"},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"int64Value":"2"},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"int64Value":"5"},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"int64Value":"7"},{"listValue":{"values":[{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"}]}},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}}]}},{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"}]}}]}}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n [\n 1~int,\n 2~int\n ]~list(int),\n [\n @index1~dyn^@index1,\n @index0~dyn^@index0\n ]~list(dyn)\n ]~list(list(dyn)),\n [\n 1~int,\n @index0~dyn^@index0,\n 2~int,\n @index0~dyn^@index0,\n 5~int,\n @index0~dyn^@index0,\n 7~int,\n @index2~dyn^@index2,\n @index1~dyn^@index1\n ]~list(dyn)\n)~list(dyn)^cel_block_list","type":"list(dyn)"},{"original":{"name":"select","expr":"cel.block([msg.single_int64, cel.index(0) + cel.index(0)], cel.index(1))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"6"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _+_(\n @index0~dyn^@index0,\n @index0~dyn^@index0\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index1~dyn^@index1\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"select_nested_1","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, cel.index(1).single_int32, cel.index(2) + cel.index(3), cel.index(4) + cel.index(2), msg.single_int64, cel.index(5) + cel.index(6), cel.index(1).oneof_type, cel.index(8).payload, cel.index(9).single_int64, cel.index(7) + cel.index(10)], cel.index(11))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"31"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int32^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index1~dyn^@index1.single_int32~dyn,\n _+_(\n @index2~dyn^@index2,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index2~dyn^@index2\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _+_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index1~dyn^@index1.oneof_type~dyn,\n @index8~dyn^@index8.payload~dyn,\n @index9~dyn^@index9.single_int64~dyn,\n _+_(\n @index7~dyn^@index7,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index11~dyn^@index11\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"select_nested_2","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).oneof_type, cel.index(2).payload, cel.index(3).oneof_type, cel.index(4).payload, cel.index(5).oneof_type, cel.index(6).payload, cel.index(7).single_bool, true || cel.index(8), cel.index(4).child, cel.index(10).child, cel.index(11).payload, cel.index(12).single_bool], cel.index(9) || cel.index(13))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_bool^#*expr.Expr_SelectExpr#,\n _||_(\n true^#*expr.Constant_BoolValue#,\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.child^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.child^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_bool^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n _||_(\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.oneof_type~dyn,\n @index2~dyn^@index2.payload~dyn,\n @index3~dyn^@index3.oneof_type~dyn,\n @index4~dyn^@index4.payload~dyn,\n @index5~dyn^@index5.oneof_type~dyn,\n @index6~dyn^@index6.payload~dyn,\n @index7~dyn^@index7.single_bool~dyn,\n _||_(\n true~bool,\n @index8~dyn^@index8\n )~bool^logical_or,\n @index4~dyn^@index4.child~dyn,\n @index10~dyn^@index10.child~dyn,\n @index11~dyn^@index11.payload~dyn,\n @index12~dyn^@index12.single_bool~dyn\n ]~list(dyn),\n _||_(\n @index9~dyn^@index9,\n @index13~dyn^@index13\n )~bool^logical_or\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"select_nested_message_map_index_1","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[1], cel.index(3) + cel.index(3), cel.index(4) + cel.index(3)], cel.index(5))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"15"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_int32_int64^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_int32_int64~dyn,\n _[_](\n @index2~dyn^@index2,\n 1~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index3~dyn^@index3,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"select_nested_message_map_index_2","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[0], cel.index(2)[1], cel.index(3) + cel.index(4), cel.index(2)[2], cel.index(5) + cel.index(6)], cel.index(7))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"8"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_int32_int64^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_int32_int64~dyn,\n _[_](\n @index2~dyn^@index2,\n 0~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _[_](\n @index2~dyn^@index2,\n 1~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index3~dyn^@index3,\n @index4~dyn^@index4\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _[_](\n @index2~dyn^@index2,\n 2~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index7~dyn^@index7\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"ternary","expr":"cel.block([msg.single_int64, cel.index(0) \u003e 0, cel.index(1) ? cel.index(0) : 0], cel.index(2))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"3"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _\u003e_(\n @index0~dyn^@index0,\n 0~int\n )~bool^greater_int64,\n _?_:_(\n @index1~dyn^@index1,\n @index0~dyn^@index0,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index2~dyn^@index2\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"nested_ternary","expr":"cel.block([msg.single_int64, msg.single_int32, cel.index(0) \u003e 0, cel.index(1) \u003e 0, cel.index(0) + cel.index(1), cel.index(3) ? cel.index(4) : 0, cel.index(2) ? cel.index(5) : 0], cel.index(6))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"8"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int32~int,\n _\u003e_(\n @index0~dyn^@index0,\n 0~int\n )~bool^greater_int64,\n _\u003e_(\n @index1~dyn^@index1,\n 0~int\n )~bool^greater_int64,\n _+_(\n @index0~dyn^@index0,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _?_:_(\n @index3~dyn^@index3,\n @index4~dyn^@index4,\n 0~int\n )~dyn^conditional,\n _?_:_(\n @index2~dyn^@index2,\n @index5~dyn^@index5,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index6~dyn^@index6\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"multiple_macros_1","expr":"cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))","value":{"int64Value":"4"}},"error":"ERROR: multiple_macros_1:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .................................^\nERROR: multiple_macros_1:1:110: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .............................................................................................................^"},{"original":{"name":"multiple_macros_2","expr":"cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))","value":{"listValue":{"values":[{"boolValue":true},{"boolValue":true},{"boolValue":true},{"boolValue":true}]}}},"error":"ERROR: multiple_macros_2:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .................................^\nERROR: multiple_macros_2:1:106: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .........................................................................................................^"},{"original":{"name":"multiple_macros_3","expr":"cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))","value":{"boolValue":false}},"error":"ERROR: multiple_macros_3:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | .................................^\nERROR: multiple_macros_3:1:121: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | ........................................................................................................................^\nERROR: multiple_macros_3:1:177: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | ................................................................................................................................................................................^"},{"original":{"name":"nested_macros_1","expr":"cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))","value":{"listValue":{"values":[{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}},{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"3"},{"int64Value":"4"}]}}]}}},"error":"ERROR: nested_macros_1:1:52: argument is not an identifier\n | cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))\n | ...................................................^\nERROR: nested_macros_1:1:88: argument is not an identifier\n | cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))\n | .......................................................................................^"},{"original":{"name":"nested_macros_2","expr":"[1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))","value":{"listValue":{"values":[{"listValue":{"values":[{"int64Value":"1"}]}},{"listValue":{"values":[{"int64Value":"2"}]}}]}}},"error":"ERROR: nested_macros_2:1:23: argument is not an identifier\n | [1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))\n | ......................^\nERROR: nested_macros_2:1:59: argument is not an identifier\n | [1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))\n | ..........................................................^"},{"original":{"name":"adjacent_macros","expr":"cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))","value":{"boolValue":true}},"error":"ERROR: adjacent_macros:1:51: argument is not an identifier\n | cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))\n | ..................................................^\nERROR: adjacent_macros:1:87: argument is not an identifier\n | cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))\n | ......................................................................................^"},{"original":{"name":"macro_shadowed_variable_1","expr":"cel.block([x - 1, cel.index(0) \u003e 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 \u003e 3) || cel.index(1))","typeEnv":[{"name":"x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"x":{"value":{"int64Value":"5"}}},"value":{"boolValue":true}},"error":"ERROR: macro_shadowed_variable_1:1:90: argument must be a simple name\n | cel.block([x - 1, cel.index(0) \u003e 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 \u003e 3) || cel.index(1))\n | .........................................................................................^"},{"original":{"name":"macro_shadowed_variable_2","expr":"['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])","typeEnv":[{"name":"x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"x":{"value":{"int64Value":"5"}}},"value":{"listValue":{"values":[{"listValue":{"values":[{"listValue":{"values":[{"stringValue":"foofoo"},{"stringValue":"foofoo"},{"stringValue":"foofoo"},{"stringValue":"foofoo"}]}},{"listValue":{"values":[{"stringValue":"foofoo"},{"stringValue":"foofoo"},{"stringValue":"foofoo"},{"stringValue":"foofoo"}]}}]}},{"listValue":{"values":[{"listValue":{"values":[{"stringValue":"barbar"},{"stringValue":"barbar"},{"stringValue":"barbar"},{"stringValue":"barbar"}]}},{"listValue":{"values":[{"stringValue":"barbar"},{"stringValue":"barbar"},{"stringValue":"barbar"},{"stringValue":"barbar"}]}}]}}]}}},"error":"ERROR: macro_shadowed_variable_2:1:31: argument is not an identifier\n | ['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])\n | ..............................^\nERROR: macro_shadowed_variable_2:1:134: argument is not an identifier\n | ['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])\n | .....................................................................................................................................^"},{"original":{"name":"inclusion_list","expr":"cel.block([[1, 2, 3], 1 in cel.index(0), 2 in cel.index(0), cel.index(1) \u0026\u0026 cel.index(2), [3, cel.index(0)], 3 in cel.index(4), cel.index(5) \u0026\u0026 cel.index(1)], cel.index(3) \u0026\u0026 cel.index(6))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 1^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 3^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n @in(\n 1~int,\n @index0~dyn^@index0\n )~bool^in_list|in_map,\n @in(\n 2~int,\n @index0~dyn^@index0\n )~bool^in_list|in_map,\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~bool^logical_and,\n [\n 3~int,\n @index0~dyn^@index0\n ]~list(dyn),\n @in(\n 3~int,\n @index4~dyn^@index4\n )~bool^in_list|in_map,\n _\u0026\u0026_(\n @index5~dyn^@index5,\n @index1~dyn^@index1\n )~bool^logical_and\n ]~list(dyn),\n _\u0026\u0026_(\n @index3~dyn^@index3,\n @index6~dyn^@index6\n )~bool^logical_and\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"inclusion_map","expr":"cel.block([{true: false}, {\"a\": 1, 2: cel.index(0), 3: cel.index(0)}], 2 in cel.index(1))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n true^#*expr.Constant_BoolValue#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n true~bool:false~bool\n }~map(bool, bool),\n {\n \"a\"~string:1~int,\n 2~int:@index0~dyn^@index0,\n 3~int:@index0~dyn^@index0\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn)),\n @in(\n 2~int,\n @index1~dyn^@index1\n )~bool^in_list|in_map\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"presence_test","expr":"cel.block([{\"a\": true}, has(cel.index(0).a), cel.index(0)[\"a\"]], cel.index(1) \u0026\u0026 cel.index(2))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n \"a\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.a~test-only~^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"a\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n \"a\"~string:true~bool\n }~map(string, bool),\n @index0~dyn^@index0.a~test-only~~bool,\n _[_](\n @index0~dyn^@index0,\n \"a\"~string\n )~dyn^index_map|optional_map_index_value\n ]~list(dyn),\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~bool^logical_and\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"presence_test_2","expr":"cel.block([{\"a\": true}, has(cel.index(0).a)], cel.index(1) \u0026\u0026 cel.index(1))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n \"a\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.a~test-only~^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n {\n \"a\"~string:true~bool\n }~map(string, bool),\n @index0~dyn^@index0.a~test-only~~bool\n ]~list(dyn),\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~bool^logical_and\n)~bool^cel_block_list","type":"bool"},{"original":{"name":"presence_test_with_ternary","expr":"cel.block([msg.oneof_type, has(cel.index(0).payload), cel.index(0).payload, cel.index(2).single_int64, cel.index(1) ? cel.index(3) : 0], cel.index(4))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"10"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~test-only~~bool,\n @index0~dyn^@index0.payload~dyn,\n @index2~dyn^@index2.single_int64~dyn,\n _?_:_(\n @index1~dyn^@index1,\n @index3~dyn^@index3,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index4~dyn^@index4\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"presence_test_with_ternary_2","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(0).payload), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"10"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index0~dyn^@index0.payload~test-only~~bool,\n _*_(\n @index2~dyn^@index2,\n 0~int\n )~int^multiply_int64,\n _?_:_(\n @index3~dyn^@index3,\n @index2~dyn^@index2,\n @index4~dyn^@index4\n )~dyn^conditional\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"presence_test_with_ternary_3","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(1).single_int64), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"int64Value":"10"}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64~test-only~^#*expr.Expr_SelectExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index1~dyn^@index1.single_int64~test-only~~bool,\n _*_(\n @index2~dyn^@index2,\n 0~int\n )~int^multiply_int64,\n _?_:_(\n @index3~dyn^@index3,\n @index2~dyn^@index2,\n @index4~dyn^@index4\n )~dyn^conditional\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"presence_test_with_ternary_nested","expr":"cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_string_string, has(msg.oneof_type), has(cel.index(0).payload), cel.index(3) \u0026\u0026 cel.index(4), has(cel.index(1).single_int64), cel.index(5) \u0026\u0026 cel.index(6), has(cel.index(1).map_string_string), has(cel.index(2).key), cel.index(8) \u0026\u0026 cel.index(9), cel.index(2).key, cel.index(11) == \"A\", cel.index(10) ? cel.index(12) : false], cel.index(7) ? cel.index(13) : false)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":5,"singleInt64":"3","oneofType":{"payload":{"singleInt32":8,"singleInt64":"10","mapInt32Int64":{"0":"1","1":"5","2":"2"},"mapStringString":{"key":"A"}}}}}}},"value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_string_string^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.oneof_type~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.key~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.key^#*expr.Expr_SelectExpr#,\n _==_(\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"A\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_string_string~dyn,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~test-only~~bool,\n @index0~dyn^@index0.payload~test-only~~bool,\n _\u0026\u0026_(\n @index3~dyn^@index3,\n @index4~dyn^@index4\n )~bool^logical_and,\n @index1~dyn^@index1.single_int64~test-only~~bool,\n _\u0026\u0026_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~bool^logical_and,\n @index1~dyn^@index1.map_string_string~test-only~~bool,\n @index2~dyn^@index2.key~test-only~~bool,\n _\u0026\u0026_(\n @index8~dyn^@index8,\n @index9~dyn^@index9\n )~bool^logical_and,\n @index2~dyn^@index2.key~dyn,\n _==_(\n @index11~dyn^@index11,\n \"A\"~string\n )~bool^equals,\n _?_:_(\n @index10~dyn^@index10,\n @index12~dyn^@index12,\n false~bool\n )~dyn^conditional\n ]~list(dyn),\n _?_:_(\n @index7~dyn^@index7,\n @index13~dyn^@index13,\n false~bool\n )~dyn^conditional\n)~dyn^cel_block_list","type":"dyn"},{"original":{"name":"optional_list","expr":"cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))","typeEnv":[{"name":"opt_x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"opt_x":{"value":{"int64Value":"5"}}},"value":{"boolValue":true}},"error":"ERROR: optional_list:1:30: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | .............................^\nERROR: optional_list:1:45: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | ............................................^\nERROR: optional_list:1:77: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | ............................................................................^"},{"original":{"name":"optional_map","expr":"cel.block([optional.of(\"hello\"), {?\"hello\": cel.index(0)}, cel.index(1)[\"hello\"], cel.index(2) + cel.index(2)], cel.index(3) == \"hellohello\")","value":{"boolValue":true}},"error":"ERROR: optional_map:1:35: unsupported syntax '?'\n | cel.block([optional.of(\"hello\"), {?\"hello\": cel.index(0)}, cel.index(1)[\"hello\"], cel.index(2) + cel.index(2)], cel.index(3) == \"hellohello\")\n | ..................................^"},{"original":{"name":"optional_map_chained","expr":"cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))","value":{"stringValue":"test"}},"error":"ERROR: optional_map_chained:1:51: unsupported syntax '?'\n | cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | ..................................................^\nERROR: optional_map_chained:1:86: unsupported syntax '[?'\n | cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | .....................................................................................^\nERROR: optional_map_chained:1:110: unsupported syntax '[?'\n | cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | .............................................................................................................^"},{"original":{"name":"optional_message","expr":"cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))","container":"cel.expr.conformance.proto3","value":{"int64Value":"5"}},"error":"ERROR: optional_message:1:69: unsupported syntax '?'\n | cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))\n | ....................................................................^\nERROR: optional_message:1:98: unsupported syntax '?'\n | cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))\n | .................................................................................................^"},{"original":{"name":"call","expr":"cel.block([\"h\" + \"e\", cel.index(0) + \"l\", cel.index(1) + \"l\", cel.index(2) + \"o\", cel.index(3) + \" world\"], cel.index(4).matches(cel.index(3)))","value":{"boolValue":true}},"ast":"cel^#*expr.Expr_IdentExpr#.block(\n [\n _+_(\n \"h\"^#*expr.Constant_StringValue#,\n \"e\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"l\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"l\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"o\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \" world\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.matches(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"cel.@block(\n [\n _+_(\n \"h\"~string,\n \"e\"~string\n )~string^add_string,\n _+_(\n @index0~dyn^@index0,\n \"l\"~string\n )~string^add_string,\n _+_(\n @index1~dyn^@index1,\n \"l\"~string\n )~string^add_string,\n _+_(\n @index2~dyn^@index2,\n \"o\"~string\n )~string^add_string,\n _+_(\n @index3~dyn^@index3,\n \" world\"~string\n )~string^add_string\n ]~list(string),\n @index4~dyn^@index4.matches(\n @index3~dyn^@index3\n )~bool^matches_string\n)~bool^cel_block_list","type":"bool"}]}]},{"name":"comparisons","suites":[{"name":"eq_literal","tests":[{"original":{"name":"eq_int","expr":"1 == 1","value":{"boolValue":true}},"ast":"_==_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 1~int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_int","expr":"-1 == 1","value":{"boolValue":false}},"ast":"_==_(\n -1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n -1~int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int_uint","expr":"dyn(1) == 1u","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_int_uint","expr":"dyn(2) == 1u","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int_double","expr":"dyn(1) == 1.0","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_int_double","expr":"dyn(2) == 1.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint","expr":"2u == 2u","value":{"boolValue":true}},"ast":"_==_(\n 2u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 2u~uint,\n 2u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_uint","expr":"1u == 2u","value":{"boolValue":false}},"ast":"_==_(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 1u~uint,\n 2u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint_int","expr":"dyn(1u) == 1","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_uint_int","expr":"dyn(2u) == 1","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint_double","expr":"dyn(1u) == 1.0","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_uint_double","expr":"dyn(2u) == 1.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double","expr":"1.0 == 1.0e+0","value":{"boolValue":true}},"ast":"_==_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 1~double,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_double","expr":"-1.0 == 1.0","value":{"boolValue":false}},"ast":"_==_(\n -1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n -1~double,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_double_nan","expr":"0.0/0.0 == 0.0/0.0","value":{"boolValue":false}},"ast":"_==_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_int_double_nan","expr":"dyn(1) == 0.0/0.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_uint_double_nan","expr":"dyn(1u) == 0.0/0.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_int","expr":"dyn(1.0) == 1","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_double_int","expr":"dyn(2.0) == 1","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_uint","expr":"dyn(1.0) == 1u","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_double_uint","expr":"dyn(2.0) == 1u","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string","expr":"'' == \"\"","value":{"boolValue":true}},"ast":"_==_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\"~string,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_string","expr":"'a' == 'b'","value":{"boolValue":false}},"ast":"_==_(\n \"a\"^#*expr.Constant_StringValue#,\n \"b\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"a\"~string,\n \"b\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_raw_string","expr":"'abc' == r'abc'","value":{"boolValue":true}},"ast":"_==_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"abc\"~string,\n \"abc\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_string_case","expr":"'abc' == 'ABC'","value":{"boolValue":false}},"ast":"_==_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"ABC\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"abc\"~string,\n \"ABC\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string_unicode","expr":"'ίσος' == 'ίσος'","value":{"boolValue":true}},"ast":"_==_(\n \"ίσος\"^#*expr.Constant_StringValue#,\n \"ίσος\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ίσος\"~string,\n \"ίσος\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_string_unicode_ascii","expr":"'a' == 'à'","value":{"boolValue":false}},"ast":"_==_(\n \"a\"^#*expr.Constant_StringValue#,\n \"à\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"a\"~string,\n \"à\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"no_string_normalization","description":"Should not normalize Unicode.","expr":"'Am\\u00E9lie' == 'Ame\\u0301lie'","value":{"boolValue":false}},"ast":"_==_(\n \"Amélie\"^#*expr.Constant_StringValue#,\n \"Amélie\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"Amélie\"~string,\n \"Amélie\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_null","expr":"null == null","value":{"boolValue":true}},"ast":"_==_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n null~null,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bool","expr":"true == true","value":{"boolValue":true}},"ast":"_==_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n true~bool,\n true~bool\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_bool","expr":"false == true","value":{"boolValue":false}},"ast":"_==_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n false~bool,\n true~bool\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes","description":"Test bytes literal equality with encoding","expr":"b'ÿ' == b'\\303\\277'","value":{"boolValue":true}},"ast":"_==_(\n b\"ÿ\"^#*expr.Constant_BytesValue#,\n b\"ÿ\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n b\"ÿ\"~bytes,\n b\"ÿ\"~bytes\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_bytes","expr":"b'abc' == b'abcd'","value":{"boolValue":false}},"ast":"_==_(\n b\"abc\"^#*expr.Constant_BytesValue#,\n b\"abcd\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n b\"abc\"~bytes,\n b\"abcd\"~bytes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_list_empty","expr":"[] == []","value":{"boolValue":true}},"ast":"_==_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n []~list(dyn),\n []~list(dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_list_null","expr":"[null] == [null]","value":{"boolValue":true}},"ast":"_==_(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n null~null\n ]~list(null),\n [\n null~null\n ]~list(null)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_null","expr":"['1', '2', null] == ['1', '2', '3']","value":{"boolValue":false}},"ast":"_==_(\n [\n \"1\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n \"1\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#,\n \"3\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n \"1\"~string,\n \"2\"~string,\n null~null\n ]~list(dyn),\n [\n \"1\"~string,\n \"2\"~string,\n \"3\"~string\n ]~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_list_numbers","expr":"[1, 2, 3] == [1, 2, 3]","value":{"boolValue":true}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_list_mixed_type_numbers","expr":"[1.0, 2.0, 3] == [1u, 2, 3u]","value":{"boolValue":true}},"ast":"_==_(\n [\n 1^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~double,\n 2~double,\n 3~int\n ]~list(dyn),\n [\n 1u~uint,\n 2~int,\n 3u~uint\n ]~list(dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_mixed_type_numbers","expr":"[1.0, 2.1] == [1u, 2]","value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_DoubleValue#,\n 2.1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~double,\n 2.1~double\n ]~list(double),\n [\n 1u~uint,\n 2~int\n ]~list(dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_order","expr":"[1, 2, 3] == [1, 3, 2]","value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n [\n 1~int,\n 3~int,\n 2~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_string_case","expr":"['case'] == ['cAse']","value":{"boolValue":false}},"ast":"_==_(\n [\n \"case\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n \"cAse\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n \"case\"~string\n ]~list(string),\n [\n \"cAse\"~string\n ]~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_length","expr":"['one'] == [2, 3]","disableCheck":true,"value":{"boolValue":false}},"ast":"_==_(\n [\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_==_' applied to '(list(string), list(int))'\n | ['one'] == [2, 3]\n | ........^"},{"original":{"name":"not_eq_list_false_vs_types","expr":"[1, 'dos', 3] == [1, 2, 4]","value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n \"dos\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n \"dos\"~string,\n 3~int\n ]~list(dyn),\n [\n 1~int,\n 2~int,\n 4~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_empty","expr":"{} == {}","value":{"boolValue":true}},"ast":"_==_(\n {}^#*expr.Expr_StructExpr#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {}~map(dyn, dyn),\n {}~map(dyn, dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_null","expr":"{'k': null} == {'k': null}","value":{"boolValue":true}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:null~null\n }~map(string, null),\n {\n \"k\"~string:null~null\n }~map(string, null)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_null","expr":"{'k': 1, 'j': 2} == {'k': 1, 'j': null}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"j\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"j\"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:1~int,\n \"j\"~string:2~int\n }~map(string, int),\n {\n \"k\"~string:1~int,\n \"j\"~string:null~null\n }~map(string, dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_onekey","expr":"{'k':'v'} == {\"k\":\"v\"}","value":{"boolValue":true}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:\"v\"~string\n }~map(string, string),\n {\n \"k\"~string:\"v\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_double_value","expr":"{'k':1.0} == {'k':1e+0}","value":{"boolValue":true}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:1~double\n }~map(string, double),\n {\n \"k\"~string:1~double\n }~map(string, double)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_mixed_type_numbers","expr":"{1: 1.0, 2u: 3u} == {1u: 1, 2: 3.0}","value":{"boolValue":true}},"ast":"_==_(\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n 1~int:1~double,\n 2u~uint:3u~uint\n }~map(dyn, dyn),\n {\n 1u~uint:1~int,\n 2~int:3~double\n }~map(dyn, dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_value","expr":"{'k':'v'} == {'k':'v1'}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:\"v\"~string\n }~map(string, string),\n {\n \"k\"~string:\"v1\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_extra_key","expr":"{'k':'v','k1':'v1'} == {'k':'v'}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k1\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:\"v\"~string,\n \"k1\"~string:\"v1\"~string\n }~map(string, string),\n {\n \"k\"~string:\"v\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_map_key_order","expr":"{'k1':'v1','k2':'v2'} == {'k2':'v2','k1':'v1'}","value":{"boolValue":true}},"ast":"_==_(\n {\n \"k1\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k2\"^#*expr.Constant_StringValue#:\"v2\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k2\"^#*expr.Constant_StringValue#:\"v2\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k1\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k1\"~string:\"v1\"~string,\n \"k2\"~string:\"v2\"~string\n }~map(string, string),\n {\n \"k2\"~string:\"v2\"~string,\n \"k1\"~string:\"v1\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_key_casing","expr":"{'key':'value'} == {'Key':'value'}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"key\"^#*expr.Constant_StringValue#:\"value\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"Key\"^#*expr.Constant_StringValue#:\"value\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"key\"~string:\"value\"~string\n }~map(string, string),\n {\n \"Key\"~string:\"value\"~string\n }~map(string, string)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_false_vs_types","expr":"{'k1': 1, 'k2': 'dos', 'k3': 3} == {'k1': 1, 'k2': 2, 'k3': 4}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"k2\"^#*expr.Constant_StringValue#:\"dos\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k3\"^#*expr.Constant_StringValue#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"k2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"k3\"^#*expr.Constant_StringValue#:4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k1\"~string:1~int,\n \"k2\"~string:\"dos\"~string,\n \"k3\"~string:3~int\n }~map(string, dyn),\n {\n \"k1\"~string:1~int,\n \"k2\"~string:2~int,\n \"k3\"~string:4~int\n }~map(string, int)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_mixed_types","expr":"1.0 == 1","disableCheck":true,"value":{"boolValue":true}},"ast":"_==_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_==_' applied to '(double, int)'\n | 1.0 == 1\n | ....^"},{"original":{"name":"eq_list_elem_mixed_types","expr":"[1] == [1.0]","disableCheck":true,"value":{"boolValue":true}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_==_' applied to '(list(int), list(double))'\n | [1] == [1.0]\n | ....^"},{"original":{"name":"eq_map_value_mixed_types","expr":"{'k':'v', 1:1} == {'k':'v', 1:'v1'}","value":{"boolValue":false}},"ast":"_==_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n \"k\"~string:\"v\"~string,\n 1~int:1~int\n }~map(dyn, dyn),\n {\n \"k\"~string:\"v\"~string,\n 1~int:\"v1\"~string\n }~map(dyn, string)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_json_null","expr":"dyn(google.protobuf.Value{}) == null","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n google.protobuf.Value{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n google.protobuf.Value{}~dyn^google.protobuf.Value\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_bool_null","expr":"dyn(false) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n false~bool\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_bytes_null","expr":"dyn(b'') == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_double_null","expr":"dyn(2.1) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 2.1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 2.1~double\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_duration_null","expr":"dyn(duration('0s')) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n duration(\n \"0s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n duration(\n \"0s\"~string\n )~duration^string_to_duration\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_int_null","expr":"dyn(1) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_list_null","expr":"dyn([]) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n []~list(dyn)\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_map_null","expr":"dyn({}) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n {}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n {}~map(dyn, dyn)\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_proto2_msg_null","expr":"dyn(TestAllTypes{}) == null","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_proto3_msg_null","expr":"dyn(TestAllTypes{}) == null","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_string_null","expr":"dyn('') == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n \"\"~string\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_timestamp_null","expr":"dyn(timestamp(0)) == null","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n timestamp(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n timestamp(\n 0~int\n )~timestamp^int64_to_timestamp\n )~dyn^to_dyn,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_list_elem_null","expr":"[1, 2, null] == [1, null, 3]","value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n null^#*expr.Constant_NullValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n 2~int,\n null~null\n ]~list(dyn),\n [\n 1~int,\n null~null,\n 3~int\n ]~list(dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_map_value_null","expr":"{1:'hello', 2:'world'} == {1:'goodbye', 2:null}","value":{"boolValue":false}},"ast":"_==_(\n {\n 1^#*expr.Constant_Int64Value#:\"hello\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:\"world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n {\n 1~int:\"hello\"~string,\n 2~int:\"world\"~string\n }~map(int, string),\n {\n 1~int:\"goodbye\"~string,\n 2~int:null~null\n }~map(int, dyn)\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_int_uint","expr":"dyn(1) == 1u","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_int_double","expr":"dyn(1) == 1.0","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_uint_int","expr":"dyn(1u) == 1","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_uint_double","expr":"dyn(1u) == 1.0","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_double_int","expr":"dyn(1.0) == 1","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_dyn_double_uint","expr":"dyn(1.0) == 1u","value":{"boolValue":true}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_int_uint","expr":"dyn(1) == 2u","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_int_double","expr":"dyn(1) == 2.0","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_uint_int","expr":"dyn(1u) == 2","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_uint_double","expr":"dyn(1u) == 120","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 120^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 120~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_double_int","expr":"dyn(1.0) == 2","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"not_eq_dyn_double_uint","expr":"dyn(1.0) == 2u","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^equals","type":"bool"}]},{"name":"eq_wrapper","tests":[{"original":{"name":"eq_bool","expr":"google.protobuf.BoolValue{value: true} == true","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue,\n true~bool\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bool_empty","expr":"google.protobuf.BoolValue{} == false","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue,\n false~bool\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bool_not_null","expr":"google.protobuf.BoolValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_bool_proto2_null","expr":"TestAllTypes{}.single_bool_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bool_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_bool_wrapper~wrapper(bool),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bool_proto3_null","expr":"TestAllTypes{}.single_bool_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bool_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_bool_wrapper~wrapper(bool),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes","expr":"google.protobuf.BytesValue{value: b'set'} == b'set'","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.BytesValue{\n value:b\"set\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n b\"set\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.BytesValue{\n value:b\"set\"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue,\n b\"set\"~bytes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes_empty","expr":"google.protobuf.BytesValue{} == b''","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue,\n b\"\"~bytes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes_not_null","expr":"google.protobuf.BytesValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_bytes_proto2_null","expr":"TestAllTypes{}.single_bytes_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bytes_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_bytes_wrapper~wrapper(bytes),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_bytes_proto3_null","expr":"TestAllTypes{}.single_bytes_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bytes_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_bytes_wrapper~wrapper(bytes),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double","expr":"google.protobuf.DoubleValue{value: -1.175494e-40} == -1.175494e-40","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.DoubleValue{\n value:-1.175494e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n -1.175494e-40^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.DoubleValue{\n value:-1.175494e-40~double\n }~wrapper(double)^google.protobuf.DoubleValue,\n -1.175494e-40~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_empty","expr":"google.protobuf.DoubleValue{} == 0.0","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue,\n 0~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_not_null","expr":"google.protobuf.DoubleValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_double_proto2_null","expr":"TestAllTypes{}.single_double_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_double_proto3_null","expr":"TestAllTypes{}.single_double_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_float","expr":"google.protobuf.FloatValue{value: -1.5} == -1.5","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.FloatValue{\n value:-1.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:-1.5~double\n }~wrapper(double)^google.protobuf.FloatValue,\n -1.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_float_empty","expr":"google.protobuf.FloatValue{} == 0.0","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue,\n 0~double\n)~bool^equals","type":"bool"},{"original":{"name":"eq_float_not_null","expr":"google.protobuf.FloatValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_float_proto2_null","expr":"TestAllTypes{}.single_float_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_float_proto3_null","expr":"TestAllTypes{}.single_float_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int32","expr":"google.protobuf.Int32Value{value: 123} == 123","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.Int32Value{\n value:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:123~int\n }~wrapper(int)^google.protobuf.Int32Value,\n 123~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int32_empty","expr":"google.protobuf.Int32Value{} == 0","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int32_not_null","expr":"google.protobuf.Int32Value{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_int32_proto2_null","expr":"TestAllTypes{}.single_int32_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int32_proto3_null","expr":"TestAllTypes{}.single_int32_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int64","expr":"google.protobuf.Int64Value{value: 2147483650} == 2147483650","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.Int64Value{\n value:2147483650^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2147483650^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int64Value{\n value:2147483650~int\n }~wrapper(int)^google.protobuf.Int64Value,\n 2147483650~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int64_empty","expr":"google.protobuf.Int64Value{} == 0","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int64_not_null","expr":"google.protobuf.Int64Value{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_int64_proto2_null","expr":"TestAllTypes{}.single_int64_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_int64_proto3_null","expr":"TestAllTypes{}.single_int64_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string","expr":"google.protobuf.StringValue{value: 'set'} == 'set'","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.StringValue{\n value:\"set\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"set\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.StringValue{\n value:\"set\"~string\n }~wrapper(string)^google.protobuf.StringValue,\n \"set\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string_empty","expr":"google.protobuf.StringValue{} == ''","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.StringValue{}^#*expr.Expr_StructExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string_not_null","expr":"google.protobuf.StringValue{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.StringValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_string_proto2_null","expr":"TestAllTypes{}.single_string_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_string_wrapper~wrapper(string),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_string_proto3_null","expr":"TestAllTypes{}.single_string_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_string_wrapper~wrapper(string),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint32","expr":"google.protobuf.UInt32Value{value: 42u} == 42u","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.UInt32Value{\n value:42u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:42u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n 42u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint32_empty","expr":"google.protobuf.UInt32Value{} == 0u","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value,\n 0u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint32_not_null","expr":"google.protobuf.UInt32Value{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_uint32_proto2_null","expr":"TestAllTypes{}.single_uint32_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint32_proto3_null","expr":"TestAllTypes{}.single_uint32_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_uint32_wrapper~wrapper(uint),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint64","expr":"google.protobuf.UInt64Value{value: 4294967296u} == 4294967296u","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.UInt64Value{\n value:4294967296u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 4294967296u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt64Value{\n value:4294967296u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value,\n 4294967296u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint64_empty","expr":"google.protobuf.UInt64Value{} == 0u","value":{"boolValue":true}},"ast":"_==_(\n google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value,\n 0u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint64_not_null","expr":"google.protobuf.UInt64Value{} != null","value":{"boolValue":true}},"ast":"_!=_(\n google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"eq_uint64_proto2_null","expr":"TestAllTypes{}.single_uint64_wrapper == null","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_uint64_proto3_null","expr":"TestAllTypes{}.single_uint64_wrapper == null","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_uint64_wrapper~wrapper(uint),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2","expr":"TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3","expr":"TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_missing_fields_neq","expr":"TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_missing_fields_neq","expr":"TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto_nan_equal","description":"For proto equality, fields with NaN value are treated as not equal.","expr":"TestAllTypes{single_double: double('NaN')} == TestAllTypes{single_double: double('NaN')}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_double:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_double:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n \"NaN\"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n \"NaN\"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto_different_types","description":"At runtime, differently typed messages are treated as not equal.","expr":"dyn(TestAllTypes{}) == dyn(NestedTestAllTypes{})","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n NestedTestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n dyn(\n cel.expr.conformance.proto2.NestedTestAllTypes{}~cel.expr.conformance.proto2.NestedTestAllTypes^cel.expr.conformance.proto2.NestedTestAllTypes\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_any_unpack_equal","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_any_unpack_not_equal","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_any_unpack_bytewise_fallback_not_equal","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto2_any_unpack_bytewise_fallback_equal","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_any_unpack_equal","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_any_unpack_not_equal","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_any_unpack_bytewise_fallback_not_equal","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"eq_proto3_any_unpack_bytewise_fallback_equal","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"ne_literal","tests":[{"original":{"name":"ne_int","expr":"24 != 42","value":{"boolValue":true}},"ast":"_!=_(\n 24^#*expr.Constant_Int64Value#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 24~int,\n 42~int\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_int","expr":"1 != 1","value":{"boolValue":false}},"ast":"_!=_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 1~int,\n 1~int\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_int_double","expr":"dyn(24) != 24.1","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 24.1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 24~int\n )~dyn^to_dyn,\n 24.1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_int_double","expr":"dyn(1) != 1.0","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_int_uint","expr":"dyn(24) != 42u","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 24~int\n )~dyn^to_dyn,\n 42u~uint\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_int_uint","expr":"dyn(1) != 1u","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_uint","expr":"1u != 2u","value":{"boolValue":true}},"ast":"_!=_(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 1u~uint,\n 2u~uint\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_uint","expr":"99u != 99u","value":{"boolValue":false}},"ast":"_!=_(\n 99u^#*expr.Constant_Uint64Value#,\n 99u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 99u~uint,\n 99u~uint\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_uint_double","expr":"dyn(1u) != 2.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_uint_double","expr":"dyn(99u) != 99.0","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 99u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 99u~uint\n )~dyn^to_dyn,\n 99~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_double","expr":"9.0e+3 != 9001.0","value":{"boolValue":true}},"ast":"_!=_(\n 9000^#*expr.Constant_DoubleValue#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 9000~double,\n 9001~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_double_nan","expr":"0.0/0.0 != 0.0/0.0","value":{"boolValue":true}},"ast":"_!=_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_int_double_nan","expr":"dyn(1) != 0.0/0.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_uint_double_nan","expr":"dyn(1u) != 0.0/0.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_double","expr":"1.0 != 1e+0","value":{"boolValue":false}},"ast":"_!=_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n 1~double,\n 1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_double_int","expr":"dyn(9000) != 9001.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 9000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 9000~int\n )~dyn^to_dyn,\n 9001~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_double_int","expr":"dyn(1) != 1e+0","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_double_uint","expr":"dyn(9000u) != 9001.0","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n 9000u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 9000u~uint\n )~dyn^to_dyn,\n 9001~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_double_uint","expr":"dyn(1u) != 1e+0","value":{"boolValue":false}},"ast":"_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_double_nan","expr":"0.0/0.0 != 0.0/0.0","value":{"boolValue":true}},"ast":"_!=_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_string","expr":"'abc' != ''","value":{"boolValue":true}},"ast":"_!=_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n \"abc\"~string,\n \"\"~string\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_string","expr":"'abc' != 'abc'","value":{"boolValue":false}},"ast":"_!=_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n \"abc\"~string,\n \"abc\"~string\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_string_unicode","expr":"'résumé' != 'resume'","value":{"boolValue":true}},"ast":"_!=_(\n \"résumé\"^#*expr.Constant_StringValue#,\n \"resume\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n \"résumé\"~string,\n \"resume\"~string\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_string_unicode","expr":"'ίδιο' != 'ίδιο'","value":{"boolValue":false}},"ast":"_!=_(\n \"ίδιο\"^#*expr.Constant_StringValue#,\n \"ίδιο\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n \"ίδιο\"~string,\n \"ίδιο\"~string\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_bytes","expr":"b'\\x00\\xFF' != b'ÿ'","value":{"boolValue":true}},"ast":"_!=_(\n b\"\\x00\\xff\"^#*expr.Constant_BytesValue#,\n b\"ÿ\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n b\"\\x00\\xff\"~bytes,\n b\"ÿ\"~bytes\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_bytes","expr":"b'\\303\\277' != b'ÿ'","value":{"boolValue":false}},"ast":"_!=_(\n b\"ÿ\"^#*expr.Constant_BytesValue#,\n b\"ÿ\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n b\"ÿ\"~bytes,\n b\"ÿ\"~bytes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_bool","expr":"false != true","value":{"boolValue":true}},"ast":"_!=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n false~bool,\n true~bool\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_bool","expr":"true != true","value":{"boolValue":false}},"ast":"_!=_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n true~bool,\n true~bool\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_null","description":"null can only be equal to null, or else it won't match","expr":"null != null","value":{"boolValue":false}},"ast":"_!=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n null~null,\n null~null\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_list_empty","expr":"[] != [1]","value":{"boolValue":true}},"ast":"_!=_(\n []^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n []~list(int),\n [\n 1~int\n ]~list(int)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_list_empty","expr":"[] != []","value":{"boolValue":false}},"ast":"_!=_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n []~list(dyn),\n []~list(dyn)\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_list_bool","expr":"[true, false, true] != [true, true, false]","value":{"boolValue":true}},"ast":"_!=_(\n [\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#,\n [\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n [\n true~bool,\n false~bool,\n true~bool\n ]~list(bool),\n [\n true~bool,\n true~bool,\n false~bool\n ]~list(bool)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_list_bool","expr":"[false, true] != [false, true]","value":{"boolValue":false}},"ast":"_!=_(\n [\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#,\n [\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n [\n false~bool,\n true~bool\n ]~list(bool),\n [\n false~bool,\n true~bool\n ]~list(bool)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_list_of_list","expr":"[[]] != [[]]","value":{"boolValue":false}},"ast":"_!=_(\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n [\n []~list(dyn)\n ]~list(list(dyn)),\n [\n []~list(dyn)\n ]~list(list(dyn))\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_map_by_value","expr":"{'k':'v'} != {'k':'v1'}","value":{"boolValue":true}},"ast":"_!=_(\n {\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n \"k\"~string:\"v\"~string\n }~map(string, string),\n {\n \"k\"~string:\"v1\"~string\n }~map(string, string)\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_map_by_key","expr":"{'k':true} != {'k1':true}","value":{"boolValue":true}},"ast":"_!=_(\n {\n \"k\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"k1\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n \"k\"~string:true~bool\n }~map(string, bool),\n {\n \"k1\"~string:true~bool\n }~map(string, bool)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_map_int_to_float","expr":"{1:1.0} != {1:1.0}","value":{"boolValue":false}},"ast":"_!=_(\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n 1~int:1~double\n }~map(int, double),\n {\n 1~int:1~double\n }~map(int, double)\n)~bool^not_equals","type":"bool"},{"original":{"name":"not_ne_map_key_order","expr":"{'a':'b','c':'d'} != {'c':'d','a':'b'}","value":{"boolValue":false}},"ast":"_!=_(\n {\n \"a\"^#*expr.Constant_StringValue#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"c\"^#*expr.Constant_StringValue#:\"d\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n \"c\"^#*expr.Constant_StringValue#:\"d\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"a\"^#*expr.Constant_StringValue#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n \"a\"~string:\"b\"~string,\n \"c\"~string:\"d\"~string\n }~map(string, string),\n {\n \"c\"~string:\"d\"~string,\n \"a\"~string:\"b\"~string\n }~map(string, string)\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_mixed_types","expr":"2u != 2","disableCheck":true,"value":{"boolValue":false}},"ast":"_!=_(\n 2u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:4: found no matching overload for '_!=_' applied to '(uint, int)'\n | 2u != 2\n | ...^"},{"original":{"name":"ne_proto2","expr":"TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto3","expr":"TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto2_missing_fields_neq","expr":"TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto3_missing_fields_neq","expr":"TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:\"1234\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_string:\"1234\"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto_nan_not_equal","description":"For proto equality, NaN field values are not considered equal.","expr":"TestAllTypes{single_double: double('NaN')} != TestAllTypes{single_double: double('NaN')}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_double:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_double:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n \"NaN\"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n \"NaN\"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto_different_types","description":"At runtime, comparing differently typed messages is false.","expr":"dyn(TestAllTypes{}) != dyn(NestedTestAllTypes{})","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_!=_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n NestedTestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n dyn(\n cel.expr.conformance.proto2.NestedTestAllTypes{}~cel.expr.conformance.proto2.NestedTestAllTypes^cel.expr.conformance.proto2.NestedTestAllTypes\n )~dyn^to_dyn\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto2_any_unpack","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto2_any_unpack_bytewise_fallback","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto3_any_unpack","description":"Any values should be unpacked and compared.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals","type":"bool"},{"original":{"name":"ne_proto3_any_unpack_bytewise_fallback","description":"If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.","expr":"TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01\"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals","type":"bool"}]},{"name":"lt_literal","tests":[{"original":{"name":"lt_int","expr":"-1 \u003c 0","value":{"boolValue":true}},"ast":"_\u003c_(\n -1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n -1~int,\n 0~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_int","expr":"0 \u003c 0","value":{"boolValue":false}},"ast":"_\u003c_(\n 0^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n 0~int,\n 0~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"lt_uint","expr":"0u \u003c 1u","value":{"boolValue":true}},"ast":"_\u003c_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n 0u~uint,\n 1u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_uint","expr":"2u \u003c 2u","value":{"boolValue":false}},"ast":"_\u003c_(\n 2u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n 2u~uint,\n 2u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"lt_double","expr":"1.0 \u003c 1.0000001","value":{"boolValue":true}},"ast":"_\u003c_(\n 1^#*expr.Constant_DoubleValue#,\n 1.0000001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n 1~double,\n 1.0000001~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_double","description":"Following IEEE 754, negative zero compares equal to zero","expr":"-0.0 \u003c 0.0","value":{"boolValue":false}},"ast":"_\u003c_(\n -0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n -0~double,\n 0~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_string","expr":"'a' \u003c 'b'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"a\"^#*expr.Constant_StringValue#,\n \"b\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"a\"~string,\n \"b\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_string_empty_to_nonempty","expr":"'' \u003c 'a'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"\"^#*expr.Constant_StringValue#,\n \"a\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"\"~string,\n \"a\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_string_case","expr":"'Abc' \u003c 'aBC'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"Abc\"^#*expr.Constant_StringValue#,\n \"aBC\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"Abc\"~string,\n \"aBC\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_string_length","expr":"'abc' \u003c 'abcd'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abcd\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"abc\"~string,\n \"abcd\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_string_diacritical_mark_sensitive","description":"Verifies that the we're not using a string comparison function that strips diacritical marks (á)","expr":"'a' \u003c '\\u00E1'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"a\"^#*expr.Constant_StringValue#,\n \"á\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"a\"~string,\n \"á\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"not_lt_string_empty","expr":"'' \u003c ''","value":{"boolValue":false}},"ast":"_\u003c_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"\"~string,\n \"\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"not_lt_string_same","expr":"'abc' \u003c 'abc'","value":{"boolValue":false}},"ast":"_\u003c_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"abc\"~string,\n \"abc\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"not_lt_string_case_length","expr":"'a' \u003c 'AB'","value":{"boolValue":false}},"ast":"_\u003c_(\n \"a\"^#*expr.Constant_StringValue#,\n \"AB\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"a\"~string,\n \"AB\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"unicode_order_lexical","description":"Compare the actual code points of the string, instead of decomposing ế into 'e' plus accent modifiers.","expr":"'f' \u003c '\\u1EBF'","value":{"boolValue":true}},"ast":"_\u003c_(\n \"f\"^#*expr.Constant_StringValue#,\n \"ế\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n \"f\"~string,\n \"ế\"~string\n)~bool^less_string","type":"bool"},{"original":{"name":"lt_bytes","expr":"b'a' \u003c b'b'","value":{"boolValue":true}},"ast":"_\u003c_(\n b\"a\"^#*expr.Constant_BytesValue#,\n b\"b\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n b\"a\"~bytes,\n b\"b\"~bytes\n)~bool^less_bytes","type":"bool"},{"original":{"name":"not_lt_bytes_same","expr":"b'abc' \u003c b'abc'","value":{"boolValue":false}},"ast":"_\u003c_(\n b\"abc\"^#*expr.Constant_BytesValue#,\n b\"abc\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n b\"abc\"~bytes,\n b\"abc\"~bytes\n)~bool^less_bytes","type":"bool"},{"original":{"name":"not_lt_bytes_width","expr":"b'á' \u003c b'b'","value":{"boolValue":false}},"ast":"_\u003c_(\n b\"á\"^#*expr.Constant_BytesValue#,\n b\"b\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n b\"á\"~bytes,\n b\"b\"~bytes\n)~bool^less_bytes","type":"bool"},{"original":{"name":"lt_bool_false_first","expr":"false \u003c true","value":{"boolValue":true}},"ast":"_\u003c_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n false~bool,\n true~bool\n)~bool^less_bool","type":"bool"},{"original":{"name":"not_lt_bool_same","expr":"true \u003c true","value":{"boolValue":false}},"ast":"_\u003c_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n true~bool,\n true~bool\n)~bool^less_bool","type":"bool"},{"original":{"name":"not_lt_bool_true_first","expr":"true \u003c false","value":{"boolValue":false}},"ast":"_\u003c_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n true~bool,\n false~bool\n)~bool^less_bool","type":"bool"},{"original":{"name":"lt_list_unsupported","expr":"[0] \u003c [1]","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003c_' applied to '(list(int), list(int))'\n | [0] \u003c [1]\n | ....^"},{"original":{"name":"lt_map_unsupported","expr":"{0:'a'} \u003c {1:'b'}","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n {\n 0^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003c_' applied to '(map(int, string), map(int, string))'\n | {0:'a'} \u003c {1:'b'}\n | ........^"},{"original":{"name":"lt_null_unsupported","description":"Ensure _\u003c_ doesn't have a binding for null","expr":"null \u003c null","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n null~null,\n null~null\n)~bool^less_duration|less_timestamp","type":"bool"},{"original":{"name":"lt_mixed_types_error","expr":"'foo' \u003c 1024","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n \"foo\"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003c_' applied to '(string, int)'\n | 'foo' \u003c 1024\n | ......^"},{"original":{"name":"lt_dyn_int_uint","expr":"dyn(1) \u003c 2u","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"lt_dyn_int_double","expr":"dyn(1) \u003c 2.0","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_dyn_uint_int","expr":"dyn(1u) \u003c 2","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"lt_dyn_uint_double","expr":"dyn(1u) \u003c 2.0","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_dyn_double_int","expr":"dyn(1.0) \u003c 2","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"lt_dyn_double_uint","expr":"dyn(1.0) \u003c 2u","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_dyn_int_uint","expr":"dyn(1) \u003c 1u","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_dyn_int_double","expr":"dyn(1) \u003c 1.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_uint_int","expr":"dyn(1u) \u003c 1","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_uint_double","expr":"dyn(1u) \u003c 1.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_double_int","expr":"dyn(1.0) \u003c 1","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_double_uint","expr":"dyn(1.0) \u003c 1u","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"lt_dyn_int_big_uint","expr":"dyn(1) \u003c 9223372036854775808u","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"lt_dyn_small_int_uint","expr":"dyn(-1) \u003c 0u","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_dyn_int_big_lossy_double","expr":"dyn(9223372036854775807) \u003c 9223372036854775808.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_dyn_int_big_lossy_double","expr":"dyn(9223372036854775807) \u003c 9223372036854777857.0","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854778e+18~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_int_small_double","expr":"dyn(9223372036854775807) \u003c -9223372036854777857.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_int_small_lossy_double","expr":"dyn(-9223372036854775808) \u003c -9223372036854775809.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_uint_small_int","expr":"dyn(1u) \u003c -9223372036854775808","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_big_uint_int","expr":"dyn(9223372036854775808u) \u003c 1","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_uint_small_double","expr":"dyn(18446744073709551615u) \u003c -1.0","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^less_double","type":"bool"},{"original":{"name":"lt_dyn_uint_big_double","expr":"dyn(18446744073709551615u) \u003c 18446744073709590000.0","value":{"boolValue":true}},"ast":"_\u003c_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^less_double","type":"bool"},{"original":{"name":"not_lt_dyn_big_double_uint","expr":"dyn(18446744073709553665.0) \u003c 18446744073709551615u","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^less_uint64","type":"bool"},{"original":{"name":"not_lt_dyn_big_double_int","expr":"dyn(9223372036854775808.0) \u003c 9223372036854775807","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^less_int64","type":"bool"},{"original":{"name":"not_lt_dyn_small_double_int","expr":"dyn(-9223372036854775809.0) \u003c -9223372036854775808","value":{"boolValue":false}},"ast":"_\u003c_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_int64","type":"bool"}]},{"name":"gt_literal","tests":[{"original":{"name":"gt_int","expr":"42 \u003e -42","value":{"boolValue":true}},"ast":"_\u003e_(\n 42^#*expr.Constant_Int64Value#,\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 42~int,\n -42~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"not_gt_int","expr":"0 \u003e 0","value":{"boolValue":false}},"ast":"_\u003e_(\n 0^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 0~int,\n 0~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_uint","expr":"48u \u003e 46u","value":{"boolValue":true}},"ast":"_\u003e_(\n 48u^#*expr.Constant_Uint64Value#,\n 46u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 48u~uint,\n 46u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_uint","expr":"0u \u003e 999u","value":{"boolValue":false}},"ast":"_\u003e_(\n 0u^#*expr.Constant_Uint64Value#,\n 999u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 0u~uint,\n 999u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"gt_double","expr":"1e+1 \u003e 1e+0","value":{"boolValue":true}},"ast":"_\u003e_(\n 10^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 10~double,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_double","expr":".99 \u003e 9.9e-1","value":{"boolValue":false}},"ast":"_\u003e_(\n 0.99^#*expr.Constant_DoubleValue#,\n 0.99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n 0.99~double,\n 0.99~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_string_case","expr":"'abc' \u003e 'aBc'","value":{"boolValue":true}},"ast":"_\u003e_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"aBc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n \"abc\"~string,\n \"aBc\"~string\n)~bool^greater_string","type":"bool"},{"original":{"name":"gt_string_to_empty","expr":"'A' \u003e ''","value":{"boolValue":true}},"ast":"_\u003e_(\n \"A\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n \"A\"~string,\n \"\"~string\n)~bool^greater_string","type":"bool"},{"original":{"name":"not_gt_string_empty_to_empty","expr":"'' \u003e ''","value":{"boolValue":false}},"ast":"_\u003e_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n \"\"~string,\n \"\"~string\n)~bool^greater_string","type":"bool"},{"original":{"name":"gt_string_unicode","expr":"'α' \u003e 'omega'","value":{"boolValue":true}},"ast":"_\u003e_(\n \"α\"^#*expr.Constant_StringValue#,\n \"omega\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n \"α\"~string,\n \"omega\"~string\n)~bool^greater_string","type":"bool"},{"original":{"name":"gt_bytes_one","expr":"b'\u0001' \u003e b'\u0000'","value":{"boolValue":true}},"ast":"_\u003e_(\n b\"\\x01\"^#*expr.Constant_BytesValue#,\n b\"\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n b\"\\x01\"~bytes,\n b\"\\x00\"~bytes\n)~bool^greater_bytes","type":"bool"},{"original":{"name":"gt_bytes_one_to_empty","expr":"b'\u0000' \u003e b''","value":{"boolValue":true}},"ast":"_\u003e_(\n b\"\\x00\"^#*expr.Constant_BytesValue#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n b\"\\x00\"~bytes,\n b\"\"~bytes\n)~bool^greater_bytes","type":"bool"},{"original":{"name":"not_gt_bytes_sorting","expr":"b'\u0000\u0001' \u003e b'\u0001'","value":{"boolValue":false}},"ast":"_\u003e_(\n b\"\\x00\\x01\"^#*expr.Constant_BytesValue#,\n b\"\\x01\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n b\"\\x00\\x01\"~bytes,\n b\"\\x01\"~bytes\n)~bool^greater_bytes","type":"bool"},{"original":{"name":"gt_bool_true_false","expr":"true \u003e false","value":{"boolValue":true}},"ast":"_\u003e_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n true~bool,\n false~bool\n)~bool^greater_bool","type":"bool"},{"original":{"name":"not_gt_bool_false_true","expr":"false \u003e true","value":{"boolValue":false}},"ast":"_\u003e_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n false~bool,\n true~bool\n)~bool^greater_bool","type":"bool"},{"original":{"name":"not_gt_bool_same","expr":"true \u003e true","value":{"boolValue":false}},"ast":"_\u003e_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n true~bool,\n true~bool\n)~bool^greater_bool","type":"bool"},{"original":{"name":"gt_null_unsupported","expr":"null \u003e null","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n null~null,\n null~null\n)~bool^greater_duration|greater_timestamp","type":"bool"},{"original":{"name":"gt_list_unsupported","expr":"[1] \u003e [0]","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e_(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003e_' applied to '(list(int), list(int))'\n | [1] \u003e [0]\n | ....^"},{"original":{"name":"gt_map_unsupported","expr":"{1:'b'} \u003e {0:'a'}","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e_(\n {\n 1^#*expr.Constant_Int64Value#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 0^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003e_' applied to '(map(int, string), map(int, string))'\n | {1:'b'} \u003e {0:'a'}\n | ........^"},{"original":{"name":"gt_mixed_types_error","expr":"'foo' \u003e 1024","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e_(\n \"foo\"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e_' applied to '(string, int)'\n | 'foo' \u003e 1024\n | ......^"},{"original":{"name":"gt_dyn_int_uint","expr":"dyn(2) \u003e 1u","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"gt_dyn_int_double","expr":"dyn(2) \u003e 1.0","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_uint_int","expr":"dyn(2u) \u003e 1","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_dyn_uint_double","expr":"dyn(2u) \u003e 1.0","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_double_int","expr":"dyn(2.0) \u003e 1","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_dyn_double_uint","expr":"dyn(2.0) \u003e 1u","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_int_uint","expr":"dyn(1) \u003e 1u","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_int_double","expr":"dyn(1) \u003e 1.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_dyn_uint_int","expr":"dyn(1u) \u003e 1","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"not_gt_dyn_uint_double","expr":"dyn(1u) \u003e 1.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_dyn_double_int","expr":"dyn(1.0) \u003e 1","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"not_gt_dyn_double_uint","expr":"dyn(1.0) \u003e 1u","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_int_big_uint","expr":"dyn(1) \u003e 9223372036854775808u","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_small_int_uint","expr":"dyn(-1) \u003e 0u","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_int_big_double","expr":"dyn(9223372036854775807) \u003e 9223372036854775808.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_dyn_int_small_lossy_double","description":"The conversion of the int to double is lossy and the numbers end up being equal","expr":"dyn(-9223372036854775808) \u003e -9223372036854775809.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_int_small_lossy_double_greater","expr":"dyn(-9223372036854775808) \u003e -9223372036854777857.0","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_uint_small_int","expr":"dyn(1u) \u003e -1","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_dyn_big_uint_int","expr":"dyn(9223372036854775808u) \u003e 1","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"gt_dyn_uint_small_double","expr":"dyn(9223372036854775807u) \u003e -1.0","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 9223372036854775807u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"not_gt_dyn_uint_big_double","expr":"dyn(18446744073709551615u) \u003e 18446744073709590000.0","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^greater_double","type":"bool"},{"original":{"name":"gt_dyn_big_double_uint","expr":"dyn(18446744073709553665.0) \u003e 18446744073709551615u","value":{"boolValue":true}},"ast":"_\u003e_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^greater_uint64","type":"bool"},{"original":{"name":"not_gt_dyn_big_double_int","expr":"dyn(9223372036854775808.0) \u003e 9223372036854775807","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^greater_int64","type":"bool"},{"original":{"name":"not_gt_dyn_small_double_int","expr":"dyn(-9223372036854775809.0) \u003e -9223372036854775808","value":{"boolValue":false}},"ast":"_\u003e_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^greater_int64","type":"bool"}]},{"name":"lte_literal","tests":[{"original":{"name":"lte_int_lt","expr":"0 \u003c= 1","value":{"boolValue":true}},"ast":"_\u003c=_(\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 0~int,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_int_eq","expr":"1 \u003c= 1","value":{"boolValue":true}},"ast":"_\u003c=_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1~int,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_int_gt","expr":"1 \u003c= -1","value":{"boolValue":false}},"ast":"_\u003c=_(\n 1^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1~int,\n -1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_uint_lt","expr":"0u \u003c= 1u","value":{"boolValue":true}},"ast":"_\u003c=_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 0u~uint,\n 1u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_uint_eq","expr":"1u \u003c= 1u","value":{"boolValue":true}},"ast":"_\u003c=_(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1u~uint,\n 1u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"not_lte_uint_gt","expr":"1u \u003c= 0u","value":{"boolValue":false}},"ast":"_\u003c=_(\n 1u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1u~uint,\n 0u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_double_lt","expr":"0.0 \u003c= 0.1e-31","value":{"boolValue":true}},"ast":"_\u003c=_(\n 0^#*expr.Constant_DoubleValue#,\n 1e-32^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 0~double,\n 1e-32~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_double_eq","expr":"0.0 \u003c= 0e-1","value":{"boolValue":true}},"ast":"_\u003c=_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 0~double,\n 0~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_double_gt","expr":"1.0 \u003c= 0.99","value":{"boolValue":false}},"ast":"_\u003c=_(\n 1^#*expr.Constant_DoubleValue#,\n 0.99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 1~double,\n 0.99~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_string_empty","expr":"'' \u003c= ''","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"\"~string,\n \"\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_string_from_empty","expr":"'' \u003c= 'a'","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"\"^#*expr.Constant_StringValue#,\n \"a\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"\"~string,\n \"a\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"not_lte_string_to_empty","expr":"'a' \u003c= ''","value":{"boolValue":false}},"ast":"_\u003c=_(\n \"a\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"a\"~string,\n \"\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_string_lexicographical","expr":"'aBc' \u003c= 'abc'","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"aBc\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"aBc\"~string,\n \"abc\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_string_unicode_eq","expr":"'α' \u003c= 'α'","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"α\"^#*expr.Constant_StringValue#,\n \"α\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"α\"~string,\n \"α\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_string_unicode_lt","expr":"'a' \u003c= 'α'","value":{"boolValue":true}},"ast":"_\u003c=_(\n \"a\"^#*expr.Constant_StringValue#,\n \"α\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"a\"~string,\n \"α\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"not_lte_string_unicode","expr":"'α' \u003c= 'a'","value":{"boolValue":false}},"ast":"_\u003c=_(\n \"α\"^#*expr.Constant_StringValue#,\n \"a\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n \"α\"~string,\n \"a\"~string\n)~bool^less_equals_string","type":"bool"},{"original":{"name":"lte_bytes_empty","expr":"b'' \u003c= b'\u0000'","value":{"boolValue":true}},"ast":"_\u003c=_(\n b\"\"^#*expr.Constant_BytesValue#,\n b\"\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n b\"\"~bytes,\n b\"\\x00\"~bytes\n)~bool^less_equals_bytes","type":"bool"},{"original":{"name":"not_lte_bytes_length","expr":"b'\u0001\u0000' \u003c= b'\u0001'","value":{"boolValue":false}},"ast":"_\u003c=_(\n b\"\\x01\\x00\"^#*expr.Constant_BytesValue#,\n b\"\\x01\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n b\"\\x01\\x00\"~bytes,\n b\"\\x01\"~bytes\n)~bool^less_equals_bytes","type":"bool"},{"original":{"name":"lte_bool_false_true","expr":"false \u003c= true","value":{"boolValue":true}},"ast":"_\u003c=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n false~bool,\n true~bool\n)~bool^less_equals_bool","type":"bool"},{"original":{"name":"lte_bool_false_false","expr":"false \u003c= false","value":{"boolValue":true}},"ast":"_\u003c=_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n false~bool,\n false~bool\n)~bool^less_equals_bool","type":"bool"},{"original":{"name":"lte_bool_true_false","expr":"true \u003c= false","value":{"boolValue":false}},"ast":"_\u003c=_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n true~bool,\n false~bool\n)~bool^less_equals_bool","type":"bool"},{"original":{"name":"lte_null_unsupported","expr":"null \u003c= null","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n null~null,\n null~null\n)~bool^less_equals_duration|less_equals_timestamp","type":"bool"},{"original":{"name":"lte_list_unsupported","expr":"[0] \u003c= [0]","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c=_(\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003c=_' applied to '(list(int), list(int))'\n | [0] \u003c= [0]\n | ....^"},{"original":{"name":"lte_map_unsupported","expr":"{0:'a'} \u003c= {1:'b'}","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c=_(\n {\n 0^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003c=_' applied to '(map(int, string), map(int, string))'\n | {0:'a'} \u003c= {1:'b'}\n | ........^"},{"original":{"name":"lte_mixed_types_error","expr":"'foo' \u003c= 1024","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c=_(\n \"foo\"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003c=_' applied to '(string, int)'\n | 'foo' \u003c= 1024\n | ......^"},{"original":{"name":"lte_dyn_int_uint","expr":"dyn(1) \u003c= 2u","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_int_double","expr":"dyn(1) \u003c= 2.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_dyn_uint_int","expr":"dyn(1u) \u003c= 2","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_dyn_uint_double","expr":"dyn(1u) \u003c= 2.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_dyn_double_int","expr":"dyn(1.0) \u003c= 2","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_dyn_double_uint","expr":"dyn(1.0) \u003c= 2u","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"not_lte_dyn_int_uint","expr":"dyn(2) \u003c= 1u","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"not_lte_dyn_int_double","expr":"dyn(2) \u003c= 1.0","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_uint_int","expr":"dyn(2u) \u003c= 1","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_dyn_uint_double","expr":"dyn(2u) \u003c= 1.0","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_double_int","expr":"dyn(2.0) \u003c= 1","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_dyn_double_uint","expr":"dyn(2.0) \u003c= 1u","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_int_big_uint","expr":"dyn(1) \u003c= 9223372036854775808u","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_small_int_uint","expr":"dyn(-1) \u003c= 0u","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_int_big_double","expr":"dyn(9223372036854775807) \u003c= 9223372036854775808.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_dyn_int_small_lossy_double","description":"The conversion of the int to double is lossy and the numbers end up being equal","expr":"dyn(-9223372036854775808) \u003c= -9223372036854775809.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_int_small_lossy_double_less","expr":"dyn(-9223372036854775808) \u003c= -9223372036854777857.0","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_uint_small_int","expr":"dyn(1u) \u003c= -9223372036854775808","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_dyn_big_uint_int","expr":"dyn(9223372036854775808u) \u003c= 1","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"not_lte_dyn_uint_small_double","expr":"dyn(18446744073709551615u) \u003c= -1.0","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"lte_dyn_uint_big_double","expr":"dyn(18446744073709551615u) \u003c= 18446744073709590000.0","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^less_equals_double","type":"bool"},{"original":{"name":"not_lte_dyn_big_double_uint","expr":"dyn(18446744073709553665.0) \u003c= 18446744073709551615u","value":{"boolValue":false}},"ast":"_\u003c=_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^less_equals_uint64","type":"bool"},{"original":{"name":"lte_dyn_big_double_int","expr":"dyn(9223372036854775808.0) \u003c= 9223372036854775807","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"lte_dyn_small_double_int","expr":"dyn(-9223372036854775809.0) \u003c= -9223372036854775808","value":{"boolValue":true}},"ast":"_\u003c=_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_equals_int64","type":"bool"}]},{"name":"gte_literal","tests":[{"original":{"name":"gte_int_gt","expr":"0 \u003e= -1","value":{"boolValue":true}},"ast":"_\u003e=_(\n 0^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 0~int,\n -1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_int_eq","expr":"999 \u003e= 999","value":{"boolValue":true}},"ast":"_\u003e=_(\n 999^#*expr.Constant_Int64Value#,\n 999^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 999~int,\n 999~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"not_gte_int_lt","expr":"999 \u003e= 1000","value":{"boolValue":false}},"ast":"_\u003e=_(\n 999^#*expr.Constant_Int64Value#,\n 1000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 999~int,\n 1000~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_uint_gt","expr":"1u \u003e= 0u","value":{"boolValue":true}},"ast":"_\u003e=_(\n 1u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 1u~uint,\n 0u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_uint_eq","expr":"0u \u003e= 0u","value":{"boolValue":true}},"ast":"_\u003e=_(\n 0u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 0u~uint,\n 0u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_uint_lt","expr":"1u \u003e= 10u","value":{"boolValue":false}},"ast":"_\u003e=_(\n 1u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 1u~uint,\n 10u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_double_gt","expr":"1e+1 \u003e= 1e+0","value":{"boolValue":true}},"ast":"_\u003e=_(\n 10^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 10~double,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_double_eq","expr":"9.80665 \u003e= 9.80665e+0","value":{"boolValue":true}},"ast":"_\u003e=_(\n 9.80665^#*expr.Constant_DoubleValue#,\n 9.80665^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 9.80665~double,\n 9.80665~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_double_lt","expr":"0.9999 \u003e= 1.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n 0.9999^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n 0.9999~double,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_string_empty","expr":"'' \u003e= ''","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"\"~string,\n \"\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_to_empty","expr":"'a' \u003e= ''","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"a\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"a\"~string,\n \"\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_empty_to_nonempty","expr":"'' \u003e= 'a'","value":{"boolValue":false}},"ast":"_\u003e=_(\n \"\"^#*expr.Constant_StringValue#,\n \"a\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"\"~string,\n \"a\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_length","expr":"'abcd' \u003e= 'abc'","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"abcd\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"abcd\"~string,\n \"abc\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"not_gte_string_lexicographical","expr":"'abc' \u003e= 'abd'","value":{"boolValue":false}},"ast":"_\u003e=_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"abd\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"abc\"~string,\n \"abd\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_unicode_eq","expr":"'τ' \u003e= 'τ'","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"τ\"^#*expr.Constant_StringValue#,\n \"τ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"τ\"~string,\n \"τ\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_string_unicode_gt","expr":"'τ' \u003e= 't'","value":{"boolValue":true}},"ast":"_\u003e=_(\n \"τ\"^#*expr.Constant_StringValue#,\n \"t\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"τ\"~string,\n \"t\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"not_get_string_unicode","expr":"'t' \u003e= 'τ'","value":{"boolValue":false}},"ast":"_\u003e=_(\n \"t\"^#*expr.Constant_StringValue#,\n \"τ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"t\"~string,\n \"τ\"~string\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"gte_bytes_to_empty","expr":"b'\u0000' \u003e= b''","value":{"boolValue":true}},"ast":"_\u003e=_(\n b\"\\x00\"^#*expr.Constant_BytesValue#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n b\"\\x00\"~bytes,\n b\"\"~bytes\n)~bool^greater_equals_bytes","type":"bool"},{"original":{"name":"not_gte_bytes_empty_to_nonempty","expr":"b'' \u003e= b'\u0000'","value":{"boolValue":false}},"ast":"_\u003e=_(\n b\"\"^#*expr.Constant_BytesValue#,\n b\"\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n b\"\"~bytes,\n b\"\\x00\"~bytes\n)~bool^greater_equals_bytes","type":"bool"},{"original":{"name":"gte_bytes_samelength","expr":"b'\u0000\u0001' \u003e= b'\u0001\u0000'","value":{"boolValue":false}},"ast":"_\u003e=_(\n b\"\\x00\\x01\"^#*expr.Constant_BytesValue#,\n b\"\\x01\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n b\"\\x00\\x01\"~bytes,\n b\"\\x01\\x00\"~bytes\n)~bool^greater_equals_bytes","type":"bool"},{"original":{"name":"gte_bool_gt","expr":"true \u003e= false","value":{"boolValue":true}},"ast":"_\u003e=_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n true~bool,\n false~bool\n)~bool^greater_equals_bool","type":"bool"},{"original":{"name":"gte_bool_eq","expr":"true \u003e= true","value":{"boolValue":true}},"ast":"_\u003e=_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n true~bool,\n true~bool\n)~bool^greater_equals_bool","type":"bool"},{"original":{"name":"not_gte_bool_lt","expr":"false \u003e= true","value":{"boolValue":false}},"ast":"_\u003e=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n false~bool,\n true~bool\n)~bool^greater_equals_bool","type":"bool"},{"original":{"name":"gte_null_unsupported","expr":"null \u003e= null","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n null~null,\n null~null\n)~bool^greater_equals_duration|greater_equals_timestamp","type":"bool"},{"original":{"name":"gte_list_unsupported","expr":"['y'] \u003e= ['x']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e=_(\n [\n \"y\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n \"x\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e=_' applied to '(list(string), list(string))'\n | ['y'] \u003e= ['x']\n | ......^"},{"original":{"name":"gte_map_unsupported","expr":"{1:'b'} \u003e= {0:'a'}","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e=_(\n {\n 1^#*expr.Constant_Int64Value#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 0^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003e=_' applied to '(map(int, string), map(int, string))'\n | {1:'b'} \u003e= {0:'a'}\n | ........^"},{"original":{"name":"gte_mixed_types_error","expr":"'foo' \u003e= 1.0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003e=_(\n \"foo\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e=_' applied to '(string, double)'\n | 'foo' \u003e= 1.0\n | ......^"},{"original":{"name":"gte_dyn_int_uint","expr":"dyn(2) \u003e= 1u","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_dyn_int_double","expr":"dyn(2) \u003e= 1.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_uint_int","expr":"dyn(2u) \u003e= 1","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_uint_double","expr":"dyn(2u) \u003e= 1.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_double_int","expr":"dyn(2.0) \u003e= 1","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_double_uint","expr":"dyn(2.0) \u003e= 1u","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_dyn_int_uint","expr":"dyn(0) \u003e= 1u","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_dyn_int_double","expr":"dyn(0) \u003e= 1.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_dyn_uint_int","expr":"dyn(0u) \u003e= 1","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"not_gte_dyn_uint_double","expr":"dyn(0u) \u003e= 1.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_dyn_double_int","expr":"dyn(0.0) \u003e= 1","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"not_gte_dyn_double_uint","expr":"dyn(0.0) \u003e= 1u","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 0~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_dyn_int_big_uint","expr":"dyn(1) \u003e= 9223372036854775808u","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"not_gte_dyn_small_int_uint","expr":"dyn(-1) \u003e= 0u","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_dyn_int_big_lossy_double","expr":"dyn(9223372036854775807) \u003e= 9223372036854775808.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_dyn_int_big_double","expr":"dyn(9223372036854775807) \u003e= 9223372036854777857.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854778e+18~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_int_small_lossy_double_equal","description":"The conversion of the int to double is lossy and the numbers end up being equal","expr":"dyn(-9223372036854775808) \u003e= -9223372036854775809.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_int_small_lossy_double_greater","expr":"dyn(-9223372036854775808) \u003e= -9223372036854777857.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_uint_small_int","expr":"dyn(1u) \u003e= -1","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_big_uint_int","expr":"dyn(9223372036854775808u) \u003e= 1","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_uint_small_double","expr":"dyn(9223372036854775807u) \u003e= -1.0","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9223372036854775807u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"not_gte_dyn_uint_big_double","expr":"dyn(18446744073709551615u) \u003e= 18446744073709553665.0","value":{"boolValue":false}},"ast":"_\u003e=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.8446744073709556e+19~double\n)~bool^greater_equals_double","type":"bool"},{"original":{"name":"gte_dyn_big_double_uint","expr":"dyn(18446744073709553665.0) \u003e= 18446744073709551615u","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^greater_equals_uint64","type":"bool"},{"original":{"name":"gte_dyn_big_double_int","expr":"dyn(9223372036854775808.0) \u003e= 9223372036854775807","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^greater_equals_int64","type":"bool"},{"original":{"name":"gte_dyn_small_double_int","expr":"dyn(-9223372036854775809.0) \u003e= -9223372036854775808","value":{"boolValue":true}},"ast":"_\u003e=_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^greater_equals_int64","type":"bool"}]},{"name":"in_list_literal","tests":[{"original":{"name":"elem_not_in_empty_list","expr":"'empty' in []","value":{"boolValue":false}},"ast":"@in(\n \"empty\"^#*expr.Constant_StringValue#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"empty\"~string,\n []~list(string)\n)~bool^in_list","type":"bool"},{"original":{"name":"elem_in_list","expr":"'elem' in ['elem', 'elemA', 'elemB']","value":{"boolValue":true}},"ast":"@in(\n \"elem\"^#*expr.Constant_StringValue#,\n [\n \"elem\"^#*expr.Constant_StringValue#,\n \"elemA\"^#*expr.Constant_StringValue#,\n \"elemB\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"elem\"~string,\n [\n \"elem\"~string,\n \"elemA\"~string,\n \"elemB\"~string\n ]~list(string)\n)~bool^in_list","type":"bool"},{"original":{"name":"elem_not_in_list","expr":"'not' in ['elem1', 'elem2', 'elem3']","value":{"boolValue":false}},"ast":"@in(\n \"not\"^#*expr.Constant_StringValue#,\n [\n \"elem1\"^#*expr.Constant_StringValue#,\n \"elem2\"^#*expr.Constant_StringValue#,\n \"elem3\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"not\"~string,\n [\n \"elem1\"~string,\n \"elem2\"~string,\n \"elem3\"~string\n ]~list(string)\n)~bool^in_list","type":"bool"},{"original":{"name":"elem_in_mixed_type_list","description":"Set membership tests should succeed if the 'elem' exists in a mixed element type list.","expr":"'elem' in [1, 'elem', 2]","value":{"boolValue":true}},"ast":"@in(\n \"elem\"^#*expr.Constant_StringValue#,\n [\n 1^#*expr.Constant_Int64Value#,\n \"elem\"^#*expr.Constant_StringValue#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"elem\"~string,\n [\n 1~int,\n \"elem\"~string,\n 2~int\n ]~list(dyn)\n)~bool^in_list","type":"bool"},{"original":{"name":"elem_in_mixed_type_list_cross_type","description":"Set membership tests should return false due to the introduction of heterogeneous-equality. Set membership via 'in' is equivalent to the macro exists() behavior.","expr":"'elem' in [1u, 'str', 2, b'bytes']","value":{"boolValue":false}},"ast":"@in(\n \"elem\"^#*expr.Constant_StringValue#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n \"str\"^#*expr.Constant_StringValue#,\n 2^#*expr.Constant_Int64Value#,\n b\"bytes\"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"elem\"~string,\n [\n 1u~uint,\n \"str\"~string,\n 2~int,\n b\"bytes\"~bytes\n ]~list(dyn)\n)~bool^in_list","type":"bool"}]},{"name":"in_map_literal","tests":[{"original":{"name":"key_not_in_empty_map","expr":"'empty' in {}","value":{"boolValue":false}},"ast":"@in(\n \"empty\"^#*expr.Constant_StringValue#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"empty\"~string,\n {}~map(string, dyn)\n)~bool^in_map","type":"bool"},{"original":{"name":"key_in_map","expr":"'key' in {'key':'1', 'other':'2'}","value":{"boolValue":true}},"ast":"@in(\n \"key\"^#*expr.Constant_StringValue#,\n {\n \"key\"^#*expr.Constant_StringValue#:\"1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"other\"^#*expr.Constant_StringValue#:\"2\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"key\"~string,\n {\n \"key\"~string:\"1\"~string,\n \"other\"~string:\"2\"~string\n }~map(string, string)\n)~bool^in_map","type":"bool"},{"original":{"name":"key_not_in_map","expr":"'key' in {'lock':1, 'gate':2}","value":{"boolValue":false}},"ast":"@in(\n \"key\"^#*expr.Constant_StringValue#,\n {\n \"lock\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"gate\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"key\"~string,\n {\n \"lock\"~string:1~int,\n \"gate\"~string:2~int\n }~map(string, int)\n)~bool^in_map","type":"bool"},{"original":{"name":"key_in_mixed_key_type_map","description":"Map keys are of mixed type, but since the key is present the result is true.","expr":"'key' in {3:3.0, 'key':2u}","value":{"boolValue":true}},"ast":"@in(\n \"key\"^#*expr.Constant_StringValue#,\n {\n 3^#*expr.Constant_Int64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"key\"^#*expr.Constant_StringValue#:2u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"key\"~string,\n {\n 3~int:3~double,\n \"key\"~string:2u~uint\n }~map(dyn, dyn)\n)~bool^in_map","type":"bool"},{"original":{"name":"key_in_mixed_key_type_map_cross_type","expr":"'key' in {1u:'str', 2:b'bytes'}","value":{"boolValue":false}},"ast":"@in(\n \"key\"^#*expr.Constant_StringValue#,\n {\n 1u^#*expr.Constant_Uint64Value#:\"str\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:b\"bytes\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"key\"~string,\n {\n 1u~uint:\"str\"~string,\n 2~int:b\"bytes\"~bytes\n }~map(dyn, dyn)\n)~bool^in_map","type":"bool"}]},{"name":"bound","tests":[{"original":{"name":"bytes_gt_left_false","expr":"x \u003e b'\u0000'","typeEnv":[{"name":"x","ident":{"type":{"primitive":"BYTES"}}}],"bindings":{"x":{"value":{"bytesValue":"AA=="}}},"value":{"boolValue":false}},"ast":"_\u003e_(\n x^#*expr.Expr_IdentExpr#,\n b\"\\x00\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n x~bytes^x,\n b\"\\x00\"~bytes\n)~bool^greater_bytes","type":"bool"},{"original":{"name":"int_lte_right_true","expr":"123 \u003c= x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"x":{"value":{"int64Value":"124"}}},"value":{"boolValue":true}},"ast":"_\u003c=_(\n 123^#*expr.Constant_Int64Value#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n 123~int,\n x~int^x\n)~bool^less_equals_int64","type":"bool"},{"original":{"name":"bool_lt_right_true","expr":"false \u003c x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"x":{"value":{"boolValue":true}}},"value":{"boolValue":true}},"ast":"_\u003c_(\n false^#*expr.Constant_BoolValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n false~bool,\n x~bool^x\n)~bool^less_bool","type":"bool"},{"original":{"name":"double_ne_left_false","expr":"x != 9.8","typeEnv":[{"name":"x","ident":{"type":{"primitive":"DOUBLE"}}}],"bindings":{"x":{"value":{"doubleValue":9.8}}},"value":{"boolValue":false}},"ast":"_!=_(\n x^#*expr.Expr_IdentExpr#,\n 9.8^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n x~double^x,\n 9.8~double\n)~bool^not_equals","type":"bool"},{"original":{"name":"map_ne_right_false","expr":"{'a':'b','c':'d'} != x","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"c"},"value":{"stringValue":"d"}},{"key":{"stringValue":"a"},"value":{"stringValue":"b"}}]}}}},"value":{"boolValue":false}},"ast":"_!=_(\n {\n \"a\"^#*expr.Constant_StringValue#:\"b\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"c\"^#*expr.Constant_StringValue#:\"d\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n {\n \"a\"~string:\"b\"~string,\n \"c\"~string:\"d\"~string\n }~map(string, string),\n x~map(string, string)^x\n)~bool^not_equals","type":"bool"},{"original":{"name":"null_eq_left_true","description":"A comparison _==_ against null only binds if the type is determined to be null or we skip the type checking","expr":"x == null","typeEnv":[{"name":"x","ident":{"type":{"null":null}}}],"bindings":{"x":{"value":{"nullValue":null}}},"value":{"boolValue":true}},"ast":"_==_(\n x^#*expr.Expr_IdentExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n x~null^x,\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"list_eq_right_false","expr":"[1, 2] == x","typeEnv":[{"name":"x","ident":{"type":{"listType":{"elemType":{"primitive":"INT64"}}}}}],"bindings":{"x":{"value":{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"1"}]}}}},"value":{"boolValue":false}},"ast":"_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n 1~int,\n 2~int\n ]~list(int),\n x~list(int)^x\n)~bool^equals","type":"bool"},{"original":{"name":"string_gte_right_true","expr":"'abcd' \u003e= x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"x":{"value":{"stringValue":"abc"}}},"value":{"boolValue":true}},"ast":"_\u003e=_(\n \"abcd\"^#*expr.Constant_StringValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n \"abcd\"~string,\n x~string^x\n)~bool^greater_equals_string","type":"bool"},{"original":{"name":"uint_eq_right_false","expr":"999u == x","typeEnv":[{"name":"x","ident":{"type":{"primitive":"UINT64"}}}],"bindings":{"x":{"value":{"uint64Value":"1000"}}},"value":{"boolValue":false}},"ast":"_==_(\n 999u^#*expr.Constant_Uint64Value#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n 999u~uint,\n x~uint^x\n)~bool^equals","type":"bool"},{"original":{"name":"null_lt_right_no_such_overload","description":"There is no _\u003c_ operation for null, even if both operands are null","expr":"null \u003c x","disableCheck":true,"bindings":{"x":{"value":{"nullValue":null}}},"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_\u003c_(\n null^#*expr.Constant_NullValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:8: undeclared reference to 'x' (in container '')\n | null \u003c x\n | .......^"}]}]},{"name":"conversions","suites":[{"name":"bytes","tests":[{"original":{"name":"string_empty","expr":"bytes('')","value":{"bytesValue":""}},"ast":"bytes(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bytes(\n \"\"~string\n)~bytes^string_to_bytes","type":"bytes"},{"original":{"name":"string","expr":"bytes('abc')","value":{"bytesValue":"YWJj"}},"ast":"bytes(\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bytes(\n \"abc\"~string\n)~bytes^string_to_bytes","type":"bytes"},{"original":{"name":"string_unicode","expr":"bytes('ÿ')","value":{"bytesValue":"w78="}},"ast":"bytes(\n \"ÿ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bytes(\n \"ÿ\"~string\n)~bytes^string_to_bytes","type":"bytes"},{"original":{"name":"string_unicode_vs_literal","expr":"bytes('\\377') == b'\\377'","value":{"boolValue":false}},"ast":"_==_(\n bytes(\n \"ÿ\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n b\"\\xff\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n bytes(\n \"ÿ\"~string\n )~bytes^string_to_bytes,\n b\"\\xff\"~bytes\n)~bool^equals","type":"bool"}]},{"name":"double","tests":[{"original":{"name":"int_zero","expr":"double(0)","value":{"doubleValue":0}},"ast":"double(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 0~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_pos","expr":"double(1000000000000)","value":{"doubleValue":1000000000000}},"ast":"double(\n 1000000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 1000000000000~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_neg","expr":"double(-1000000000000000)","value":{"doubleValue":-1000000000000000}},"ast":"double(\n -1000000000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n -1000000000000000~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_min_exact","description":"Smallest contiguous representable int (-2^53).","expr":"double(-9007199254740992)","value":{"doubleValue":-9007199254740992}},"ast":"double(\n -9007199254740992^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n -9007199254740992~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_max_exact","description":"Largest contiguous representable int (2^53).","expr":"double(9007199254740992)","value":{"doubleValue":9007199254740992}},"ast":"double(\n 9007199254740992^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 9007199254740992~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"int_range","description":"Largest signed 64-bit. Rounds to nearest double.","expr":"double(9223372036854775807)","value":{"doubleValue":9223372036854776000}},"ast":"double(\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 9223372036854775807~int\n)~double^int64_to_double","type":"double"},{"original":{"name":"uint_zero","expr":"double(0u)","value":{"doubleValue":0}},"ast":"double(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 0u~uint\n)~double^uint64_to_double","type":"double"},{"original":{"name":"uint_pos","expr":"double(123u)","value":{"doubleValue":123}},"ast":"double(\n 123u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 123u~uint\n)~double^uint64_to_double","type":"double"},{"original":{"name":"uint_max_exact","description":"Largest contiguous representable int (2^53).","expr":"double(9007199254740992u)","value":{"doubleValue":9007199254740992}},"ast":"double(\n 9007199254740992u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 9007199254740992u~uint\n)~double^uint64_to_double","type":"double"},{"original":{"name":"uint_range","description":"Largest unsigned 64-bit.","expr":"double(18446744073709551615u)","value":{"doubleValue":18446744073709552000}},"ast":"double(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 18446744073709551615u~uint\n)~double^uint64_to_double","type":"double"},{"original":{"name":"string_zero","expr":"double('0')","value":{"doubleValue":0}},"ast":"double(\n \"0\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"0\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_zero_dec","expr":"double('0.0')","value":{"doubleValue":0}},"ast":"double(\n \"0.0\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"0.0\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_neg_zero","expr":"double('-0.0')","value":{"doubleValue":0}},"ast":"double(\n \"-0.0\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"-0.0\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_no_dec","expr":"double('123')","value":{"doubleValue":123}},"ast":"double(\n \"123\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"123\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_pos","expr":"double('123.456')","value":{"doubleValue":123.456}},"ast":"double(\n \"123.456\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"123.456\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_neg","expr":"double('-987.654')","value":{"doubleValue":-987.654}},"ast":"double(\n \"-987.654\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"-987.654\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_exp_pos_pos","expr":"double('6.02214e23')","value":{"doubleValue":6.02214e+23}},"ast":"double(\n \"6.02214e23\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"6.02214e23\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_exp_pos_neg","expr":"double('1.38e-23')","value":{"doubleValue":1.38e-23}},"ast":"double(\n \"1.38e-23\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"1.38e-23\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_exp_neg_pos","expr":"double('-84.32e7')","value":{"doubleValue":-843200000}},"ast":"double(\n \"-84.32e7\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"-84.32e7\"~string\n)~double^string_to_double","type":"double"},{"original":{"name":"string_exp_neg_neg","expr":"double('-5.43e-21')","value":{"doubleValue":-5.43e-21}},"ast":"double(\n \"-5.43e-21\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n \"-5.43e-21\"~string\n)~double^string_to_double","type":"double"}]},{"name":"dyn","tests":[{"original":{"name":"dyn_heterogeneous_list","description":"No need to disable type checking.","expr":"type(dyn([1, 'one']))","value":{"typeValue":"list"}},"ast":"type(\n dyn(\n [\n 1^#*expr.Constant_Int64Value#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n dyn(\n [\n 1~int,\n \"one\"~string\n ]~list(dyn)\n )~dyn^to_dyn\n)~type(dyn)^type","type":"type(dyn)"}]},{"name":"int","tests":[{"original":{"name":"uint","expr":"int(42u)","value":{"int64Value":"42"}},"ast":"int(\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 42u~uint\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"uint_zero","expr":"int(0u)","value":{"int64Value":"0"}},"ast":"int(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 0u~uint\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"uint_max_exact","expr":"int(9223372036854775807u)","value":{"int64Value":"9223372036854775807"}},"ast":"int(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 9223372036854775807u~uint\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"uint_range","expr":"int(18446744073709551615u)","evalError":{"errors":[{"message":"range error"}]}},"ast":"int(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 18446744073709551615u~uint\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"double_round_neg","expr":"int(-123.456)","value":{"int64Value":"-123"}},"ast":"int(\n -123.456^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n -123.456~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_truncate","expr":"int(1.9)","value":{"int64Value":"1"}},"ast":"int(\n 1.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 1.9~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_truncate_neg","expr":"int(-7.9)","value":{"int64Value":"-7"}},"ast":"int(\n -7.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n -7.9~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_half_pos","expr":"int(11.5)","value":{"int64Value":"11"}},"ast":"int(\n 11.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 11.5~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_half_neg","expr":"int(-3.5)","value":{"int64Value":"-3"}},"ast":"int(\n -3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n -3.5~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_big_exact","description":"Beyond exact range (2^53), but no loss of precision (2^55).","expr":"int(double(36028797018963968))","value":{"int64Value":"36028797018963968"}},"ast":"int(\n double(\n 36028797018963968^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n double(\n 36028797018963968~int\n )~double^int64_to_double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_big_precision","description":"Beyond exact range (2^53), but loses precision (2^55 + 1).","expr":"int(double(36028797018963969))","value":{"int64Value":"36028797018963968"}},"ast":"int(\n double(\n 36028797018963969^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n double(\n 36028797018963969~int\n )~double^int64_to_double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_int_max_range","description":"The double(2^63-1) cast produces a floating point value outside the int range","expr":"int(9223372036854775807.0)","evalError":{"errors":[{"message":"range"}]}},"ast":"int(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 9.223372036854776e+18~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_int_min_range","description":"The double(-2^63) cast produces a floating point value outside the int range","expr":"int(-9223372036854775808.0)","evalError":{"errors":[{"message":"range"}]}},"ast":"int(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n -9.223372036854776e+18~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_range","expr":"int(1e99)","evalError":{"errors":[{"message":"range"}]}},"ast":"int(\n 1e+99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 1e+99~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"string","expr":"int('987')","value":{"int64Value":"987"}},"ast":"int(\n \"987\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n \"987\"~string\n)~int^string_to_int64","type":"int"},{"original":{"name":"timestamp","expr":"int(timestamp('2004-09-16T23:59:59Z'))","value":{"int64Value":"1095379199"}},"ast":"int(\n timestamp(\n \"2004-09-16T23:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n timestamp(\n \"2004-09-16T23:59:59Z\"~string\n )~timestamp^string_to_timestamp\n)~int^timestamp_to_int64","type":"int"}]},{"name":"string","tests":[{"original":{"name":"int","expr":"string(123)","value":{"stringValue":"123"}},"ast":"string(\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n 123~int\n)~string^int64_to_string","type":"string"},{"original":{"name":"int_neg","expr":"string(-456)","value":{"stringValue":"-456"}},"ast":"string(\n -456^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n -456~int\n)~string^int64_to_string","type":"string"},{"original":{"name":"uint","expr":"string(9876u)","value":{"stringValue":"9876"}},"ast":"string(\n 9876u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n 9876u~uint\n)~string^uint64_to_string","type":"string"},{"original":{"name":"double","expr":"string(123.456)","value":{"stringValue":"123.456"}},"ast":"string(\n 123.456^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n 123.456~double\n)~string^double_to_string","type":"string"},{"original":{"name":"double_hard","expr":"string(-4.5e-3)","value":{"stringValue":"-0.0045"}},"ast":"string(\n -0.0045^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n -0.0045~double\n)~string^double_to_string","type":"string"},{"original":{"name":"bytes","expr":"string(b'abc')","value":{"stringValue":"abc"}},"ast":"string(\n b\"abc\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n b\"abc\"~bytes\n)~string^bytes_to_string","type":"string"},{"original":{"name":"bytes_unicode","expr":"string(b'\\303\\277')","value":{"stringValue":"ÿ"}},"ast":"string(\n b\"ÿ\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n b\"ÿ\"~bytes\n)~string^bytes_to_string","type":"string"},{"original":{"name":"bytes_invalid","expr":"string(b'\\000\\xff')","evalError":{"errors":[{"message":"invalid UTF-8"}]}},"ast":"string(\n b\"\\x00\\xff\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n b\"\\x00\\xff\"~bytes\n)~string^bytes_to_string","type":"string"}]},{"name":"type","tests":[{"original":{"name":"bool","expr":"type(true)","value":{"typeValue":"bool"}},"ast":"type(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n true~bool\n)~type(bool)^type","type":"type(bool)"},{"original":{"name":"bool_denotation","expr":"bool","value":{"typeValue":"bool"}},"ast":"bool^#*expr.Expr_IdentExpr#","checkedAst":"bool~type(bool)^bool","type":"type(bool)"},{"original":{"name":"dyn_no_denotation","expr":"dyn","disableCheck":true,"evalError":{"errors":[{"message":"unknown variable"}]}},"ast":"dyn^#*expr.Expr_IdentExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'dyn' (in container '')\n | dyn\n | ^"},{"original":{"name":"int","expr":"type(0)","value":{"typeValue":"int"}},"ast":"type(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n 0~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"int_denotation","expr":"int","value":{"typeValue":"int"}},"ast":"int^#*expr.Expr_IdentExpr#","checkedAst":"int~type(int)^int","type":"type(int)"},{"original":{"name":"eq_same","expr":"type(true) == type(false)","value":{"boolValue":true}},"ast":"_==_(\n type(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n type(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n true~bool\n )~type(bool)^type,\n type(\n false~bool\n )~type(bool)^type\n)~bool^equals","type":"bool"},{"original":{"name":"uint","expr":"type(64u)","value":{"typeValue":"uint"}},"ast":"type(\n 64u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n 64u~uint\n)~type(uint)^type","type":"type(uint)"},{"original":{"name":"uint_denotation","expr":"uint","value":{"typeValue":"uint"}},"ast":"uint^#*expr.Expr_IdentExpr#","checkedAst":"uint~type(uint)^uint","type":"type(uint)"},{"original":{"name":"double","expr":"type(3.14)","value":{"typeValue":"double"}},"ast":"type(\n 3.14^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n 3.14~double\n)~type(double)^type","type":"type(double)"},{"original":{"name":"double_denotation","expr":"double","value":{"typeValue":"double"}},"ast":"double^#*expr.Expr_IdentExpr#","checkedAst":"double~type(double)^double","type":"type(double)"},{"original":{"name":"null_type","expr":"type(null)","value":{"typeValue":"null_type"}},"ast":"type(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n null~null\n)~type(null)^type","type":"type(null)"},{"original":{"name":"null_type_denotation","expr":"null_type","value":{"typeValue":"null_type"}},"ast":"null_type^#*expr.Expr_IdentExpr#","checkedAst":"null_type~type(null)^null_type","type":"type(null)"},{"original":{"name":"string","expr":"type('foo')","value":{"typeValue":"string"}},"ast":"type(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n \"foo\"~string\n)~type(string)^type","type":"type(string)"},{"original":{"name":"string_denotation","expr":"string","value":{"typeValue":"string"}},"ast":"string^#*expr.Expr_IdentExpr#","checkedAst":"string~type(string)^string","type":"type(string)"},{"original":{"name":"bytes","expr":"type(b'\\xff')","value":{"typeValue":"bytes"}},"ast":"type(\n b\"\\xff\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n b\"\\xff\"~bytes\n)~type(bytes)^type","type":"type(bytes)"},{"original":{"name":"bytes_denotation","expr":"bytes","value":{"typeValue":"bytes"}},"ast":"bytes^#*expr.Expr_IdentExpr#","checkedAst":"bytes~type(bytes)^bytes","type":"type(bytes)"},{"original":{"name":"list","expr":"type([1, 2, 3])","value":{"typeValue":"list"}},"ast":"type(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~type(list(int))^type","type":"type(list(int))"},{"original":{"name":"list_denotation","expr":"list","value":{"typeValue":"list"}},"ast":"list^#*expr.Expr_IdentExpr#","checkedAst":"list~type(list(dyn))^list","type":"type(list(dyn))"},{"original":{"name":"lists_monomorphic","expr":"type([1, 2, 3]) == type(['one', 'two', 'three'])","value":{"boolValue":true}},"ast":"_==_(\n type(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n [\n \"one\"^#*expr.Constant_StringValue#,\n \"two\"^#*expr.Constant_StringValue#,\n \"three\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n )~type(list(int))^type,\n type(\n [\n \"one\"~string,\n \"two\"~string,\n \"three\"~string\n ]~list(string)\n )~type(list(string))^type\n)~bool^equals","type":"bool"},{"original":{"name":"map","expr":"type({4: 16})","value":{"typeValue":"map"}},"ast":"type(\n {\n 4^#*expr.Constant_Int64Value#:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n {\n 4~int:16~int\n }~map(int, int)\n)~type(map(int, int))^type","type":"type(map(int, int))"},{"original":{"name":"map_denotation","expr":"map","value":{"typeValue":"map"}},"ast":"map^#*expr.Expr_IdentExpr#","checkedAst":"map~type(map(dyn, dyn))^map","type":"type(map(dyn, dyn))"},{"original":{"name":"map_monomorphic","expr":"type({'one': 1}) == type({1: 'one'})","value":{"boolValue":true}},"ast":"_==_(\n type(\n {\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n {\n 1^#*expr.Constant_Int64Value#:\"one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n {\n \"one\"~string:1~int\n }~map(string, int)\n )~type(map(string, int))^type,\n type(\n {\n 1~int:\"one\"~string\n }~map(int, string)\n )~type(map(int, string))^type\n)~bool^equals","type":"bool"},{"original":{"name":"eq_diff","expr":"type(7) == type(7u)","value":{"boolValue":false}},"ast":"_==_(\n type(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n type(\n 7u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n 7~int\n )~type(int)^type,\n type(\n 7u~uint\n )~type(uint)^type\n)~bool^equals","type":"bool"},{"original":{"name":"neq_same","expr":"type(0.0) != type(-0.0)","value":{"boolValue":false}},"ast":"_!=_(\n type(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n type(\n -0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n type(\n 0~double\n )~type(double)^type,\n type(\n -0~double\n )~type(double)^type\n)~bool^not_equals","type":"bool"},{"original":{"name":"neq_diff","expr":"type(0.0) != type(0)","value":{"boolValue":true}},"ast":"_!=_(\n type(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n type(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n type(\n 0~double\n )~type(double)^type,\n type(\n 0~int\n )~type(int)^type\n)~bool^not_equals","type":"bool"},{"original":{"name":"meta","expr":"type(type(7)) == type(type(7u))","value":{"boolValue":true}},"ast":"_==_(\n type(\n type(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n type(\n 7u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n type(\n 7~int\n )~type(int)^type\n )~type(type(int))^type,\n type(\n type(\n 7u~uint\n )~type(uint)^type\n )~type(type(uint))^type\n)~bool^equals","type":"bool"},{"original":{"name":"type","expr":"type(int)","value":{"typeValue":"type"}},"ast":"type(\n int^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n int~type(int)^int\n)~type(type(int))^type","type":"type(type(int))"},{"original":{"name":"type_denotation","expr":"type","value":{"typeValue":"type"}},"ast":"type^#*expr.Expr_IdentExpr#","checkedAst":"type~type(type)^type","type":"type(type)"},{"original":{"name":"type_type","expr":"type(type)","value":{"typeValue":"type"}},"ast":"type(\n type^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n type~type(type)^type\n)~type(type(type))^type","type":"type(type(type))"}]},{"name":"uint","tests":[{"original":{"name":"int","expr":"uint(1729)","value":{"uint64Value":"1729"}},"ast":"uint(\n 1729^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 1729~int\n)~uint^int64_to_uint64","type":"uint"},{"original":{"name":"int_max","expr":"uint(9223372036854775807)","value":{"uint64Value":"9223372036854775807"}},"ast":"uint(\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 9223372036854775807~int\n)~uint^int64_to_uint64","type":"uint"},{"original":{"name":"int_neg","expr":"uint(-1)","evalError":{"errors":[{"message":"range"}]}},"ast":"uint(\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n -1~int\n)~uint^int64_to_uint64","type":"uint"},{"original":{"name":"double","expr":"uint(3.14159265)","value":{"uint64Value":"3"}},"ast":"uint(\n 3.14159265^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 3.14159265~double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_truncate","expr":"uint(1.9)","value":{"uint64Value":"1"}},"ast":"uint(\n 1.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 1.9~double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_half","expr":"uint(25.5)","value":{"uint64Value":"25"}},"ast":"uint(\n 25.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 25.5~double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_big_exact","description":"Beyond exact range (2^53), but no loss of precision (2^55).","expr":"uint(double(36028797018963968u))","value":{"uint64Value":"36028797018963968"}},"ast":"uint(\n double(\n 36028797018963968u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n double(\n 36028797018963968u~uint\n )~double^uint64_to_double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_big_precision","description":"Beyond exact range (2^53), but loses precision (2^55 + 1).","expr":"uint(double(36028797018963969u))","value":{"uint64Value":"36028797018963968"}},"ast":"uint(\n double(\n 36028797018963969u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n double(\n 36028797018963969u~uint\n )~double^uint64_to_double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"double_uint_max_range","description":"The exact conversion of uint max as a double does not round trip.","expr":"int(18446744073709551615.0)","evalError":{"errors":[{"message":"range"}]}},"ast":"int(\n 1.8446744073709552e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 1.8446744073709552e+19~double\n)~int^double_to_int64","type":"int"},{"original":{"name":"double_range_beyond_uint","expr":"uint(6.022e23)","evalError":{"errors":[{"message":"range"}]}},"ast":"uint(\n 6.022e+23^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 6.022e+23~double\n)~uint^double_to_uint64","type":"uint"},{"original":{"name":"string","expr":"uint('300')","value":{"uint64Value":"300"}},"ast":"uint(\n \"300\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n \"300\"~string\n)~uint^string_to_uint64","type":"uint"}]},{"name":"bool","tests":[{"original":{"name":"string_1","expr":"bool('1')","value":{"boolValue":true}},"ast":"bool(\n \"1\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"1\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_t","expr":"bool('t')","value":{"boolValue":true}},"ast":"bool(\n \"t\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"t\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_true_lowercase","expr":"bool('true')","value":{"boolValue":true}},"ast":"bool(\n \"true\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"true\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_true_uppercase","expr":"bool('TRUE')","value":{"boolValue":true}},"ast":"bool(\n \"TRUE\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"TRUE\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_true_pascalcase","expr":"bool('True')","value":{"boolValue":true}},"ast":"bool(\n \"True\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"True\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_0","expr":"bool('0')","value":{"boolValue":false}},"ast":"bool(\n \"0\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"0\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_f","expr":"bool('f')","value":{"boolValue":false}},"ast":"bool(\n \"f\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"f\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_false_lowercase","expr":"bool('false')","value":{"boolValue":false}},"ast":"bool(\n \"false\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"false\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_false_uppercase","expr":"bool('FALSE')","value":{"boolValue":false}},"ast":"bool(\n \"FALSE\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"FALSE\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_false_pascalcase","expr":"bool('False')","value":{"boolValue":false}},"ast":"bool(\n \"False\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"False\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_true_badcase","expr":"bool('TrUe')","evalError":{"errors":[{"message":"Type conversion error"}]}},"ast":"bool(\n \"TrUe\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"TrUe\"~string\n)~bool^string_to_bool","type":"bool"},{"original":{"name":"string_false_badcase","expr":"bool('FaLsE')","evalError":{"errors":[{"message":"Type conversion error"}]}},"ast":"bool(\n \"FaLsE\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n \"FaLsE\"~string\n)~bool^string_to_bool","type":"bool"}]},{"name":"identity","tests":[{"original":{"name":"bool","expr":"bool(true)","value":{"boolValue":true}},"ast":"bool(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bool(\n true~bool\n)~bool^bool_to_bool","type":"bool"},{"original":{"name":"int","expr":"int(1)","value":{"int64Value":"1"}},"ast":"int(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n 1~int\n)~int^int64_to_int64","type":"int"},{"original":{"name":"uint","expr":"uint(1u)","value":{"uint64Value":"1"}},"ast":"uint(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"uint(\n 1u~uint\n)~uint^uint64_to_uint64","type":"uint"},{"original":{"name":"double","expr":"double(5.5)","value":{"doubleValue":5.5}},"ast":"double(\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"double(\n 5.5~double\n)~double^double_to_double","type":"double"},{"original":{"name":"string","expr":"string('hello')","value":{"stringValue":"hello"}},"ast":"string(\n \"hello\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n \"hello\"~string\n)~string^string_to_string","type":"string"},{"original":{"name":"bytes","expr":"bytes(b'abc')","value":{"bytesValue":"YWJj"}},"ast":"bytes(\n b\"abc\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"bytes(\n b\"abc\"~bytes\n)~bytes^bytes_to_bytes","type":"bytes"},{"original":{"name":"duration","expr":"duration(duration('100s')) == duration('100s')","value":{"boolValue":true}},"ast":"_==_(\n duration(\n duration(\n \"100s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"100s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n duration(\n duration(\n \"100s\"~string\n )~duration^string_to_duration\n )~duration^duration_to_duration,\n duration(\n \"100s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"timestamp","expr":"timestamp(timestamp(1000000000)) == timestamp(1000000000)","value":{"boolValue":true}},"ast":"_==_(\n timestamp(\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n timestamp(\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp\n )~timestamp^timestamp_to_timestamp,\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp\n)~bool^equals","type":"bool"}]}]},{"name":"dynamic","suites":[{"name":"int32","tests":[{"original":{"name":"literal","expr":"google.protobuf.Int32Value{value: -123}","value":{"int64Value":"-123"}},"ast":"google.protobuf.Int32Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Int32Value{\n value:-123~int\n}~wrapper(int)^google.protobuf.Int32Value","type":"wrapper(int)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Int32Value{value: -123}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Int32Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:40: type 'wrapper(int)' does not support field selection\n | google.protobuf.Int32Value{value: -123}.value\n | .......................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.Int32Value{}","value":{"int64Value":"0"}},"ast":"google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value","type":"wrapper(int)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Int32Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Int32Value","value":2000000}}}},"value":{"int64Value":"2000000"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(int)^x","type":"wrapper(int)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_int32_wrapper: 432}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":432}}},"ast":"TestAllTypes{\n single_int32_wrapper:432^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:432~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_int32_wrapper: 0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":0}}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_max","expr":"TestAllTypes{single_int32_wrapper: 2147483647}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":2147483647}}},"ast":"TestAllTypes{\n single_int32_wrapper:2147483647^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:2147483647~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_min","expr":"TestAllTypes{single_int32_wrapper: -2147483648}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":-2147483648}}},"ast":"TestAllTypes{\n single_int32_wrapper:-2147483648^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:-2147483648~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_range","expr":"TestAllTypes{single_int32_wrapper: 12345678900}","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range error"}]}},"ast":"TestAllTypes{\n single_int32_wrapper:12345678900^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:12345678900~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper","container":"cel.expr.conformance.proto2","value":{"int64Value":"642"}},"ast":"TestAllTypes{\n single_int32_wrapper:642^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:642~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_int32_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_int32_wrapper: -975}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":-975}}},"ast":"TestAllTypes{\n single_int32_wrapper:-975^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-975~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_int32_wrapper: 0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":0}}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_max","expr":"TestAllTypes{single_int32_wrapper: 2147483647}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":2147483647}}},"ast":"TestAllTypes{\n single_int32_wrapper:2147483647^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:2147483647~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_min","expr":"TestAllTypes{single_int32_wrapper: -2147483648}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":-2147483648}}},"ast":"TestAllTypes{\n single_int32_wrapper:-2147483648^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-2147483648~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_range","expr":"TestAllTypes{single_int32_wrapper: -998877665544332211}","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range error"}]}},"ast":"TestAllTypes{\n single_int32_wrapper:-998877665544332211^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-998877665544332211~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper","container":"cel.expr.conformance.proto3","value":{"int64Value":"642"}},"ast":"TestAllTypes{\n single_int32_wrapper:642^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:642~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto3_unset","expr":"TestAllTypes{}.single_int32_wrapper","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"}]},{"name":"int64","tests":[{"original":{"name":"literal","expr":"google.protobuf.Int64Value{value: -123}","value":{"int64Value":"-123"}},"ast":"google.protobuf.Int64Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Int64Value{\n value:-123~int\n}~wrapper(int)^google.protobuf.Int64Value","type":"wrapper(int)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Int64Value{value: -123}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Int64Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:40: type 'wrapper(int)' does not support field selection\n | google.protobuf.Int64Value{value: -123}.value\n | .......................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.Int64Value{}","value":{"int64Value":"0"}},"ast":"google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value","type":"wrapper(int)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Int64Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Int64Value","value":"2000000"}}}},"value":{"int64Value":"2000000"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(int)^x","type":"wrapper(int)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_int64_wrapper: 432}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64Wrapper":"432"}}},"ast":"TestAllTypes{\n single_int64_wrapper:432^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:432~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_int64_wrapper: 0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64Wrapper":"0"}}},"ast":"TestAllTypes{\n single_int64_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_int64_wrapper: -975}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64Wrapper":"-975"}}},"ast":"TestAllTypes{\n single_int64_wrapper:-975^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:-975~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_int64_wrapper: 0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64Wrapper":"0"}}},"ast":"TestAllTypes{\n single_int64_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"uint32","tests":[{"original":{"name":"literal","expr":"google.protobuf.UInt32Value{value: 123u}","value":{"uint64Value":"123"}},"ast":"google.protobuf.UInt32Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.UInt32Value{\n value:123u~uint\n}~wrapper(uint)^google.protobuf.UInt32Value","type":"wrapper(uint)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.UInt32Value{value: 123u}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.UInt32Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:41: type 'wrapper(uint)' does not support field selection\n | google.protobuf.UInt32Value{value: 123u}.value\n | ........................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.UInt32Value{}","value":{"uint64Value":"0"}},"ast":"google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value","type":"wrapper(uint)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.UInt32Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.UInt32Value","value":2000000}}}},"value":{"uint64Value":"2000000"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(uint)^x","type":"wrapper(uint)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_uint32_wrapper: 432u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32Wrapper":432}}},"ast":"TestAllTypes{\n single_uint32_wrapper:432u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:432u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_uint32_wrapper: 0u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32Wrapper":0}}},"ast":"TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_max","expr":"TestAllTypes{single_uint32_wrapper: 4294967295u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32Wrapper":4294967295}}},"ast":"TestAllTypes{\n single_uint32_wrapper:4294967295u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:4294967295u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_range","expr":"TestAllTypes{single_uint32_wrapper: 6111222333u}","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range error"}]}},"ast":"TestAllTypes{\n single_uint32_wrapper:6111222333u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:6111222333u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_uint32_wrapper: 975u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32Wrapper":975}}},"ast":"TestAllTypes{\n single_uint32_wrapper:975u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:975u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_uint32_wrapper: 0u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32Wrapper":0}}},"ast":"TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_max","expr":"TestAllTypes{single_uint32_wrapper: 4294967295u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32Wrapper":4294967295}}},"ast":"TestAllTypes{\n single_uint32_wrapper:4294967295u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:4294967295u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_range","expr":"TestAllTypes{single_uint32_wrapper: 6111222333u}","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range error"}]}},"ast":"TestAllTypes{\n single_uint32_wrapper:6111222333u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:6111222333u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_uint32_wrapper: 258u}.single_uint32_wrapper","container":"cel.expr.conformance.proto2","value":{"uint64Value":"258"}},"ast":"TestAllTypes{\n single_uint32_wrapper:258u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:258u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)","type":"wrapper(uint)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_uint32_wrapper: 0u}.single_uint32_wrapper","container":"cel.expr.conformance.proto2","value":{"uint64Value":"0"}},"ast":"TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)","type":"wrapper(uint)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_uint32_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)","type":"wrapper(uint)"}]},{"name":"uint64","tests":[{"original":{"name":"literal","expr":"google.protobuf.UInt64Value{value: 123u}","value":{"uint64Value":"123"}},"ast":"google.protobuf.UInt64Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.UInt64Value{\n value:123u~uint\n}~wrapper(uint)^google.protobuf.UInt64Value","type":"wrapper(uint)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.UInt64Value{value: 123u}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.UInt64Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:41: type 'wrapper(uint)' does not support field selection\n | google.protobuf.UInt64Value{value: 123u}.value\n | ........................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.UInt64Value{}","value":{"uint64Value":"0"}},"ast":"google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value","type":"wrapper(uint)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.UInt64Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.UInt64Value","value":"2000000"}}}},"value":{"uint64Value":"2000000"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(uint)^x","type":"wrapper(uint)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_uint64_wrapper: 432u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint64Wrapper":"432"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:432u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:432u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_uint64_wrapper: 0u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint64Wrapper":"0"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_uint64_wrapper: 975u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint64Wrapper":"975"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:975u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:975u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_uint64_wrapper: 0u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint64Wrapper":"0"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_uint64_wrapper: 5123123123u}.single_uint64_wrapper","container":"cel.expr.conformance.proto2","value":{"uint64Value":"5123123123"}},"ast":"TestAllTypes{\n single_uint64_wrapper:5123123123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:5123123123u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)","type":"wrapper(uint)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_uint64_wrapper: 0u}.single_uint64_wrapper","container":"cel.expr.conformance.proto2","value":{"uint64Value":"0"}},"ast":"TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)","type":"wrapper(uint)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_uint64_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)","type":"wrapper(uint)"}]},{"name":"float","tests":[{"original":{"name":"literal","expr":"google.protobuf.FloatValue{value: -1.5e3}","value":{"doubleValue":-1500}},"ast":"google.protobuf.FloatValue{\n value:-1500^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.FloatValue{\n value:-1500~double\n}~wrapper(double)^google.protobuf.FloatValue","type":"wrapper(double)"},{"original":{"name":"literal_not_double","description":"Use a number with no exact representation to make sure we actually narrow to a float.","expr":"google.protobuf.FloatValue{value: 1.333} == 1.333","value":{"boolValue":false}},"ast":"_==_(\n google.protobuf.FloatValue{\n value:1.333^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1.333^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:1.333~double\n }~wrapper(double)^google.protobuf.FloatValue,\n 1.333~double\n)~bool^equals","type":"bool"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.FloatValue{value: 3.1416}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.FloatValue{\n value:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:42: type 'wrapper(double)' does not support field selection\n | google.protobuf.FloatValue{value: 3.1416}.value\n | .........................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.FloatValue{}","value":{"doubleValue":0}},"ast":"google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue","type":"wrapper(double)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.FloatValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.FloatValue","value":-1250000}}}},"value":{"doubleValue":-1250000}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(double)^x","type":"wrapper(double)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_float_wrapper: 86.75}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":86.75}}},"ast":"TestAllTypes{\n single_float_wrapper:86.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:86.75~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_float_wrapper: 0.0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":0}}},"ast":"TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_subnorm","description":"Subnormal single floats range from ~1e-38 to ~1e-45.","expr":"TestAllTypes{single_float_wrapper: 1e-40}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":1e-40}}},"ast":"TestAllTypes{\n single_float_wrapper:1e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-40~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_round_to_zero","description":"Subnormal single floats range from ~1e-38 to ~1e-45.","expr":"TestAllTypes{single_float_wrapper: 1e-50}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":0}}},"ast":"TestAllTypes{\n single_float_wrapper:1e-50^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-50~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_range","description":"Single float max is about 3.4e38","expr":"TestAllTypes{single_float_wrapper: 1.4e55}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":"Infinity"}}},"ast":"TestAllTypes{\n single_float_wrapper:1.4e+55^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1.4e+55~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_float_wrapper: -12.375}.single_float_wrapper","container":"cel.expr.conformance.proto2","value":{"doubleValue":-12.375}},"ast":"TestAllTypes{\n single_float_wrapper:-12.375^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:-12.375~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper","container":"cel.expr.conformance.proto2","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_float_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_float_wrapper: -9.75}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":-9.75}}},"ast":"TestAllTypes{\n single_float_wrapper:-9.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.75~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_float_wrapper: 0.0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":0}}},"ast":"TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto2_subnorm","description":"Subnormal single floats range from ~1e-38 to ~1e-45.","expr":"TestAllTypes{single_float_wrapper: 1e-40}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":1e-40}}},"ast":"TestAllTypes{\n single_float_wrapper:1e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-40~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3_round_to_zero","expr":"TestAllTypes{single_float_wrapper: -9.9e-100}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":0}}},"ast":"TestAllTypes{\n single_float_wrapper:-9.9e-100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.9e-100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_range","description":"Single float min is about -3.4e38","expr":"TestAllTypes{single_float_wrapper: -9.9e100}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":"-Infinity"}}},"ast":"TestAllTypes{\n single_float_wrapper:-9.9e+100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.9e+100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_float_wrapper: 64.25}.single_float_wrapper","container":"cel.expr.conformance.proto3","value":{"doubleValue":64.25}},"ast":"TestAllTypes{\n single_float_wrapper:64.25^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:64.25~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper","container":"cel.expr.conformance.proto3","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto3_unset","expr":"TestAllTypes{}.single_float_wrapper","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)","type":"wrapper(double)"}]},{"name":"double","tests":[{"original":{"name":"literal","expr":"google.protobuf.DoubleValue{value: -1.5e3}","value":{"doubleValue":-1500}},"ast":"google.protobuf.DoubleValue{\n value:-1500^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.DoubleValue{\n value:-1500~double\n}~wrapper(double)^google.protobuf.DoubleValue","type":"wrapper(double)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.DoubleValue{value: 3.1416}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.DoubleValue{\n value:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:43: type 'wrapper(double)' does not support field selection\n | google.protobuf.DoubleValue{value: 3.1416}.value\n | ..........................................^"},{"original":{"name":"literal_zero","expr":"google.protobuf.DoubleValue{}","value":{"doubleValue":0}},"ast":"google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue","type":"wrapper(double)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.DoubleValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.DoubleValue","value":-1250000}}}},"value":{"doubleValue":-1250000}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(double)^x","type":"wrapper(double)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_double_wrapper: 86.75}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDoubleWrapper":86.75}}},"ast":"TestAllTypes{\n single_double_wrapper:86.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:86.75~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_double_wrapper: 0.0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDoubleWrapper":0}}},"ast":"TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_range","expr":"TestAllTypes{single_double_wrapper: 1.4e55}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDoubleWrapper":1.4e+55}}},"ast":"TestAllTypes{\n single_double_wrapper:1.4e+55^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:1.4e+55~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_double_wrapper: -12.375}.single_double_wrapper","container":"cel.expr.conformance.proto2","value":{"doubleValue":-12.375}},"ast":"TestAllTypes{\n single_double_wrapper:-12.375^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:-12.375~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_double_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_double_wrapper: -9.75}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDoubleWrapper":-9.75}}},"ast":"TestAllTypes{\n single_double_wrapper:-9.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:-9.75~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_double_wrapper: 0.0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDoubleWrapper":0}}},"ast":"TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_range","expr":"TestAllTypes{single_double_wrapper: -9.9e100}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDoubleWrapper":-9.9e+100}}},"ast":"TestAllTypes{\n single_double_wrapper:-9.9e+100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:-9.9e+100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_double_wrapper: 64.25}.single_double_wrapper","container":"cel.expr.conformance.proto3","value":{"doubleValue":64.25}},"ast":"TestAllTypes{\n single_double_wrapper:64.25^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:64.25~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_double_wrapper: 0.0}.single_double_wrapper","container":"cel.expr.conformance.proto3","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"},{"original":{"name":"field_read_proto3_unset","expr":"TestAllTypes{}.single_double_wrapper","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)","type":"wrapper(double)"}]},{"name":"bool","tests":[{"original":{"name":"literal","expr":"google.protobuf.BoolValue{value: true}","value":{"boolValue":true}},"ast":"google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BoolValue{\n value:true~bool\n}~wrapper(bool)^google.protobuf.BoolValue","type":"wrapper(bool)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.BoolValue{value: true}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:39: type 'wrapper(bool)' does not support field selection\n | google.protobuf.BoolValue{value: true}.value\n | ......................................^"},{"original":{"name":"literal_empty","expr":"google.protobuf.BoolValue{}","value":{"boolValue":false}},"ast":"google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue","type":"wrapper(bool)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.BoolValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.BoolValue","value":true}}}},"value":{"boolValue":true}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(bool)^x","type":"wrapper(bool)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_bool_wrapper: true}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBoolWrapper":true}}},"ast":"TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_false","expr":"TestAllTypes{single_bool_wrapper: false}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBoolWrapper":false}}},"ast":"TestAllTypes{\n single_bool_wrapper:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_bool_wrapper: true}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBoolWrapper":true}}},"ast":"TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_false","expr":"TestAllTypes{single_bool_wrapper: false}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBoolWrapper":false}}},"ast":"TestAllTypes{\n single_bool_wrapper:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"string","tests":[{"original":{"name":"literal","expr":"google.protobuf.StringValue{value: 'foo'}","value":{"stringValue":"foo"}},"ast":"google.protobuf.StringValue{\n value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.StringValue{\n value:\"foo\"~string\n}~wrapper(string)^google.protobuf.StringValue","type":"wrapper(string)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.StringValue{value: 'foo'}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.StringValue{\n value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:42: type 'wrapper(string)' does not support field selection\n | google.protobuf.StringValue{value: 'foo'}.value\n | .........................................^"},{"original":{"name":"literal_empty","expr":"google.protobuf.StringValue{}","value":{"stringValue":""}},"ast":"google.protobuf.StringValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue","type":"wrapper(string)"},{"original":{"name":"literal_unicode","expr":"google.protobuf.StringValue{value: 'flambé'}","value":{"stringValue":"flambé"}},"ast":"google.protobuf.StringValue{\n value:\"flambé\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.StringValue{\n value:\"flambé\"~string\n}~wrapper(string)^google.protobuf.StringValue","type":"wrapper(string)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.StringValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.StringValue","value":"bar"}}}},"value":{"stringValue":"bar"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(string)^x","type":"wrapper(string)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_string_wrapper: 'baz'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStringWrapper":"baz"}}},"ast":"TestAllTypes{\n single_string_wrapper:\"baz\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:\"baz\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_string_wrapper: ''}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStringWrapper":""}}},"ast":"TestAllTypes{\n single_string_wrapper:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:\"\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_string_wrapper: 'bletch'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStringWrapper":"bletch"}}},"ast":"TestAllTypes{\n single_string_wrapper:\"bletch\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:\"bletch\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_string_wrapper: ''}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStringWrapper":""}}},"ast":"TestAllTypes{\n single_string_wrapper:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:\"\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"bytes","tests":[{"original":{"name":"literal","expr":"google.protobuf.BytesValue{value: b'foo\\123'}","value":{"bytesValue":"Zm9vUw=="}},"ast":"google.protobuf.BytesValue{\n value:b\"fooS\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BytesValue{\n value:b\"fooS\"~bytes\n}~wrapper(bytes)^google.protobuf.BytesValue","type":"wrapper(bytes)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.BytesValue{value: b'foo'}.value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.BytesValue{\n value:b\"foo\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:42: type 'wrapper(bytes)' does not support field selection\n | google.protobuf.BytesValue{value: b'foo'}.value\n | .........................................^"},{"original":{"name":"literal_empty","expr":"google.protobuf.BytesValue{}","value":{"bytesValue":""}},"ast":"google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue","type":"wrapper(bytes)"},{"original":{"name":"literal_unicode","expr":"google.protobuf.BytesValue{value: b'flambé'}","value":{"bytesValue":"ZmxhbWLDqQ=="}},"ast":"google.protobuf.BytesValue{\n value:b\"flambé\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.BytesValue{\n value:b\"flambé\"~bytes\n}~wrapper(bytes)^google.protobuf.BytesValue","type":"wrapper(bytes)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.BytesValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.BytesValue","value":"YmFy"}}}},"value":{"bytesValue":"YmFy"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~wrapper(bytes)^x","type":"wrapper(bytes)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_bytes_wrapper: b'baz'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBytesWrapper":"YmF6"}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"baz\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b\"baz\"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_bytes_wrapper: b''}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBytesWrapper":""}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b\"\"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_bytes_wrapper: b'bletch'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBytesWrapper":"YmxldGNo"}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"bletch\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b\"bletch\"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_bytes_wrapper: b''}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBytesWrapper":""}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b\"\"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"list","tests":[{"original":{"name":"literal","expr":"google.protobuf.ListValue{values: [3.0, 'foo', null]}","value":{"listValue":{"values":[{"doubleValue":3},{"stringValue":"foo"},{"nullValue":null}]}}},"ast":"google.protobuf.ListValue{\n values:[\n 3^#*expr.Constant_DoubleValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.ListValue{\n values:[\n 3~double,\n \"foo\"~string,\n null~null\n ]~list(dyn)\n}~list(dyn)^google.protobuf.ListValue","type":"list(dyn)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.ListValue{values: [3.0, 'foo', null]}.values","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.ListValue{\n values:[\n 3^#*expr.Constant_DoubleValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.values^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:54: type 'list(dyn)' does not support field selection\n | google.protobuf.ListValue{values: [3.0, 'foo', null]}.values\n | .....................................................^"},{"original":{"name":"literal_empty","expr":"google.protobuf.ListValue{values: []}","value":{"listValue":{}}},"ast":"google.protobuf.ListValue{\n values:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.ListValue{\n values:[]~list(dyn)\n}~list(dyn)^google.protobuf.ListValue","type":"list(dyn)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.ListValue"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.ListValue","value":["bar",["a","b"]]}}}},"value":{"listValue":{"values":[{"stringValue":"bar"},{"listValue":{"values":[{"stringValue":"a"},{"stringValue":"b"}]}}]}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~list(dyn)^x","type":"list(dyn)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{list_value: [1.0, 'one']}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","listValue":[1,"one"]}}},"ast":"TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n list_value:[\n 1~double,\n \"one\"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{list_value: []}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","listValue":[]}}},"ast":"TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{list_value: [1.0, 'one']}.list_value","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"doubleValue":1},{"stringValue":"one"}]}}},"ast":"TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n list_value:[\n 1~double,\n \"one\"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_read_proto2_empty","expr":"TestAllTypes{list_value: []}.list_value","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_read_proto2_unset","description":"Not a wrapper type, so doesn't convert to null.","expr":"TestAllTypes{}.list_value","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{list_value: [1.0, 'one']}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","listValue":[1,"one"]}}},"ast":"TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n list_value:[\n 1~double,\n \"one\"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{list_value: []}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","listValue":[]}}},"ast":"TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{list_value: [1.0, 'one']}.list_value","container":"cel.expr.conformance.proto3","value":{"listValue":{"values":[{"doubleValue":1},{"stringValue":"one"}]}}},"ast":"TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n \"one\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n list_value:[\n 1~double,\n \"one\"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_read_proto3_empty","expr":"TestAllTypes{list_value: []}.list_value","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"},{"original":{"name":"field_read_proto3_unset","description":"Not a wrapper type, so doesn't convert to null.","expr":"TestAllTypes{}.list_value","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)","type":"list(dyn)"}]},{"name":"struct","tests":[{"original":{"name":"literal","expr":"google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}","value":{"mapValue":{"entries":[{"key":{"stringValue":"uno"},"value":{"doubleValue":1}},{"key":{"stringValue":"dos"},"value":{"doubleValue":2}}]}}},"ast":"google.protobuf.Struct{\n fields:{\n \"uno\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"dos\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Struct{\n fields:{\n \"uno\"~string:1~double,\n \"dos\"~string:2~double\n }~map(string, double)\n}~map(string, dyn)^google.protobuf.Struct","type":"map(string, dyn)"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}.fields","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Struct{\n fields:{\n \"uno\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"dos\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.fields^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Struct{\n fields:{\n \"uno\"~string:1~double,\n \"dos\"~string:2~double\n }~map(string, double)\n}~map(string, dyn)^google.protobuf.Struct.fields~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Struct{fields: {}}","value":{"mapValue":{}}},"ast":"google.protobuf.Struct{\n fields:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Struct{\n fields:{}~map(string, dyn)\n}~map(string, dyn)^google.protobuf.Struct","type":"map(string, dyn)"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Struct"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Struct","value":{"first":"Abraham","last":"Lincoln"}}}}},"value":{"mapValue":{"entries":[{"key":{"stringValue":"first"},"value":{"stringValue":"Abraham"}},{"key":{"stringValue":"last"},"value":{"stringValue":"Lincoln"}}]}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~map(string, dyn)^x","type":"map(string, dyn)"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStruct":{"deux":2,"un":1}}}},"ast":"TestAllTypes{\n single_struct:{\n \"un\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"deux\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n \"un\"~string:1~double,\n \"deux\"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_struct: {}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStruct":{}}}},"ast":"TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_bad","expr":"TestAllTypes{single_struct: {1: 'uno'}}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"bad key type"}]}},"ast":"TestAllTypes{\n single_struct:{\n 1^#*expr.Constant_Int64Value#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'map(int, string)'\n | TestAllTypes{single_struct: {1: 'uno'}}\n | ..........................^"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_struct: {'one': 1.0}}.single_struct","container":"cel.expr.conformance.proto2","value":{"mapValue":{"entries":[{"key":{"stringValue":"one"},"value":{"doubleValue":1}}]}}},"ast":"TestAllTypes{\n single_struct:{\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n \"one\"~string:1~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_read_proto2_empty","expr":"TestAllTypes{single_struct: {}}.single_struct","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_read_proto2_unset","description":"Not a wrapper type, so doesn't convert to null.","expr":"TestAllTypes{}.single_struct","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStruct":{"deux":2,"un":1}}}},"ast":"TestAllTypes{\n single_struct:{\n \"un\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"deux\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n \"un\"~string:1~double,\n \"deux\"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_struct: {}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStruct":{}}}},"ast":"TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_bad","expr":"TestAllTypes{single_struct: {1: 'uno'}}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"bad key type"}]}},"ast":"TestAllTypes{\n single_struct:{\n 1^#*expr.Constant_Int64Value#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'map(int, string)'\n | TestAllTypes{single_struct: {1: 'uno'}}\n | ..........................^"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_struct: {'one': 1.0}}.single_struct","container":"cel.expr.conformance.proto3","value":{"mapValue":{"entries":[{"key":{"stringValue":"one"},"value":{"doubleValue":1}}]}}},"ast":"TestAllTypes{\n single_struct:{\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n \"one\"~string:1~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_read_proto3_empty","expr":"TestAllTypes{single_struct: {}}.single_struct","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"},{"original":{"name":"field_read_proto3_unset","description":"Not a wrapper type, so doesn't convert to null.","expr":"TestAllTypes{}.single_struct","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)","type":"map(string, dyn)"}]},{"name":"value_null","tests":[{"original":{"name":"literal","expr":"Value{null_value: NullValue.NULL_VALUE}","container":"google.protobuf","value":{"nullValue":null}},"ast":"Value{\n null_value:NullValue^#*expr.Expr_IdentExpr#.NULL_VALUE^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n null_value:google.protobuf.NullValue.NULL_VALUE~int^google.protobuf.NullValue.NULL_VALUE\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"Value{null_value: NullValue.NULL_VALUE}.null_value","disableCheck":true,"container":"google.protobuf","evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"Value{\n null_value:NullValue^#*expr.Expr_IdentExpr#.NULL_VALUE^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.null_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n null_value:google.protobuf.NullValue.NULL_VALUE~int^google.protobuf.NullValue.NULL_VALUE\n}~dyn^google.protobuf.Value.null_value~dyn","type":"dyn"},{"original":{"name":"literal_unset","expr":"google.protobuf.Value{}","value":{"nullValue":null}},"ast":"google.protobuf.Value{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":null}}}},"value":{"nullValue":null}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: null}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":null}}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: null}.single_value","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_unset","expr":"TestAllTypes{}.single_value","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: null}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":null}}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: null}.single_value","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_unset","expr":"TestAllTypes{}.single_value","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_number","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{number_value: 12.5}","value":{"doubleValue":12.5}},"ast":"google.protobuf.Value{\n number_value:12.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n number_value:12.5~double\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{number_value: 12.5}.number_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n number_value:12.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.number_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n number_value:12.5~double\n}~dyn^google.protobuf.Value.number_value~dyn","type":"dyn"},{"original":{"name":"literal_zero","expr":"google.protobuf.Value{number_value: 0.0}","value":{"doubleValue":0}},"ast":"google.protobuf.Value{\n number_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n number_value:0~double\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":-26.375}}}},"value":{"doubleValue":-26.375}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: 7e23}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":7e+23}}},"ast":"TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_zero","expr":"TestAllTypes{single_value: 0.0}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":0}}},"ast":"TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: 7e23}.single_value","container":"cel.expr.conformance.proto2","value":{"doubleValue":7e+23}},"ast":"TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_value: 0.0}.single_value","container":"cel.expr.conformance.proto2","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: 7e23}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":7e+23}}},"ast":"TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_zero","expr":"TestAllTypes{single_value: 0.0}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":0}}},"ast":"TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: 7e23}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":7e+23}},"ast":"TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_value: 0.0}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":0}},"ast":"TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_string","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{string_value: 'foo'}","value":{"stringValue":"foo"}},"ast":"google.protobuf.Value{\n string_value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n string_value:\"foo\"~string\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{string_value: 'foo'}.string_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n string_value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.string_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n string_value:\"foo\"~string\n}~dyn^google.protobuf.Value.string_value~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Value{string_value: ''}","value":{"stringValue":""}},"ast":"google.protobuf.Value{\n string_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n string_value:\"\"~string\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":"bar"}}}},"value":{"stringValue":"bar"}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: 'baz'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":"baz"}}},"ast":"TestAllTypes{\n single_value:\"baz\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"baz\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_value: ''}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":""}}},"ast":"TestAllTypes{\n single_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: 'bletch'}.single_value","container":"cel.expr.conformance.proto2","value":{"stringValue":"bletch"}},"ast":"TestAllTypes{\n single_value:\"bletch\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"bletch\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_zero","expr":"TestAllTypes{single_value: ''}.single_value","container":"cel.expr.conformance.proto2","value":{"stringValue":""}},"ast":"TestAllTypes{\n single_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: 'baz'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":"baz"}}},"ast":"TestAllTypes{\n single_value:\"baz\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"baz\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_value: ''}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":""}}},"ast":"TestAllTypes{\n single_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: 'bletch'}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"bletch"}},"ast":"TestAllTypes{\n single_value:\"bletch\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"bletch\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_zero","expr":"TestAllTypes{single_value: ''}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":""}},"ast":"TestAllTypes{\n single_value:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_bool","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{bool_value: true}","value":{"boolValue":true}},"ast":"google.protobuf.Value{\n bool_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n bool_value:true~bool\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{bool_value: true}.bool_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n bool_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.bool_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n bool_value:true~bool\n}~dyn^google.protobuf.Value.bool_value~dyn","type":"dyn"},{"original":{"name":"literal_false","expr":"google.protobuf.Value{bool_value: false}","value":{"boolValue":false}},"ast":"google.protobuf.Value{\n bool_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n bool_value:false~bool\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":true}}}},"value":{"boolValue":true}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: true}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":true}}},"ast":"TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_false","expr":"TestAllTypes{single_value: false}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":false}}},"ast":"TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: true}.single_value","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_false","expr":"TestAllTypes{single_value: false}.single_value","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: true}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":true}}},"ast":"TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_false","expr":"TestAllTypes{single_value: false}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":false}}},"ast":"TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: true}.single_value","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_false","expr":"TestAllTypes{single_value: false}.single_value","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_struct","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}","value":{"mapValue":{"entries":[{"key":{"stringValue":"a"},"value":{"doubleValue":1}},{"key":{"stringValue":"b"},"value":{"stringValue":"two"}}]}}},"ast":"google.protobuf.Value{\n struct_value:{\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"b\"^#*expr.Constant_StringValue#:\"two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n struct_value:{\n \"a\"~string:1~double,\n \"b\"~string:\"two\"~string\n }~map(string, dyn)\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}.struct_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n struct_value:{\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"b\"^#*expr.Constant_StringValue#:\"two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.struct_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n struct_value:{\n \"a\"~string:1~double,\n \"b\"~string:\"two\"~string\n }~map(string, dyn)\n}~dyn^google.protobuf.Value.struct_value~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Value{struct_value: {}}","value":{"mapValue":{}}},"ast":"google.protobuf.Value{\n struct_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n struct_value:{}~map(string, dyn)\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":{"x":null,"y":false}}}}},"value":{"mapValue":{"entries":[{"key":{"stringValue":"x"},"value":{"nullValue":null}},{"key":{"stringValue":"y"},"value":{"boolValue":false}}]}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":{"deux":2,"un":1}}}},"ast":"TestAllTypes{\n single_value:{\n \"un\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"deux\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:{\n \"un\"~string:1~double,\n \"deux\"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_value: {}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":{}}}},"ast":"TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: {'i': true}}.single_value","container":"cel.expr.conformance.proto2","value":{"mapValue":{"entries":[{"key":{"stringValue":"i"},"value":{"boolValue":true}}]}}},"ast":"TestAllTypes{\n single_value:{\n \"i\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:{\n \"i\"~string:true~bool\n }~map(string, bool)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_empty","expr":"TestAllTypes{single_value: {}}.single_value","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":{"deux":2,"un":1}}}},"ast":"TestAllTypes{\n single_value:{\n \"un\"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n \"deux\"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:{\n \"un\"~string:1~double,\n \"deux\"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_value: {}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":{}}}},"ast":"TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: {'i': true}}.single_value","container":"cel.expr.conformance.proto3","value":{"mapValue":{"entries":[{"key":{"stringValue":"i"},"value":{"boolValue":true}}]}}},"ast":"TestAllTypes{\n single_value:{\n \"i\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:{\n \"i\"~string:true~bool\n }~map(string, bool)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_empty","expr":"TestAllTypes{single_value: {}}.single_value","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"value_list","tests":[{"original":{"name":"literal","expr":"google.protobuf.Value{list_value: ['a', 3.0]}","value":{"listValue":{"values":[{"stringValue":"a"},{"doubleValue":3}]}}},"ast":"google.protobuf.Value{\n list_value:[\n \"a\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n list_value:[\n \"a\"~string,\n 3~double\n ]~list(dyn)\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Value{list_value: []}.list_value","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Value{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Value{\n list_value:[]~list(dyn)\n}~dyn^google.protobuf.Value.list_value~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Value{list_value: []}","value":{"listValue":{}}},"ast":"google.protobuf.Value{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Value{\n list_value:[]~list(dyn)\n}~dyn^google.protobuf.Value","type":"dyn"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Value"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Value","value":[1,true,"hi"]}}}},"value":{"listValue":{"values":[{"doubleValue":1},{"boolValue":true},{"stringValue":"hi"}]}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~dyn^x","type":"dyn"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_value: ['un', 1.0]}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":["un",1]}}},"ast":"TestAllTypes{\n single_value:[\n \"un\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:[\n \"un\"~string,\n 1~double\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_assign_proto2_empty","expr":"TestAllTypes{single_value: []}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":[]}}},"ast":"TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_value: ['i', true]}.single_value","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"stringValue":"i"},{"boolValue":true}]}}},"ast":"TestAllTypes{\n single_value:[\n \"i\"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:[\n \"i\"~string,\n true~bool\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto2_empty","expr":"TestAllTypes{single_value: []}.single_value","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_value: ['un', 1.0]}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":["un",1]}}},"ast":"TestAllTypes{\n single_value:[\n \"un\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:[\n \"un\"~string,\n 1~double\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_assign_proto3_empty","expr":"TestAllTypes{single_value: []}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":[]}}},"ast":"TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_value: ['i', true]}.single_value","container":"cel.expr.conformance.proto3","value":{"listValue":{"values":[{"stringValue":"i"},{"boolValue":true}]}}},"ast":"TestAllTypes{\n single_value:[\n \"i\"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:[\n \"i\"~string,\n true~bool\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"field_read_proto3_empty","expr":"TestAllTypes{single_value: []}.single_value","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"any","tests":[{"original":{"name":"literal","expr":"google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}},"ast":"google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\b\\x96\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\b\\x96\\x01\"~bytes\n}~any^google.protobuf.Any","type":"any"},{"original":{"name":"literal_no_field_access","expr":"google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}.type_url","disableCheck":true,"evalError":{"errors":[{"message":"no_matching_overload"}]}},"ast":"google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b\"\\b\\x96\\x01\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.type_url^#*expr.Expr_SelectExpr#","checkedAst":"google.protobuf.Any{\n type_url:\"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes\"~string,\n value:b\"\\b\\x96\\x01\"~bytes\n}~any^google.protobuf.Any.type_url~dyn","type":"dyn"},{"original":{"name":"literal_empty","expr":"google.protobuf.Any{}","evalError":{"errors":[{"message":"conversion"}]}},"ast":"google.protobuf.Any{}^#*expr.Expr_StructExpr#","checkedAst":"google.protobuf.Any{}~any^google.protobuf.Any","type":"any"},{"original":{"name":"var","expr":"x","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Any"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Any","value":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}}}},"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}},"ast":"x^#*expr.Expr_IdentExpr#","checkedAst":"x~any^x","type":"any"},{"original":{"name":"field_assign_proto2","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 150}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleAny":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"field_read_proto2","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":150}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"field_assign_proto3","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 150}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleAny":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":150}}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"field_read_proto3","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":150}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]},{"name":"complex","tests":[{"original":{"name":"any_list_map","expr":"TestAllTypes{single_any: [{'almost': 'done'}]}.single_any","container":"cel.expr.conformance.proto3","value":{"listValue":{"values":[{"mapValue":{"entries":[{"key":{"stringValue":"almost"},"value":{"stringValue":"done"}}]}}]}}},"ast":"TestAllTypes{\n single_any:[\n {\n \"almost\"^#*expr.Constant_StringValue#:\"done\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:[\n {\n \"almost\"~string:\"done\"~string\n }~map(string, string)\n ]~list(map(string, string))\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]}]},{"name":"encoders_ext","suites":[{"name":"encode","tests":[{"original":{"name":"hello","expr":"base64.encode(b'hello')","value":{"stringValue":"aGVsbG8="}},"ast":"base64^#*expr.Expr_IdentExpr#.encode(\n b\"hello\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"base64.encode(\n b\"hello\"~bytes\n)~string^base64_encode_bytes","type":"string"}]},{"name":"decode","tests":[{"original":{"name":"hello","expr":"base64.decode('aGVsbG8=')","value":{"bytesValue":"aGVsbG8="}},"ast":"base64^#*expr.Expr_IdentExpr#.decode(\n \"aGVsbG8=\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"base64.decode(\n \"aGVsbG8=\"~string\n)~bytes^base64_decode_string","type":"bytes"},{"original":{"name":"hello_without_padding","expr":"base64.decode('aGVsbG8')","value":{"bytesValue":"aGVsbG8="}},"ast":"base64^#*expr.Expr_IdentExpr#.decode(\n \"aGVsbG8\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"base64.decode(\n \"aGVsbG8\"~string\n)~bytes^base64_decode_string","type":"bytes"}]},{"name":"round_trip","tests":[{"original":{"name":"hello","expr":"base64.decode(base64.encode(b'Hello World!'))","value":{"bytesValue":"SGVsbG8gV29ybGQh"}},"ast":"base64^#*expr.Expr_IdentExpr#.decode(\n base64^#*expr.Expr_IdentExpr#.encode(\n b\"Hello World!\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"base64.decode(\n base64.encode(\n b\"Hello World!\"~bytes\n )~string^base64_encode_bytes\n)~bytes^base64_decode_string","type":"bytes"}]}]},{"name":"enums","suites":[{"name":"legacy_proto2","tests":[{"original":{"name":"literal_global","expr":"GlobalEnum.GAZ","container":"cel.expr.conformance.proto2","value":{"int64Value":"2"}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ","type":"int"},{"original":{"name":"literal_nested","expr":"TestAllTypes.NestedEnum.BAR","container":"cel.expr.conformance.proto2","value":{"int64Value":"1"}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","type":"int"},{"original":{"name":"literal_zero","expr":"GlobalEnum.GOO","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO","type":"int"},{"original":{"name":"comparison","expr":"GlobalEnum.GAR == 1","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"arithmetic","expr":"TestAllTypes.NestedEnum.BAR + 3","container":"cel.expr.conformance.proto2","value":{"int64Value":"4"}},"ast":"_+_(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR,\n 3~int\n)~int^add_int64","type":"int"},{"original":{"name":"type_global","expr":"type(GlobalEnum.GOO)","container":"cel.expr.conformance.proto2","value":{"typeValue":"int"}},"ast":"type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO\n)~type(int)^type","type":"type(int)"},{"original":{"name":"type_nested","expr":"type(TestAllTypes.NestedEnum.BAZ)","container":"cel.expr.conformance.proto2","value":{"typeValue":"int"}},"ast":"type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type","type":"type(int)"},{"original":{"name":"select_default","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"field_type","expr":"type(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"typeValue":"int"}},"ast":"type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"assign_standalone_name","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","standaloneEnum":"BAZ"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"assign_standalone_int","expr":"TestAllTypes{standalone_enum: 1}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","standaloneEnum":"BAR"}}},"ast":"TestAllTypes{\n standalone_enum:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:1~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"assign_standalone_int_too_big","expr":"TestAllTypes{standalone_enum: 5000000000}","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes{\n standalone_enum:5000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:5000000000~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"assign_standalone_int_too_neg","expr":"TestAllTypes{standalone_enum: -7000000000}","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes{\n standalone_enum:-7000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:-7000000000~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"access_repeated_enum","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"assign_repeated_enum","expr":"TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","repeatedNestedEnum":["FOO","BAR"]}}},"ast":"TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"list_enum_as_list_int","expr":"0 in TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}.repeated_nested_enum","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"@in(\n 0^#*expr.Constant_Int64Value#,\n TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 0~int,\n cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"enum_as_int","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"@in(\n TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int,\n [\n 0~int\n ]~list(int)\n)~bool^in_list","type":"bool"}]},{"name":"legacy_proto3","tests":[{"original":{"name":"literal_global","expr":"GlobalEnum.GAZ","container":"cel.expr.conformance.proto3","value":{"int64Value":"2"}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ","type":"int"},{"original":{"name":"literal_nested","expr":"TestAllTypes.NestedEnum.BAR","container":"cel.expr.conformance.proto3","value":{"int64Value":"1"}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR","type":"int"},{"original":{"name":"literal_zero","expr":"GlobalEnum.GOO","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO","type":"int"},{"original":{"name":"comparison","expr":"GlobalEnum.GAR == 1","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"arithmetic","expr":"TestAllTypes.NestedEnum.BAR + 3","container":"cel.expr.conformance.proto3","value":{"int64Value":"4"}},"ast":"_+_(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR,\n 3~int\n)~int^add_int64","type":"int"},{"original":{"name":"type_global","expr":"type(GlobalEnum.GOO)","container":"cel.expr.conformance.proto3","value":{"typeValue":"int"}},"ast":"type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO\n)~type(int)^type","type":"type(int)"},{"original":{"name":"type_nested","expr":"type(TestAllTypes.NestedEnum.BAZ)","container":"cel.expr.conformance.proto3","value":{"typeValue":"int"}},"ast":"type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type","type":"type(int)"},{"original":{"name":"select_default","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"select","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAZ"}}}},"value":{"int64Value":"2"}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"select_big","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":108}}}},"value":{"int64Value":"108"}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"select_neg","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-3}}}},"value":{"int64Value":"-3"}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"field_type","expr":"type(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"typeValue":"int"}},"ast":"type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"assign_standalone_name","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAZ"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int","expr":"TestAllTypes{standalone_enum: 1}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAR"}}},"ast":"TestAllTypes{\n standalone_enum:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int_big","expr":"TestAllTypes{standalone_enum: 99}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":99}}},"ast":"TestAllTypes{\n standalone_enum:99^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:99~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int_neg","expr":"TestAllTypes{standalone_enum: -1}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-1}}},"ast":"TestAllTypes{\n standalone_enum:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:-1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int_too_big","expr":"TestAllTypes{standalone_enum: 5000000000}","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes{\n standalone_enum:5000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:5000000000~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int_too_neg","expr":"TestAllTypes{standalone_enum: -7000000000}","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes{\n standalone_enum:-7000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:-7000000000~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"access_repeated_enum","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"assign_repeated_enum","expr":"TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","repeatedNestedEnum":["FOO","BAR"]}}},"ast":"TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"list_enum_as_list_int","expr":"0 in TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}.repeated_nested_enum","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"@in(\n 0^#*expr.Constant_Int64Value#,\n TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 0~int,\n cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"enum_as_int","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"@in(\n TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int,\n [\n 0~int\n ]~list(int)\n)~bool^in_list","type":"bool"}]},{"name":"strong_proto2","tests":[{"original":{"name":"literal_global","expr":"GlobalEnum.GAZ","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.GlobalEnum","value":2}}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ","type":"int"},{"original":{"name":"literal_nested","expr":"TestAllTypes.NestedEnum.BAR","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum","value":1}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","type":"int"},{"original":{"name":"literal_zero","expr":"GlobalEnum.GOO","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.GlobalEnum"}}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO","type":"int"},{"original":{"name":"comparison_true","expr":"GlobalEnum.GAR == GlobalEnum.GAR","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR\n)~bool^equals","type":"bool"},{"original":{"name":"comparison_false","expr":"GlobalEnum.GAR == GlobalEnum.GAZ","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ\n)~bool^equals","type":"bool"},{"original":{"name":"type_global","expr":"type(GlobalEnum.GOO)","container":"cel.expr.conformance.proto2","value":{"typeValue":"cel.expr.conformance.proto2.GlobalEnum"}},"ast":"type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO\n)~type(int)^type","type":"type(int)"},{"original":{"name":"type_nested","expr":"type(TestAllTypes.NestedEnum.BAZ)","container":"cel.expr.conformance.proto2","value":{"typeValue":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum"}},"ast":"type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type","type":"type(int)"},{"original":{"name":"select_default","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"field_type","expr":"type(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"typeValue":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum"}},"ast":"type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"assign_standalone_name","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","standaloneEnum":"BAZ"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"assign_standalone_int","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","standaloneEnum":"BAR"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}\n | .....................................................^"},{"original":{"name":"convert_symbol_to_int","expr":"int(GlobalEnum.GAZ)","container":"cel.expr.conformance.proto2","value":{"int64Value":"2"}},"ast":"int(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ\n)~int^int64_to_int64","type":"int"},{"original":{"name":"convert_unnamed_to_int","description":"Disable check - missing way to declare enums.","expr":"int(x)","disableCheck":true,"bindings":{"x":{"value":{"enumValue":{"type":"cel.expr.conformance.proto2.GlobalEnum","value":444}}}},"value":{"int64Value":"444"}},"ast":"int(\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: undeclared reference to 'x' (in container '')\n | int(x)\n | ....^"},{"original":{"name":"convert_int_inrange","expr":"TestAllTypes.NestedEnum(2)","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum","value":2}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(2)\n | .......................^"},{"original":{"name":"convert_int_big","expr":"TestAllTypes.NestedEnum(20000)","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum","value":20000}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 20000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(20000)\n | .......................^"},{"original":{"name":"convert_int_neg","expr":"GlobalEnum(-33)","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.GlobalEnum","value":-33}}},"ast":"GlobalEnum(\n -33^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: undeclared reference to 'GlobalEnum' (in container 'cel.expr.conformance.proto2')\n | GlobalEnum(-33)\n | ..........^"},{"original":{"name":"convert_int_too_big","expr":"TestAllTypes.NestedEnum(5000000000)","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(5000000000)\n | .......................^"},{"original":{"name":"convert_int_too_neg","expr":"TestAllTypes.NestedEnum(-7000000000)","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -7000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(-7000000000)\n | .......................^"},{"original":{"name":"convert_string","expr":"TestAllTypes.NestedEnum('BAZ')","container":"cel.expr.conformance.proto2","value":{"enumValue":{"type":"cel.expr.conformance.proto2.TestAllTypes.NestedEnum","value":2}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n \"BAZ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum('BAZ')\n | .......................^"},{"original":{"name":"convert_string_bad","expr":"TestAllTypes.NestedEnum('BLETCH')","container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"invalid"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n \"BLETCH\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum('BLETCH')\n | .......................^"}]},{"name":"strong_proto3","tests":[{"original":{"name":"literal_global","expr":"GlobalEnum.GAZ","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.GlobalEnum","value":2}}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ","type":"int"},{"original":{"name":"literal_nested","expr":"TestAllTypes.NestedEnum.BAR","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":1}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR","type":"int"},{"original":{"name":"literal_zero","expr":"GlobalEnum.GOO","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.GlobalEnum"}}},"ast":"GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO","type":"int"},{"original":{"name":"comparison_true","expr":"GlobalEnum.GAR == GlobalEnum.GAR","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR\n)~bool^equals","type":"bool"},{"original":{"name":"comparison_false","expr":"GlobalEnum.GAR == GlobalEnum.GAZ","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ\n)~bool^equals","type":"bool"},{"original":{"name":"type_global","expr":"type(GlobalEnum.GOO)","container":"cel.expr.conformance.proto3","value":{"typeValue":"cel.expr.conformance.proto3.GlobalEnum"}},"ast":"type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO\n)~type(int)^type","type":"type(int)"},{"original":{"name":"type_nested","expr":"type(TestAllTypes.NestedEnum.BAZ)","container":"cel.expr.conformance.proto3","value":{"typeValue":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum"}},"ast":"type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type","type":"type(int)"},{"original":{"name":"select_default","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"select","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAZ"}}}},"value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":2}}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"select_big","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":108}}}},"value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":108}}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"select_neg","expr":"x.standalone_enum","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"container":"cel.expr.conformance.proto3","bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-3}}}},"value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":-3}}},"ast":"x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int","type":"int"},{"original":{"name":"field_type","expr":"type(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"typeValue":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum"}},"ast":"type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int\n)~type(int)^type","type":"type(int)"},{"original":{"name":"assign_standalone_name","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAZ"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"assign_standalone_int","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":"BAR"}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}\n | .....................................................^"},{"original":{"name":"assign_standalone_int_big","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":99}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 99^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}\n | .....................................................^"},{"original":{"name":"assign_standalone_int_neg","expr":"TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-1}}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","error":"ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}\n | .....................................................^"},{"original":{"name":"convert_symbol_to_int","expr":"int(GlobalEnum.GAZ)","container":"cel.expr.conformance.proto3","value":{"int64Value":"2"}},"ast":"int(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ\n)~int^int64_to_int64","type":"int"},{"original":{"name":"convert_unnamed_to_int","description":"Disable check - missing way to declare enums.","expr":"int(x)","disableCheck":true,"bindings":{"x":{"value":{"enumValue":{"type":"cel.expr.conformance.proto3.GlobalEnum","value":444}}}},"value":{"int64Value":"444"}},"ast":"int(\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:5: undeclared reference to 'x' (in container '')\n | int(x)\n | ....^"},{"original":{"name":"convert_unnamed_to_int_select","expr":"int(x.standalone_enum)","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","standaloneEnum":-987}}}},"value":{"int64Value":"-987"}},"ast":"int(\n x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int\n)~int^int64_to_int64","type":"int"},{"original":{"name":"convert_int_inrange","expr":"TestAllTypes.NestedEnum(2)","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":2}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(2)\n | .......................^"},{"original":{"name":"convert_int_big","expr":"TestAllTypes.NestedEnum(20000)","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":20000}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 20000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(20000)\n | .......................^"},{"original":{"name":"convert_int_neg","expr":"GlobalEnum(-33)","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.GlobalEnum","value":-33}}},"ast":"GlobalEnum(\n -33^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: undeclared reference to 'GlobalEnum' (in container 'cel.expr.conformance.proto3')\n | GlobalEnum(-33)\n | ..........^"},{"original":{"name":"convert_int_too_big","expr":"TestAllTypes.NestedEnum(5000000000)","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(5000000000)\n | .......................^"},{"original":{"name":"convert_int_too_neg","expr":"TestAllTypes.NestedEnum(-7000000000)","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"range"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -7000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(-7000000000)\n | .......................^"},{"original":{"name":"convert_string","expr":"TestAllTypes.NestedEnum('BAZ')","container":"cel.expr.conformance.proto3","value":{"enumValue":{"type":"cel.expr.conformance.proto3.TestAllTypes.NestedEnum","value":2}}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n \"BAZ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum('BAZ')\n | .......................^"},{"original":{"name":"convert_string_bad","expr":"TestAllTypes.NestedEnum('BLETCH')","container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"invalid"}]}},"ast":"TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n \"BLETCH\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum('BLETCH')\n | .......................^"}]}]},{"name":"fields","suites":[{"name":"map_fields","tests":[{"original":{"name":"map_key_int64","expr":"{0:1,2:2,5:true}[5]","value":{"boolValue":true}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:true~bool\n }~map(int, dyn),\n 5~int\n)~dyn^index_map","type":"dyn"},{"original":{"name":"map_key_uint64","expr":"{0u:1u,2u:'happy',5u:3u}[2u]","value":{"stringValue":"happy"}},"ast":"_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:\"happy\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0u~uint:1u~uint,\n 2u~uint:\"happy\"~string,\n 5u~uint:3u~uint\n }~map(uint, dyn),\n 2u~uint\n)~dyn^index_map","type":"dyn"},{"original":{"name":"map_key_string","expr":"{'name':100u}['name']","value":{"uint64Value":"100"}},"ast":"_[_](\n {\n \"name\"^#*expr.Constant_StringValue#:100u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"name\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"name\"~string:100u~uint\n }~map(string, uint),\n \"name\"~string\n)~uint^index_map","type":"uint"},{"original":{"name":"map_key_bool","expr":"{true:5}[true]","value":{"int64Value":"5"}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:5~int\n }~map(bool, int),\n true~bool\n)~int^index_map","type":"int"},{"original":{"name":"map_key_mixed_type","expr":"{true:1,2:2,5u:3}[true]","value":{"int64Value":"1"}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:1~int,\n 2~int:2~int,\n 5u~uint:3~int\n }~map(dyn, int),\n true~bool\n)~int^index_map","type":"int"},{"original":{"name":"map_key_mixed_numbers_double_key","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[3.0]","value":{"doubleValue":3}},"ast":"_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 3~double\n)~double^index_map","type":"double"},{"original":{"name":"map_key_mixed_numbers_lossy_double_key","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[3.1]","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3.1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 3.1~double\n)~double^index_map","type":"double"},{"original":{"name":"map_key_mixed_numbers_uint_key","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[2u]","value":{"doubleValue":2}},"ast":"_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 2u~uint\n)~double^index_map","type":"double"},{"original":{"name":"map_key_mixed_numbers_int_key","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[1]","value":{"doubleValue":1}},"ast":"_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 1~int\n)~double^index_map","type":"double"},{"original":{"name":"map_field_access","expr":"x.name","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"INT64"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"name"},"value":{"int64Value":"1024"}}]}}}},"value":{"int64Value":"1024"}},"ast":"x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#","checkedAst":"x~map(string, int)^x.name~int","type":"int"},{"original":{"name":"map_no_such_key","expr":"{0:1,2:2,5:3}[1]","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n)~int^index_map","type":"int"},{"original":{"name":"map_no_such_key_or_false","expr":"dyn({0:1,2:2,5:3}[1]) || false","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_no_such_key_or_true","expr":"dyn({0:1,2:2,5:3}[1]) || true","value":{"boolValue":true}},"ast":"_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_no_such_key_and_false","expr":"dyn({0:1,2:2,5:3}[1]) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_no_such_key_and_true","expr":"dyn({0:1,2:2,5:3}[1]) \u0026\u0026 true","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_bad_key_type","expr":"{0:1,2:2,5:3}[dyn(b'')]","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n)~int^index_map","type":"int"},{"original":{"name":"map_bad_key_type_or_false","expr":"dyn({0:1,2:2,5:3}[dyn(b'')]) || false","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_bad_key_type_or_true","expr":"dyn({0:1,2:2,5:3}[dyn(b'')]) || true","value":{"boolValue":true}},"ast":"_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_bad_key_type_and_false","expr":"dyn({0:1,2:2,5:3}[dyn(b'')]) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_bad_key_type_and_true","expr":"dyn({0:1,2:2,5:3}[dyn(b'')]) \u0026\u0026 true","evalError":{"errors":[{"message":"no such key"}]}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b\"\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b\"\"~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_field_select_no_such_key","expr":"x.name","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"evalError":{"errors":[{"message":"no such key: 'name'"}]}},"ast":"x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#","checkedAst":"x~map(string, string)^x.name~string","type":"string"},{"original":{"name":"map_field_select_no_such_key_or_false","expr":"dyn(x.name) || false","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"evalError":{"errors":[{"message":"no such key: 'name'"}]}},"ast":"_||_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_field_select_no_such_key_or_true","expr":"dyn(x.name) || true","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"value":{"boolValue":true}},"ast":"_||_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"map_field_select_no_such_key_and_false","expr":"dyn(x.name) \u0026\u0026 false","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_field_select_no_such_key_and_true","expr":"dyn(x.name) \u0026\u0026 true","typeEnv":[{"name":"x","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"x":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"holiday"},"value":{"stringValue":"field"}}]}}}},"evalError":{"errors":[{"message":"no such key: 'name'"}]}},"ast":"_\u0026\u0026_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"map_value_null","expr":"{true:null}[true]","value":{"nullValue":null}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:null~null\n }~map(bool, null),\n true~bool\n)~null^index_map","type":"null"},{"original":{"name":"map_value_bool","expr":"{27:false}[27]","value":{"boolValue":false}},"ast":"_[_](\n {\n 27^#*expr.Constant_Int64Value#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 27^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 27~int:false~bool\n }~map(int, bool),\n 27~int\n)~bool^index_map","type":"bool"},{"original":{"name":"map_value_string","expr":"{'n':'x'}['n']","value":{"stringValue":"x"}},"ast":"_[_](\n {\n \"n\"^#*expr.Constant_StringValue#:\"x\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"n\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"n\"~string:\"x\"~string\n }~map(string, string),\n \"n\"~string\n)~string^index_map","type":"string"},{"original":{"name":"map_value_float","expr":"{3:15.15}[3]","value":{"doubleValue":15.15}},"ast":"_[_](\n {\n 3^#*expr.Constant_Int64Value#:15.15^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 3~int:15.15~double\n }~map(int, double),\n 3~int\n)~double^index_map","type":"double"},{"original":{"name":"map_value_uint64","expr":"{0u:1u,2u:2u,5u:3u}[0u]","value":{"uint64Value":"1"}},"ast":"_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:2u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0u~uint:1u~uint,\n 2u~uint:2u~uint,\n 5u~uint:3u~uint\n }~map(uint, uint),\n 0u~uint\n)~uint^index_map","type":"uint"},{"original":{"name":"map_value_int64","expr":"{true:1,false:2}[true]","value":{"int64Value":"1"}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n false^#*expr.Constant_BoolValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:1~int,\n false~bool:2~int\n }~map(bool, int),\n true~bool\n)~int^index_map","type":"int"},{"original":{"name":"map_value_bytes","expr":"{0:b''}[0]","value":{"bytesValue":""}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:b\"\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:b\"\"~bytes\n }~map(int, bytes),\n 0~int\n)~bytes^index_map","type":"bytes"},{"original":{"name":"map_value_list","expr":"{0u:[1]}[0u]","value":{"listValue":{"values":[{"int64Value":"1"}]}}},"ast":"_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0u~uint:[\n 1~int\n ]~list(int)\n }~map(uint, list(int)),\n 0u~uint\n)~list(int)^index_map","type":"list(int)"},{"original":{"name":"map_value_map","expr":"{'map': {'k': 'v'}}['map']","value":{"mapValue":{"entries":[{"key":{"stringValue":"k"},"value":{"stringValue":"v"}}]}}},"ast":"_[_](\n {\n \"map\"^#*expr.Constant_StringValue#:{\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"map\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"map\"~string:{\n \"k\"~string:\"v\"~string\n }~map(string, string)\n }~map(string, map(string, string)),\n \"map\"~string\n)~map(string, string)^index_map","type":"map(string, string)"},{"original":{"name":"map_value_mix_type","expr":"{'map': {'k': 'v'}, 'list': [1]}['map']","value":{"mapValue":{"entries":[{"key":{"stringValue":"k"},"value":{"stringValue":"v"}}]}}},"ast":"_[_](\n {\n \"map\"^#*expr.Constant_StringValue#:{\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"list\"^#*expr.Constant_StringValue#:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"map\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"map\"~string:{\n \"k\"~string:\"v\"~string\n }~map(string, string),\n \"list\"~string:[\n 1~int\n ]~list(int)\n }~map(string, dyn),\n \"map\"~string\n)~dyn^index_map","type":"dyn"}]},{"name":"map_has","tests":[{"original":{"name":"has","expr":"has({'a': 1, 'b': 2}.a)","value":{"boolValue":true}},"ast":"{\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"b\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.a~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"a\"~string:1~int,\n \"b\"~string:2~int\n}~map(string, int).a~test-only~~bool","type":"bool"},{"original":{"name":"has_not","expr":"has({'a': 1, 'b': 2}.c)","value":{"boolValue":false}},"ast":"{\n \"a\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"b\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.c~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"a\"~string:1~int,\n \"b\"~string:2~int\n}~map(string, int).c~test-only~~bool","type":"bool"},{"original":{"name":"has_empty","expr":"has({}.a)","value":{"boolValue":false}},"ast":"{}^#*expr.Expr_StructExpr#.a~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{}~map(dyn, dyn).a~test-only~~bool","type":"bool"}]},{"name":"quoted_map_fields","tests":[{"original":{"name":"field_access_slash","expr":"{'/api/v1': true, '/api/v2': false}.`/api/v1`","value":{"boolValue":true}},"error":"ERROR: field_access_slash:1:37: unsupported syntax: '`'\n | {'/api/v1': true, '/api/v2': false}.`/api/v1`\n | ....................................^"},{"original":{"name":"field_access_dash","expr":"{'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'","value":{"boolValue":true}},"error":"ERROR: field_access_dash:1:61: unsupported syntax: '`'\n | {'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'\n | ............................................................^"},{"original":{"name":"field_access_dot","expr":"{'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`","value":{"int64Value":"32"}},"error":"ERROR: field_access_dot:1:34: unsupported syntax: '`'\n | {'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`\n | .................................^"},{"original":{"name":"has_field_slash","expr":"has({'/api/v1': true, '/api/v2': false}.`/api/v3`)","value":{"boolValue":false}},"error":"ERROR: has_field_slash:1:41: unsupported syntax: '`'\n | has({'/api/v1': true, '/api/v2': false}.`/api/v3`)\n | ........................................^"},{"original":{"name":"has_field_dash","expr":"has({'content-type': 'application/json', 'content-length': 145}.`content-type`)","value":{"boolValue":true}},"error":"ERROR: has_field_dash:1:65: unsupported syntax: '`'\n | has({'content-type': 'application/json', 'content-length': 145}.`content-type`)\n | ................................................................^"},{"original":{"name":"has_field_dot","expr":"has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)","value":{"boolValue":true}},"error":"ERROR: has_field_dot:1:38: unsupported syntax: '`'\n | has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)\n | .....................................^"}]},{"name":"qualified_identifier_resolution","tests":[{"original":{"name":"qualified_ident","expr":"a.b.c","typeEnv":[{"name":"a.b.c","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"a.b.c":{"value":{"stringValue":"yeah"}}},"value":{"stringValue":"yeah"}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#","checkedAst":"a.b.c~string^a.b.c","type":"string"},{"original":{"name":"map_field_select","expr":"a.b.c","typeEnv":[{"name":"a.b","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"a.b":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"c"},"value":{"stringValue":"yeah"}}]}}}},"value":{"stringValue":"yeah"}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#","checkedAst":"a.b~map(string, string)^a.b.c~string","type":"string"},{"original":{"name":"qualified_identifier_resolution_unchecked","description":"namespace resolution should try to find the longest prefix for the evaluator.","expr":"a.b.c","disableCheck":true,"typeEnv":[{"name":"a.b.c","ident":{"type":{"primitive":"STRING"}}},{"name":"a.b","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"a.b":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"c"},"value":{"stringValue":"oops"}}]}}},"a.b.c":{"value":{"stringValue":"yeah"}}},"value":{"stringValue":"yeah"}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#","checkedAst":"a.b.c~string^a.b.c","type":"string"},{"original":{"name":"list_field_select_unsupported","expr":"a.b.pancakes","disableCheck":true,"typeEnv":[{"name":"a.b","ident":{"type":{"listType":{"elemType":{"primitive":"STRING"}}}}}],"bindings":{"a.b":{"value":{"listValue":{"values":[{"stringValue":"pancakes"}]}}}},"evalError":{"errors":[{"message":"type 'list_type:\u003celem_type:\u003cprimitive:STRING \u003e \u003e ' does not support field selection"}]}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.pancakes^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:4: type 'list(string)' does not support field selection\n | a.b.pancakes\n | ...^"},{"original":{"name":"int64_field_select_unsupported","expr":"a.pancakes","disableCheck":true,"typeEnv":[{"name":"a","ident":{"type":{"primitive":"INT64"}}}],"bindings":{"a":{"value":{"int64Value":"15"}}},"evalError":{"errors":[{"message":"type 'int64_type' does not support field selection"}]}},"ast":"a^#*expr.Expr_IdentExpr#.pancakes^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:2: type 'int' does not support field selection\n | a.pancakes\n | .^"},{"original":{"name":"ident_with_longest_prefix_check","description":"namespace resolution should try to find the longest prefix for the checker.","expr":"a.b.c","typeEnv":[{"name":"a.b.c","ident":{"type":{"primitive":"STRING"}}},{"name":"a.b","ident":{"type":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"STRING"}}}}}],"bindings":{"a.b":{"value":{"mapValue":{"entries":[{"key":{"stringValue":"c"},"value":{"stringValue":"oops"}}]}}},"a.b.c":{"value":{"stringValue":"yeah"}}},"value":{"stringValue":"yeah"}},"ast":"a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#","checkedAst":"a.b.c~string^a.b.c","type":"string"},{"original":{"name":"map_key_float","description":"map should not support float as the key.","expr":"{3.3:15.15, 1.0: 5}[1.0]","disableCheck":true,"evalError":{"errors":[{"message":"unsupported key type"}]}},"ast":"_[_](\n {\n 3.3^#*expr.Constant_DoubleValue#:15.15^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_DoubleValue#:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 3.3~double:15.15~double,\n 1~double:5~int\n }~map(double, dyn),\n 1~double\n)~dyn^index_map","type":"dyn"},{"original":{"name":"map_key_null","description":"map should not support null as the key.","expr":"{null:false}[null]","disableCheck":true,"evalError":{"errors":[{"message":"unsupported key type"}]}},"ast":"_[_](\n {\n null^#*expr.Constant_NullValue#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n null~null:false~bool\n }~map(null, bool),\n null~null\n)~bool^index_map","type":"bool"},{"original":{"name":"map_value_repeat_key","description":"map should not support repeated key.","expr":"{true:1,false:2,true:3}[true]","evalError":{"errors":[{"message":"Failed with repeated key"}]}},"ast":"_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n false^#*expr.Constant_BoolValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n true~bool:1~int,\n false~bool:2~int,\n true~bool:3~int\n }~map(bool, int),\n true~bool\n)~int^index_map","type":"int"},{"original":{"name":"map_value_repeat_key_heterogeneous","description":"map should not support repeated key.","expr":"{0: 1, 0u: 2}[0.0]","evalError":{"errors":[{"message":"Failed with repeated key"}]}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 0u^#*expr.Constant_Uint64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:1~int,\n 0u~uint:2~int\n }~map(dyn, int),\n 0~double\n)~int^index_map","type":"int"}]},{"name":"in","tests":[{"original":{"name":"empty","expr":"7 in {}","value":{"boolValue":false}},"ast":"@in(\n 7^#*expr.Constant_Int64Value#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 7~int,\n {}~map(int, dyn)\n)~bool^in_map","type":"bool"},{"original":{"name":"singleton","expr":"true in {true: 1}","value":{"boolValue":true}},"ast":"@in(\n true^#*expr.Constant_BoolValue#,\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n true~bool,\n {\n true~bool:1~int\n }~map(bool, int)\n)~bool^in_map","type":"bool"},{"original":{"name":"present","expr":"'George' in {'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}","value":{"boolValue":true}},"ast":"@in(\n \"George\"^#*expr.Constant_StringValue#,\n {\n \"John\"^#*expr.Constant_StringValue#:\"smart\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"Paul\"^#*expr.Constant_StringValue#:\"cute\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"George\"^#*expr.Constant_StringValue#:\"quiet\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"Ringo\"^#*expr.Constant_StringValue#:\"funny\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"George\"~string,\n {\n \"John\"~string:\"smart\"~string,\n \"Paul\"~string:\"cute\"~string,\n \"George\"~string:\"quiet\"~string,\n \"Ringo\"~string:\"funny\"~string\n }~map(string, string)\n)~bool^in_map","type":"bool"},{"original":{"name":"absent","expr":"'spider' in {'ant': 6, 'fly': 6, 'centipede': 100}","value":{"boolValue":false}},"ast":"@in(\n \"spider\"^#*expr.Constant_StringValue#,\n {\n \"ant\"^#*expr.Constant_StringValue#:6^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"fly\"^#*expr.Constant_StringValue#:6^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"centipede\"^#*expr.Constant_StringValue#:100^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"spider\"~string,\n {\n \"ant\"~string:6~int,\n \"fly\"~string:6~int,\n \"centipede\"~string:100~int\n }~map(string, int)\n)~bool^in_map","type":"bool"},{"original":{"name":"mixed_numbers_and_keys_present","expr":"3.0 in {1: 1, 2: 2, 3u: 3} \u0026\u0026 2u in {1u: 1, 2: 2} \u0026\u0026 1 in {1u: 1, 2: 2}","value":{"boolValue":true}},"ast":"_\u0026\u0026_(\n _\u0026\u0026_(\n @in(\n 3^#*expr.Constant_DoubleValue#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 2u^#*expr.Constant_Uint64Value#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 1^#*expr.Constant_Int64Value#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _\u0026\u0026_(\n @in(\n 3~double,\n {\n 1~int:1~int,\n 2~int:2~int,\n 3u~uint:3~int\n }~map(dyn, int)\n )~bool^in_map,\n @in(\n 2u~uint,\n {\n 1u~uint:1~int,\n 2~int:2~int\n }~map(dyn, int)\n )~bool^in_map\n )~bool^logical_and,\n @in(\n 1~int,\n {\n 1u~uint:1~int,\n 2~int:2~int\n }~map(dyn, int)\n )~bool^in_map\n)~bool^logical_and","type":"bool"},{"original":{"name":"mixed_numbers_and_keys_absent","expr":"3.1 in {1: 1, 2: 2, 3u: 3}","value":{"boolValue":false}},"ast":"@in(\n 3.1^#*expr.Constant_DoubleValue#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 3.1~double,\n {\n 1~int:1~int,\n 2~int:2~int,\n 3u~uint:3~int\n }~map(dyn, int)\n)~bool^in_map","type":"bool"}]}]},{"name":"fp_math","suites":[{"name":"fp_math","tests":[{"original":{"name":"add_positive_positive","expr":"4.25 + 15.25","value":{"doubleValue":19.5}},"ast":"_+_(\n 4.25^#*expr.Constant_DoubleValue#,\n 15.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 4.25~double,\n 15.25~double\n)~double^add_double","type":"double"},{"original":{"name":"add_positive_negative","expr":"17.75 + (-7.75)","value":{"doubleValue":10}},"ast":"_+_(\n 17.75^#*expr.Constant_DoubleValue#,\n -7.75^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 17.75~double,\n -7.75~double\n)~double^add_double","type":"double"},{"original":{"name":"add_negative_negative","expr":"-4.125 + (-2.125)","value":{"doubleValue":-6.25}},"ast":"_+_(\n -4.125^#*expr.Constant_DoubleValue#,\n -2.125^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n -4.125~double,\n -2.125~double\n)~double^add_double","type":"double"},{"original":{"name":"sub_positive_positive","expr":"42.0 - 12.0","value":{"doubleValue":30}},"ast":"_-_(\n 42^#*expr.Constant_DoubleValue#,\n 12^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42~double,\n 12~double\n)~double^subtract_double","type":"double"},{"original":{"name":"sub_positive_negative","expr":"42.875 - (-22.0)","value":{"doubleValue":64.875}},"ast":"_-_(\n 42.875^#*expr.Constant_DoubleValue#,\n -22^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42.875~double,\n -22~double\n)~double^subtract_double","type":"double"},{"original":{"name":"sub_negative_negative","expr":"-4.875 - (-0.125)","value":{"doubleValue":-4.75}},"ast":"_-_(\n -4.875^#*expr.Constant_DoubleValue#,\n -0.125^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n -4.875~double,\n -0.125~double\n)~double^subtract_double","type":"double"},{"original":{"name":"multiply_positive_positive","expr":"42.5 * 0.2","value":{"doubleValue":8.5}},"ast":"_*_(\n 42.5^#*expr.Constant_DoubleValue#,\n 0.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 42.5~double,\n 0.2~double\n)~double^multiply_double","type":"double"},{"original":{"name":"multiply_positive_negative","expr":"40.75 * (-2.25)","value":{"doubleValue":-91.6875}},"ast":"_*_(\n 40.75^#*expr.Constant_DoubleValue#,\n -2.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 40.75~double,\n -2.25~double\n)~double^multiply_double","type":"double"},{"original":{"name":"multiply_negative_negative","expr":"-3.0 * (-2.5)","value":{"doubleValue":7.5}},"ast":"_*_(\n -3^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -3~double,\n -2.5~double\n)~double^multiply_double","type":"double"},{"original":{"name":"divide_positive_positive","expr":"0.0625 / 0.002","value":{"doubleValue":31.25}},"ast":"_/_(\n 0.0625^#*expr.Constant_DoubleValue#,\n 0.002^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 0.0625~double,\n 0.002~double\n)~double^divide_double","type":"double"},{"original":{"name":"divide_positive_negative","expr":"-2.0 / 2.0","value":{"doubleValue":-1}},"ast":"_/_(\n -2^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -2~double,\n 2~double\n)~double^divide_double","type":"double"},{"original":{"name":"divide_negative_negative","expr":"-8.875 / (-0.0625)","value":{"doubleValue":142}},"ast":"_/_(\n -8.875^#*expr.Constant_DoubleValue#,\n -0.0625^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -8.875~double,\n -0.0625~double\n)~double^divide_double","type":"double"},{"original":{"name":"mod_not_support","expr":"47.5 % 5.5","disableCheck":true,"evalError":{"errors":[{"message":"found no matching overload for '_%_' applied to '(double, double)'"}]}},"ast":"_%_(\n 47.5^#*expr.Constant_DoubleValue#,\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:6: found no matching overload for '_%_' applied to '(double, double)'\n | 47.5 % 5.5\n | .....^"},{"original":{"name":"negative","expr":"-(4.5)","value":{"doubleValue":-4.5}},"ast":"-_(\n 4.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n 4.5~double\n)~double^negate_double","type":"double"},{"original":{"name":"double_negative","expr":"-(-1.25)","value":{"doubleValue":1.25}},"ast":"-_(\n -1.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n -1.25~double\n)~double^negate_double","type":"double"},{"original":{"name":"negative_zero","expr":"-(0.0)","value":{"doubleValue":0}},"ast":"-_(\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n 0~double\n)~double^negate_double","type":"double"},{"original":{"name":"divide_zero","expr":"15.75 / 0.0","value":{"doubleValue":"Infinity"}},"ast":"_/_(\n 15.75^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 15.75~double,\n 0~double\n)~double^divide_double","type":"double"},{"original":{"name":"multiply_zero","expr":"15.36 * 0.0","value":{"doubleValue":0}},"ast":"_*_(\n 15.36^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 15.36~double,\n 0~double\n)~double^multiply_double","type":"double"},{"original":{"name":"add_left_identity","expr":"0.0 + 1.75","value":{"doubleValue":1.75}},"ast":"_+_(\n 0^#*expr.Constant_DoubleValue#,\n 1.75^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 0~double,\n 1.75~double\n)~double^add_double","type":"double"},{"original":{"name":"add_right_identity","expr":" 2.5 + 0.0","value":{"doubleValue":2.5}},"ast":"_+_(\n 2.5^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 2.5~double,\n 0~double\n)~double^add_double","type":"double"},{"original":{"name":"add_commutative","expr":"7.5 + 1.5 == 1.5 + 7.5","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 7.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 1.5^#*expr.Constant_DoubleValue#,\n 7.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 7.5~double,\n 1.5~double\n )~double^add_double,\n _+_(\n 1.5~double,\n 7.5~double\n )~double^add_double\n)~bool^equals","type":"bool"},{"original":{"name":"add_associative","expr":"5.625 + (15.75 + 2.0) == (5.625 + 15.75) + 2.0","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 5.625^#*expr.Constant_DoubleValue#,\n _+_(\n 15.75^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5.625^#*expr.Constant_DoubleValue#,\n 15.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 5.625~double,\n _+_(\n 15.75~double,\n 2~double\n )~double^add_double\n )~double^add_double,\n _+_(\n _+_(\n 5.625~double,\n 15.75~double\n )~double^add_double,\n 2~double\n )~double^add_double\n)~bool^equals","type":"bool"},{"original":{"name":"mul_left_identity","expr":"1.0 * 45.25","value":{"doubleValue":45.25}},"ast":"_*_(\n 1^#*expr.Constant_DoubleValue#,\n 45.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 1~double,\n 45.25~double\n)~double^multiply_double","type":"double"},{"original":{"name":"mul_right_identity","expr":"-25.25 * 1.0","value":{"doubleValue":-25.25}},"ast":"_*_(\n -25.25^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -25.25~double,\n 1~double\n)~double^multiply_double","type":"double"},{"original":{"name":"mul_commutative","expr":"1.5 * 25.875 == 25.875 * 1.5","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n 25.875^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25.875^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 1.5~double,\n 25.875~double\n )~double^multiply_double,\n _*_(\n 25.875~double,\n 1.5~double\n )~double^multiply_double\n)~bool^equals","type":"bool"},{"original":{"name":"mul_associative","expr":"1.5 * (23.625 * 0.75) == (1.5 * 23.625) * 0.75","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n _*_(\n 23.625^#*expr.Constant_DoubleValue#,\n 0.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n 23.625^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 1.5~double,\n _*_(\n 23.625~double,\n 0.75~double\n )~double^multiply_double\n )~double^multiply_double,\n _*_(\n _*_(\n 1.5~double,\n 23.625~double\n )~double^multiply_double,\n 0.75~double\n )~double^multiply_double\n)~bool^equals","type":"bool"},{"original":{"name":"add_mul_distribute","expr":"5.75 * (1.5 + 2.5) == 5.75 * 1.5 + 5.75 * 2.5","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n _+_(\n 1.5^#*expr.Constant_DoubleValue#,\n 2.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n 2.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 5.75~double,\n _+_(\n 1.5~double,\n 2.5~double\n )~double^add_double\n )~double^multiply_double,\n _+_(\n _*_(\n 5.75~double,\n 1.5~double\n )~double^multiply_double,\n _*_(\n 5.75~double,\n 2.5~double\n )~double^multiply_double\n )~double^add_double\n)~bool^equals","type":"bool"},{"original":{"name":"fp_overflow_positive","description":"DBL_MAX(2^1023) times two","expr":"2.0 * 8.988466e+307 ","value":{"doubleValue":"Infinity"}},"ast":"_*_(\n 2^#*expr.Constant_DoubleValue#,\n 8.988466e+307^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 2~double,\n 8.988466e+307~double\n)~double^multiply_double","type":"double"},{"original":{"name":"fp_overflow_negative","description":"-DBL_MAX(-2^1023) times two","expr":"2.0 * -8.988466e+307 ","value":{"doubleValue":"-Infinity"}},"ast":"_*_(\n 2^#*expr.Constant_DoubleValue#,\n -8.988466e+307^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 2~double,\n -8.988466e+307~double\n)~double^multiply_double","type":"double"},{"original":{"name":"fp_underflow","description":"DBL_MIN(2^-1074) divided by two","expr":"1e-324 / 2.0","value":{"doubleValue":0}},"ast":"_/_(\n 0^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 0~double,\n 2~double\n)~double^divide_double","type":"double"}]}]},{"name":"integer_math","suites":[{"name":"int64_math","tests":[{"original":{"name":"add_positive_positive","expr":"40 + 2","value":{"int64Value":"42"}},"ast":"_+_(\n 40^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 40~int,\n 2~int\n)~int^add_int64","type":"int"},{"original":{"name":"add_positive_negative","expr":"42 + (-7)","value":{"int64Value":"35"}},"ast":"_+_(\n 42^#*expr.Constant_Int64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 42~int,\n -7~int\n)~int^add_int64","type":"int"},{"original":{"name":"add_negative_negative","expr":"-4 + (-2)","value":{"int64Value":"-6"}},"ast":"_+_(\n -4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n -4~int,\n -2~int\n)~int^add_int64","type":"int"},{"original":{"name":"sub_positive_positive","expr":"42 - 12","value":{"int64Value":"30"}},"ast":"_-_(\n 42^#*expr.Constant_Int64Value#,\n 12^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42~int,\n 12~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"sub_positive_negative","expr":"42 - (-22)","value":{"int64Value":"64"}},"ast":"_-_(\n 42^#*expr.Constant_Int64Value#,\n -22^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42~int,\n -22~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"sub_negative_negative","expr":"-42 - (-12)","value":{"int64Value":"-30"}},"ast":"_-_(\n -42^#*expr.Constant_Int64Value#,\n -12^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n -42~int,\n -12~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"multiply_positive_positive","expr":"42 * 2","value":{"int64Value":"84"}},"ast":"_*_(\n 42^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 42~int,\n 2~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"multiply_positive_negative","expr":"40 * (-2)","value":{"int64Value":"-80"}},"ast":"_*_(\n 40^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 40~int,\n -2~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"multiply_negative_negative","expr":"-30 * (-2)","value":{"int64Value":"60"}},"ast":"_*_(\n -30^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -30~int,\n -2~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"divide_positive_positive","expr":"42 / 2","value":{"int64Value":"21"}},"ast":"_/_(\n 42^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 42~int,\n 2~int\n)~int^divide_int64","type":"int"},{"original":{"name":"divide_positive_negative","expr":"-20 / 2","value":{"int64Value":"-10"}},"ast":"_/_(\n -20^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -20~int,\n 2~int\n)~int^divide_int64","type":"int"},{"original":{"name":"divide_negative_negative","expr":"-80 / (-2)","value":{"int64Value":"40"}},"ast":"_/_(\n -80^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -80~int,\n -2~int\n)~int^divide_int64","type":"int"},{"original":{"name":"mod_positive_positive","expr":"47 % 5","value":{"int64Value":"2"}},"ast":"_%_(\n 47^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 47~int,\n 5~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"mod_positive_negative","expr":"43 % (-5)","value":{"int64Value":"3"}},"ast":"_%_(\n 43^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 43~int,\n -5~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"mod_negative_negative","expr":"-42 % (-5)","value":{"int64Value":"-2"}},"ast":"_%_(\n -42^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n -42~int,\n -5~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"mod_negative_positive","expr":"-3 % 5","value":{"int64Value":"-3"}},"ast":"_%_(\n -3^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n -3~int,\n 5~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"unary_minus_pos","expr":"-(42)","value":{"int64Value":"-42"}},"ast":"-_(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n 42~int\n)~int^negate_int64","type":"int"},{"original":{"name":"unary_minus_neg","expr":"-(-42)","value":{"int64Value":"42"}},"ast":"-_(\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n -42~int\n)~int^negate_int64","type":"int"},{"original":{"name":"unary_minus_no_overload","expr":"-(42u)","disableCheck":true,"evalError":{"errors":[{"message":"no_such_overload"}]}},"ast":"-_(\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(uint)'\n | -(42u)\n | ^"},{"original":{"name":"unary_minus_not_bool","expr":"-false","disableCheck":true,"evalError":{"errors":[{"message":"no_such_overload"}]}},"ast":"-_(\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(bool)'\n | -false\n | ^"},{"original":{"name":"mod_zero","expr":"34 % 0","evalError":{"errors":[{"message":"modulus by zero"}]}},"ast":"_%_(\n 34^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 34~int,\n 0~int\n)~int^modulo_int64","type":"int"},{"original":{"name":"negative_zero","expr":"-(0)","value":{"int64Value":"0"}},"ast":"-_(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n 0~int\n)~int^negate_int64","type":"int"},{"original":{"name":"double_negative","expr":"-(-42)","value":{"int64Value":"42"}},"ast":"-_(\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n -42~int\n)~int^negate_int64","type":"int"},{"original":{"name":"divide_zero","expr":"15 / 0","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"_/_(\n 15^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 15~int,\n 0~int\n)~int^divide_int64","type":"int"},{"original":{"name":"multiply_zero","expr":"15 * 0","value":{"int64Value":"0"}},"ast":"_*_(\n 15^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 15~int,\n 0~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"add_left_identity","expr":"0 + 17","value":{"int64Value":"17"}},"ast":"_+_(\n 0^#*expr.Constant_Int64Value#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 0~int,\n 17~int\n)~int^add_int64","type":"int"},{"original":{"name":"add_right_identity","expr":" 29 + 0","value":{"int64Value":"29"}},"ast":"_+_(\n 29^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 29~int,\n 0~int\n)~int^add_int64","type":"int"},{"original":{"name":"add_commutative","expr":"75 + 15 == 15 + 75","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 75^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 75^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 75~int,\n 15~int\n )~int^add_int64,\n _+_(\n 15~int,\n 75~int\n )~int^add_int64\n)~bool^equals","type":"bool"},{"original":{"name":"add_associative","expr":"5 + (15 + 20) == (5 + 15) + 20","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 5^#*expr.Constant_Int64Value#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 5~int,\n _+_(\n 15~int,\n 20~int\n )~int^add_int64\n )~int^add_int64,\n _+_(\n _+_(\n 5~int,\n 15~int\n )~int^add_int64,\n 20~int\n )~int^add_int64\n)~bool^equals","type":"bool"},{"original":{"name":"mul_left_identity","expr":"1 * 45","value":{"int64Value":"45"}},"ast":"_*_(\n 1^#*expr.Constant_Int64Value#,\n 45^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 1~int,\n 45~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"mul_right_identity","expr":"-25 * 1","value":{"int64Value":"-25"}},"ast":"_*_(\n -25^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -25~int,\n 1~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"mul_commutative","expr":"15 * 25 == 25 * 15","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 15~int,\n 25~int\n )~int^multiply_int64,\n _*_(\n 25~int,\n 15~int\n )~int^multiply_int64\n)~bool^equals","type":"bool"},{"original":{"name":"mul_associative","expr":"15 * (23 * 88) == (15 * 23) * 88","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n _*_(\n 23^#*expr.Constant_Int64Value#,\n 88^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n 23^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 88^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 15~int,\n _*_(\n 23~int,\n 88~int\n )~int^multiply_int64\n )~int^multiply_int64,\n _*_(\n _*_(\n 15~int,\n 23~int\n )~int^multiply_int64,\n 88~int\n )~int^multiply_int64\n)~bool^equals","type":"bool"},{"original":{"name":"add_mul_distribute","expr":"5 * (15 + 25) == 5 * 15 + 5 * 25","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 5^#*expr.Constant_Int64Value#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 5~int,\n _+_(\n 15~int,\n 25~int\n )~int^add_int64\n )~int^multiply_int64,\n _+_(\n _*_(\n 5~int,\n 15~int\n )~int^multiply_int64,\n _*_(\n 5~int,\n 25~int\n )~int^multiply_int64\n )~int^add_int64\n)~bool^equals","type":"bool"},{"original":{"name":"int64_overflow_positive","description":"LLONG_MAX plus one.","expr":"9223372036854775807 + 1","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_+_(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 9223372036854775807~int,\n 1~int\n)~int^add_int64","type":"int"},{"original":{"name":"int64_overflow_negative","description":"LLONG_MIN minus one.","expr":"-9223372036854775808 - 1","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_-_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n -9223372036854775808~int,\n 1~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"int64_overflow_add_negative","description":"negative overflow via addition","expr":"-9223372036854775808 + (-1)","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_+_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n -9223372036854775808~int,\n -1~int\n)~int^add_int64","type":"int"},{"original":{"name":"int64_overflow_sub_positive","description":"positive overflow via subtraction","expr":"1 - (-9223372036854775807)","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_-_(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 1~int,\n -9223372036854775807~int\n)~int^subtract_int64","type":"int"},{"original":{"name":"int64_min_negate","description":"Negated LLONG_MIN is not representable.","expr":"-(-9223372036854775808)","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"-_(\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"-_(\n -9223372036854775808~int\n)~int^negate_int64","type":"int"},{"original":{"name":"int64_min_negate_mul","description":"Negate LLONG_MIN via multiplication","expr":"(-9223372036854775808) * -1","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_*_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -9223372036854775808~int,\n -1~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"int64_min_negate_div","description":"Negate LLONG_MIN via division.","expr":"(-9223372036854775808)/-1","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_/_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n -9223372036854775808~int,\n -1~int\n)~int^divide_int64","type":"int"},{"original":{"name":"int64_overflow_mul_positive","description":"Overflow via multiplication.","expr":"5000000000 * 5000000000","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_*_(\n 5000000000^#*expr.Constant_Int64Value#,\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 5000000000~int,\n 5000000000~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"int64_overflow_mul_negative","description":"Overflow via multiplication.","expr":"(-5000000000) * 5000000000","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_*_(\n -5000000000^#*expr.Constant_Int64Value#,\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n -5000000000~int,\n 5000000000~int\n)~int^multiply_int64","type":"int"},{"original":{"name":"uint64_overflow_positive","description":"ULLONG_MAX plus one.","expr":"18446744073709551615u + 1u","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_+_(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^add_uint64","type":"uint"},{"original":{"name":"uint64_overflow_negative","description":"zero minus one.","expr":"0u - 1u","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_-_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 0u~uint,\n 1u~uint\n)~uint^subtract_uint64","type":"uint"},{"original":{"name":"uint64_overflow_mul_positive","description":"Overflow via multiplication.","expr":"5000000000u * 5000000000u","evalError":{"errors":[{"message":"return error for overflow"}]}},"ast":"_*_(\n 5000000000u^#*expr.Constant_Uint64Value#,\n 5000000000u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 5000000000u~uint,\n 5000000000u~uint\n)~uint^multiply_uint64","type":"uint"}]},{"name":"uint64_math","tests":[{"original":{"name":"add","expr":"42u + 2u","value":{"uint64Value":"44"}},"ast":"_+_(\n 42u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 42u~uint,\n 2u~uint\n)~uint^add_uint64","type":"uint"},{"original":{"name":"sub","expr":"42u - 12u","value":{"uint64Value":"30"}},"ast":"_-_(\n 42u^#*expr.Constant_Uint64Value#,\n 12u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n 42u~uint,\n 12u~uint\n)~uint^subtract_uint64","type":"uint"},{"original":{"name":"multiply","expr":"40u * 2u","value":{"uint64Value":"80"}},"ast":"_*_(\n 40u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 40u~uint,\n 2u~uint\n)~uint^multiply_uint64","type":"uint"},{"original":{"name":"divide","expr":"60u / 2u","value":{"uint64Value":"30"}},"ast":"_/_(\n 60u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 60u~uint,\n 2u~uint\n)~uint^divide_uint64","type":"uint"},{"original":{"name":"mod","expr":"42u % 5u","value":{"uint64Value":"2"}},"ast":"_%_(\n 42u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 42u~uint,\n 5u~uint\n)~uint^modulo_uint64","type":"uint"},{"original":{"name":"negative_no_overload","expr":"-(5u)","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"-_(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(uint)'\n | -(5u)\n | ^"},{"original":{"name":"mod_zero","expr":"34u % 0u","evalError":{"errors":[{"message":"modulus by zero"}]}},"ast":"_%_(\n 34u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_%_(\n 34u~uint,\n 0u~uint\n)~uint^modulo_uint64","type":"uint"},{"original":{"name":"divide_zero","expr":"15u / 0u","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"_/_(\n 15u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 15u~uint,\n 0u~uint\n)~uint^divide_uint64","type":"uint"},{"original":{"name":"multiply_zero","expr":"15u * 0u","value":{"uint64Value":"0"}},"ast":"_*_(\n 15u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 15u~uint,\n 0u~uint\n)~uint^multiply_uint64","type":"uint"},{"original":{"name":"add_left_identity","expr":"0u + 17u","value":{"uint64Value":"17"}},"ast":"_+_(\n 0u^#*expr.Constant_Uint64Value#,\n 17u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 0u~uint,\n 17u~uint\n)~uint^add_uint64","type":"uint"},{"original":{"name":"add_right_identity","expr":" 29u + 0u","value":{"uint64Value":"29"}},"ast":"_+_(\n 29u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n 29u~uint,\n 0u~uint\n)~uint^add_uint64","type":"uint"},{"original":{"name":"add_commutative","expr":"75u + 15u == 15u + 75u","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 75u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 75u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 75u~uint,\n 15u~uint\n )~uint^add_uint64,\n _+_(\n 15u~uint,\n 75u~uint\n )~uint^add_uint64\n)~bool^equals","type":"bool"},{"original":{"name":"add_associative","expr":"5u + (15u + 20u) == (5u + 15u) + 20u","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n 5u^#*expr.Constant_Uint64Value#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 20u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 20u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n 5u~uint,\n _+_(\n 15u~uint,\n 20u~uint\n )~uint^add_uint64\n )~uint^add_uint64,\n _+_(\n _+_(\n 5u~uint,\n 15u~uint\n )~uint^add_uint64,\n 20u~uint\n )~uint^add_uint64\n)~bool^equals","type":"bool"},{"original":{"name":"mul_left_identity","expr":"1u * 45u","value":{"uint64Value":"45"}},"ast":"_*_(\n 1u^#*expr.Constant_Uint64Value#,\n 45u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 1u~uint,\n 45u~uint\n)~uint^multiply_uint64","type":"uint"},{"original":{"name":"mul_right_identity","expr":"25u * 1u","value":{"uint64Value":"25"}},"ast":"_*_(\n 25u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_*_(\n 25u~uint,\n 1u~uint\n)~uint^multiply_uint64","type":"uint"},{"original":{"name":"mul_commutative","expr":"15u * 25u == 25u * 15u","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 15u~uint,\n 25u~uint\n )~uint^multiply_uint64,\n _*_(\n 25u~uint,\n 15u~uint\n )~uint^multiply_uint64\n)~bool^equals","type":"bool"},{"original":{"name":"mul_associative","expr":"15u * (23u * 88u) == (15u * 23u) * 88u","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n _*_(\n 23u^#*expr.Constant_Uint64Value#,\n 88u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n 23u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 88u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 15u~uint,\n _*_(\n 23u~uint,\n 88u~uint\n )~uint^multiply_uint64\n )~uint^multiply_uint64,\n _*_(\n _*_(\n 15u~uint,\n 23u~uint\n )~uint^multiply_uint64,\n 88u~uint\n )~uint^multiply_uint64\n)~bool^equals","type":"bool"},{"original":{"name":"add_mul_distribute","expr":"5u * (15u + 25u) == 5u * 15u + 5u * 25u","value":{"boolValue":true}},"ast":"_==_(\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _*_(\n 5u~uint,\n _+_(\n 15u~uint,\n 25u~uint\n )~uint^add_uint64\n )~uint^multiply_uint64,\n _+_(\n _*_(\n 5u~uint,\n 15u~uint\n )~uint^multiply_uint64,\n _*_(\n 5u~uint,\n 25u~uint\n )~uint^multiply_uint64\n )~uint^add_uint64\n)~bool^equals","type":"bool"}]}]},{"name":"lists","suites":[{"name":"concatenation","tests":[{"original":{"name":"list_append","expr":"[0, 1, 2] + [3, 4, 5] == [0, 1, 2, 3, 4, 5]","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n [\n 0~int,\n 1~int,\n 2~int\n ]~list(int),\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n )~list(int)^add_list,\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"list_not_commutative","expr":"[0, 1, 2] + [3, 4, 5] == [3, 4, 5, 0, 1, 2]","value":{"boolValue":false}},"ast":"_==_(\n _+_(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n [\n 0~int,\n 1~int,\n 2~int\n ]~list(int),\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n )~list(int)^add_list,\n [\n 3~int,\n 4~int,\n 5~int,\n 0~int,\n 1~int,\n 2~int\n ]~list(int)\n)~bool^equals","type":"bool"},{"original":{"name":"list_repeat","expr":"[2] + [2]","value":{"listValue":{"values":[{"int64Value":"2"},{"int64Value":"2"}]}}},"ast":"_+_(\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n [\n 2~int\n ]~list(int),\n [\n 2~int\n ]~list(int)\n)~list(int)^add_list","type":"list(int)"},{"original":{"name":"empty_empty","expr":"[] + []","value":{"listValue":{}}},"ast":"_+_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n []~list(dyn),\n []~list(dyn)\n)~list(dyn)^add_list","type":"list(dyn)"},{"original":{"name":"left_unit","expr":"[] + [3, 4]","value":{"listValue":{"values":[{"int64Value":"3"},{"int64Value":"4"}]}}},"ast":"_+_(\n []^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n []~list(int),\n [\n 3~int,\n 4~int\n ]~list(int)\n)~list(int)^add_list","type":"list(int)"},{"original":{"name":"right_unit","expr":"[1, 2] + []","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"}]}}},"ast":"_+_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n [\n 1~int,\n 2~int\n ]~list(int),\n []~list(int)\n)~list(int)^add_list","type":"list(int)"}]},{"name":"index","tests":[{"original":{"name":"zero_based","expr":"[7, 8, 9][0]","value":{"int64Value":"7"}},"ast":"_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n 0~int\n)~int^index_list","type":"int"},{"original":{"name":"zero_based_double","expr":"[7, 8, 9][dyn(0.0)]","value":{"int64Value":"7"}},"ast":"_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0~double\n )~dyn^to_dyn\n)~int^index_list","type":"int"},{"original":{"name":"zero_based_double_error","expr":"[7, 8, 9][dyn(0.1)]","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0.1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0.1~double\n )~dyn^to_dyn\n)~int^index_list","type":"int"},{"original":{"name":"zero_based_uint","expr":"[7, 8, 9][dyn(0u)]","value":{"int64Value":"7"}},"ast":"_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0u~uint\n )~dyn^to_dyn\n)~int^index_list","type":"int"},{"original":{"name":"singleton","expr":"['foo'][0]","value":{"stringValue":"foo"}},"ast":"_[_](\n [\n \"foo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n \"foo\"~string\n ]~list(string),\n 0~int\n)~string^index_list","type":"string"},{"original":{"name":"middle","expr":"[0, 1, 1, 2, 3, 5, 8, 13][4]","value":{"int64Value":"3"}},"ast":"_[_](\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 13^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 0~int,\n 1~int,\n 1~int,\n 2~int,\n 3~int,\n 5~int,\n 8~int,\n 13~int\n ]~list(int),\n 4~int\n)~int^index_list","type":"int"},{"original":{"name":"last","expr":"['George', 'John', 'Paul', 'Ringo'][3]","value":{"stringValue":"Ringo"}},"ast":"_[_](\n [\n \"George\"^#*expr.Constant_StringValue#,\n \"John\"^#*expr.Constant_StringValue#,\n \"Paul\"^#*expr.Constant_StringValue#,\n \"Ringo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n \"George\"~string,\n \"John\"~string,\n \"Paul\"~string,\n \"Ringo\"~string\n ]~list(string),\n 3~int\n)~string^index_list","type":"string"},{"original":{"name":"index_out_of_bounds","expr":"[1, 2, 3][3]","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n)~int^index_list","type":"int"},{"original":{"name":"index_out_of_bounds_or_false","expr":"dyn([1, 2, 3][3]) || false","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"index_out_of_bounds_or_true","expr":"dyn([1, 2, 3][3]) || true","value":{"boolValue":true}},"ast":"_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"index_out_of_bounds_and_false","expr":"dyn([1, 2, 3][3]) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"index_out_of_bounds_and_true","expr":"dyn([1, 2, 3][3]) \u0026\u0026 true","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"bad_index_type","expr":"[1, 2, 3][dyn('')]","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n)~int^index_list","type":"int"},{"original":{"name":"bad_index_type_or_false","expr":"dyn([1, 2, 3][dyn('')]) || false","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"bad_index_type_or_true","expr":"dyn([1, 2, 3][dyn('')]) || true","value":{"boolValue":true}},"ast":"_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"bad_index_type_and_false","expr":"dyn([1, 2, 3][dyn('')]) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"bad_index_type_and_true","expr":"dyn([1, 2, 3][dyn('')]) \u0026\u0026 true","evalError":{"errors":[{"message":"invalid_argument"}]}},"ast":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n \"\"~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and","type":"bool"}]},{"name":"in","tests":[{"original":{"name":"empty","expr":"7 in []","value":{"boolValue":false}},"ast":"@in(\n 7^#*expr.Constant_Int64Value#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 7~int,\n []~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"singleton","expr":"4u in [4u]","value":{"boolValue":true}},"ast":"@in(\n 4u^#*expr.Constant_Uint64Value#,\n [\n 4u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 4u~uint,\n [\n 4u~uint\n ]~list(uint)\n)~bool^in_list","type":"bool"},{"original":{"name":"first","expr":"'alpha' in ['alpha', 'beta', 'gamma']","value":{"boolValue":true}},"ast":"@in(\n \"alpha\"^#*expr.Constant_StringValue#,\n [\n \"alpha\"^#*expr.Constant_StringValue#,\n \"beta\"^#*expr.Constant_StringValue#,\n \"gamma\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"alpha\"~string,\n [\n \"alpha\"~string,\n \"beta\"~string,\n \"gamma\"~string\n ]~list(string)\n)~bool^in_list","type":"bool"},{"original":{"name":"middle","expr":"3 in [5, 4, 3, 2, 1]","value":{"boolValue":true}},"ast":"@in(\n 3^#*expr.Constant_Int64Value#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 3~int,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"last","expr":"20u in [4u, 6u, 8u, 12u, 20u]","value":{"boolValue":true}},"ast":"@in(\n 20u^#*expr.Constant_Uint64Value#,\n [\n 4u^#*expr.Constant_Uint64Value#,\n 6u^#*expr.Constant_Uint64Value#,\n 8u^#*expr.Constant_Uint64Value#,\n 12u^#*expr.Constant_Uint64Value#,\n 20u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n 20u~uint,\n [\n 4u~uint,\n 6u~uint,\n 8u~uint,\n 12u~uint,\n 20u~uint\n ]~list(uint)\n)~bool^in_list","type":"bool"},{"original":{"name":"double_in_ints","expr":"dyn(3.0) in [5, 4, 3, 2, 1]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3~double\n )~dyn^to_dyn,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"uint_in_ints","expr":"dyn(3u) in [5, 4, 3, 2, 1]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list","type":"bool"},{"original":{"name":"int_in_doubles","expr":"dyn(3) in [5.0, 4.0, 3.0, 2.0, 1.0]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_DoubleValue#,\n 4^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3~int\n )~dyn^to_dyn,\n [\n 5~double,\n 4~double,\n 3~double,\n 2~double,\n 1~double\n ]~list(double)\n)~bool^in_list","type":"bool"},{"original":{"name":"uint_in_doubles","expr":"dyn(3u) in [5.0, 4.0, 3.0, 2.0, 1.0]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_DoubleValue#,\n 4^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n [\n 5~double,\n 4~double,\n 3~double,\n 2~double,\n 1~double\n ]~list(double)\n)~bool^in_list","type":"bool"},{"original":{"name":"int_in_uints","expr":"dyn(3) in [5u, 4u, 3u, 2u, 1u]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3~int\n )~dyn^to_dyn,\n [\n 5u~uint,\n 4u~uint,\n 3u~uint,\n 2u~uint,\n 1u~uint\n ]~list(uint)\n)~bool^in_list","type":"bool"},{"original":{"name":"double_in_uints","expr":"dyn(3.0) in [5u, 4u, 3u, 2u, 1u]","value":{"boolValue":true}},"ast":"@in(\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n [\n 5u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n dyn(\n 3~double\n )~dyn^to_dyn,\n [\n 5u~uint,\n 4u~uint,\n 3u~uint,\n 2u~uint,\n 1u~uint\n ]~list(uint)\n)~bool^in_list","type":"bool"},{"original":{"name":"missing","expr":"'hawaiian' in ['meat', 'veggie', 'margarita', 'cheese']","value":{"boolValue":false}},"ast":"@in(\n \"hawaiian\"^#*expr.Constant_StringValue#,\n [\n \"meat\"^#*expr.Constant_StringValue#,\n \"veggie\"^#*expr.Constant_StringValue#,\n \"margarita\"^#*expr.Constant_StringValue#,\n \"cheese\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"@in(\n \"hawaiian\"~string,\n [\n \"meat\"~string,\n \"veggie\"~string,\n \"margarita\"~string,\n \"cheese\"~string\n ]~list(string)\n)~bool^in_list","type":"bool"}]},{"name":"size","tests":[{"original":{"name":"list_empty","expr":"size([])","value":{"int64Value":"0"}},"ast":"size(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n []~list(dyn)\n)~int^size_list","type":"int"},{"original":{"name":"list","expr":"size([1, 2, 3])","value":{"int64Value":"3"}},"ast":"size(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~int^size_list","type":"int"},{"original":{"name":"map_empty","expr":"size({})","value":{"int64Value":"0"}},"ast":"size(\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n {}~map(dyn, dyn)\n)~int^size_map","type":"int"},{"original":{"name":"map","expr":"size({1: 'one', 2: 'two', 3: 'three'})","value":{"int64Value":"3"}},"ast":"size(\n {\n 1^#*expr.Constant_Int64Value#:\"one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:\"two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:\"three\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n {\n 1~int:\"one\"~string,\n 2~int:\"two\"~string,\n 3~int:\"three\"~string\n }~map(int, string)\n)~int^size_map","type":"int"}]}]},{"name":"logic","suites":[{"name":"conditional","tests":[{"original":{"name":"true_case","expr":"true ? 1 : 2","value":{"int64Value":"1"}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n true~bool,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"false_case","expr":"false ? 'foo' : 'bar'","value":{"stringValue":"bar"}},"ast":"_?_:_(\n false^#*expr.Constant_BoolValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n \"bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n false~bool,\n \"foo\"~string,\n \"bar\"~string\n)~string^conditional","type":"string"},{"original":{"name":"error_case","expr":"2 / 0 \u003e 4 ? 'baz' : 'quux'","evalError":{"errors":[{"message":"division by zero"}]}},"ast":"_?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"baz\"^#*expr.Constant_StringValue#,\n \"quux\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 4~int\n )~bool^greater_int64,\n \"baz\"~string,\n \"quux\"~string\n)~string^conditional","type":"string"},{"original":{"name":"mixed_type","expr":"true ? 'cows' : 17","disableCheck":true,"value":{"stringValue":"cows"}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n \"cows\"^#*expr.Constant_StringValue#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:6: found no matching overload for '_?_:_' applied to '(bool, string, int)'\n | true ? 'cows' : 17\n | .....^"},{"original":{"name":"bad_type","expr":"'cows' ? false : 17","disableCheck":true,"evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_?_:_(\n \"cows\"^#*expr.Constant_StringValue#,\n false^#*expr.Constant_BoolValue#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:8: found no matching overload for '_?_:_' applied to '(string, bool, int)'\n | 'cows' ? false : 17\n | .......^"}]},{"name":"AND","tests":[{"original":{"name":"all_true","expr":"true \u0026\u0026 true","value":{"boolValue":true}},"ast":"_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n true~bool,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"all_false","expr":"false \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n false~bool,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"false_left","expr":"false \u0026\u0026 true","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n false~bool,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"false_right","expr":"true \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n true~bool,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"short_circuit_type_left","expr":"false \u0026\u0026 32","disableCheck":true,"value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n 32^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: expected type 'bool' but found 'int'\n | false \u0026\u0026 32\n | .........^"},{"original":{"name":"short_circuit_type_right","expr":"'horses' \u0026\u0026 false","disableCheck":true,"value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n \"horses\"^#*expr.Constant_StringValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'horses' \u0026\u0026 false\n | ^"},{"original":{"name":"short_circuit_error_left","expr":"false \u0026\u0026 (2 / 0 \u003e 3 ? false : true)","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n false~bool,\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional\n)~bool^logical_and","type":"bool"},{"original":{"name":"short_circuit_error_right","expr":"(2 / 0 \u003e 3 ? false : true) \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional,\n false~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"error_right","expr":"true \u0026\u0026 1/0 != 0","evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n true~bool,\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals\n)~bool^logical_and","type":"bool"},{"original":{"name":"error_left","expr":"1/0 != 0 \u0026\u0026 true","evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_\u0026\u0026_(\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals,\n true~bool\n)~bool^logical_and","type":"bool"},{"original":{"name":"no_overload","expr":"'less filling' \u0026\u0026 'tastes great'","disableCheck":true,"evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_\u0026\u0026_(\n \"less filling\"^#*expr.Constant_StringValue#,\n \"tastes great\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'less filling' \u0026\u0026 'tastes great'\n | ^\nERROR: \u003cinput\u003e:1:19: expected type 'bool' but found 'string'\n | 'less filling' \u0026\u0026 'tastes great'\n | ..................^"}]},{"name":"OR","tests":[{"original":{"name":"all_true","expr":"true || true","value":{"boolValue":true}},"ast":"_||_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n true~bool,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"all_false","expr":"false || false","value":{"boolValue":false}},"ast":"_||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n false~bool,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"false_left","expr":"false || true","value":{"boolValue":true}},"ast":"_||_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n false~bool,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"false_right","expr":"true || false","value":{"boolValue":true}},"ast":"_||_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n true~bool,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"short_circuit_type_left","expr":"true || 32","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n true^#*expr.Constant_BoolValue#,\n 32^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: expected type 'bool' but found 'int'\n | true || 32\n | ........^"},{"original":{"name":"short_circuit_type_right","expr":"'horses' || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n \"horses\"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'horses' || true\n | ^"},{"original":{"name":"short_circuit_error_left","expr":"true || (2 / 0 \u003e 3 ? false : true)","value":{"boolValue":true}},"ast":"_||_(\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n true~bool,\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional\n)~bool^logical_or","type":"bool"},{"original":{"name":"short_circuit_error_right","expr":"(2 / 0 \u003e 3 ? false : true) || true","value":{"boolValue":true}},"ast":"_||_(\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional,\n true~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"error_right","expr":"false || 1/0 != 0","evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_||_(\n false^#*expr.Constant_BoolValue#,\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n false~bool,\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals\n)~bool^logical_or","type":"bool"},{"original":{"name":"error_left","expr":"1/0 != 0 || false","evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_||_(\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals,\n false~bool\n)~bool^logical_or","type":"bool"},{"original":{"name":"no_overload","expr":"'less filling' || 'tastes great'","disableCheck":true,"evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"_||_(\n \"less filling\"^#*expr.Constant_StringValue#,\n \"tastes great\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'less filling' || 'tastes great'\n | ^\nERROR: \u003cinput\u003e:1:19: expected type 'bool' but found 'string'\n | 'less filling' || 'tastes great'\n | ..................^"}]},{"name":"NOT","tests":[{"original":{"name":"not_true","expr":"!true","value":{"boolValue":false}},"ast":"!_(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n true~bool\n)~bool^logical_not","type":"bool"},{"original":{"name":"not_false","expr":"!false","value":{"boolValue":true}},"ast":"!_(\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n false~bool\n)~bool^logical_not","type":"bool"},{"original":{"name":"no_overload","expr":"!0","disableCheck":true,"evalError":{"errors":[{"message":"no matching overload"}]}},"ast":"!_(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: found no matching overload for '!_' applied to '(int)'\n | !0\n | ^"}]}]},{"name":"macros","suites":[{"name":"exists","tests":[{"original":{"name":"list_elem_all_true","expr":"[1, 2, 3].exists(e, e \u003e 0)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_some_true","expr":"[1, 2, 3].exists(e, e == 2)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_none_true","expr":"[1, 2, 3].exists(e, e \u003e 3)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 3~int\n )~bool^greater_int64\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_type_shortcircuit","description":"Exists filter is true for the last element.","expr":"[1, 'foo', 3].exists(e, e != '1')","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n e^#*expr.Expr_IdentExpr#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n \"foo\"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _!=_(\n e~dyn^e,\n \"1\"~string\n )~bool^not_equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_type_exhaustive","description":"Exists filter is never true, but heterogenous equality ensure the result is false.","expr":"[1, 'foo', 3].exists(e, e == '10')","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n \"10\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n \"foo\"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~dyn^e,\n \"10\"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_exists_error","expr":"[1, 2, 3].exists(e, e / 0 == 17)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n _/_(\n e~int^e,\n 0~int\n )~int^divide_int64,\n 17~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_empty","expr":"[].exists(e, e == 2)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"map_key","expr":"{'key1':1, 'key2':2}.exists(k, k == 'key2')","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"~string:1~int,\n \"key2\"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~string^k,\n \"key2\"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"not_map_key","expr":"!{'key1':1, 'key2':2}.exists(k, k == 'key3')","value":{"boolValue":true}},"ast":"!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key3\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"~string:1~int,\n \"key2\"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~string^k,\n \"key3\"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n)~bool^logical_not","type":"bool"},{"original":{"name":"map_key_type_shortcircuit","description":"Exists filter is true for the second key","expr":"{'key':1, 1:21}.exists(k, k != 2)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:21^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key\"~string:1~int,\n 1~int:21~int\n }~map(dyn, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _!=_(\n k~dyn^k,\n 2~int\n )~bool^not_equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"map_key_type_exhaustive","description":"Exists filter is never true, but heterogeneous equality ensures the result is false.","expr":"!{'key':1, 1:42}.exists(k, k == 2)","value":{"boolValue":true}},"ast":"!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n \"key\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n \"key\"~string:1~int,\n 1~int:42~int\n }~map(dyn, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~dyn^k,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n)~bool^logical_not","type":"bool"}]},{"name":"all","tests":[{"original":{"name":"list_elem_all_true","expr":"[1, 2, 3].all(e, e \u003e 0)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_some_true","expr":"[1, 2, 3].all(e, e == 2)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_none_true","expr":"[1, 2, 3].all(e, e == 17)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 17~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_type_shortcircuit","expr":"[1, 'foo', 3].all(e, e == 1)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n \"foo\"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~dyn^e,\n 1~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_type_exhaustive","expr":"[1, 'foo', 3].all(e, e % 2 == 1)","evalError":{"errors":[{"message":"no_such_overload"}]}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n \"foo\"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n _%_(\n e~dyn^e,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_error_shortcircuit","expr":"[1, 2, 3].all(e, 6 / (2 - e) == 6)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n 6^#*expr.Constant_Int64Value#,\n _-_(\n 2^#*expr.Constant_Int64Value#,\n e^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n _/_(\n 6~int,\n _-_(\n 2~int,\n e~int^e\n )~int^subtract_int64\n )~int^divide_int64,\n 6~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_elem_error_exhaustive","expr":"[1, 2, 3].all(e, e / 0 != 17)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n _/_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _!=_(\n _/_(\n e~int^e,\n 0~int\n )~int^divide_int64,\n 17~int\n )~bool^not_equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"list_empty","expr":"[].all(e, e \u003e 0)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"},{"original":{"name":"map_key","expr":"{'key1':1, 'key2':2}.all(k, k == 'key2')","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n k,\n // Target\n {\n \"key1\"~string:1~int,\n \"key2\"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n k~string^k,\n \"key2\"~string\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"}]},{"name":"exists_one","tests":[{"original":{"name":"list_empty","expr":"[].exists_one(a, a == 7)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n a,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n a,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_one_true","expr":"[7].exists_one(a, a == 7)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n a,\n // Target\n [\n 7^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n a,\n // Target\n [\n 7~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_one_false","expr":"[8].exists_one(a, a == 7)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n a,\n // Target\n [\n 8^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n a,\n // Target\n [\n 8~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_none","expr":"[1, 2, 3].exists_one(x, x \u003e 20)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n x,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n x^#*expr.Expr_IdentExpr#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n x,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n x~int^x,\n 20~int\n )~bool^greater_int64,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_one","expr":"[6, 7, 8].exists_one(foo, foo % 5 == 2)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n foo,\n // Target\n [\n 6^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n foo,\n // Target\n [\n 6~int,\n 7~int,\n 8~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo~int^foo,\n 5~int\n )~int^modulo_int64,\n 2~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_many","expr":"[0, 1, 2, 3, 4].exists_one(n, n % 2 == 1)","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n~int^n,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_all","expr":"['foal', 'foo', 'four'].exists_one(n, n.startsWith('fo'))","value":{"boolValue":false}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n \"foal\"^#*expr.Constant_StringValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n \"four\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n n^#*expr.Expr_IdentExpr#.startsWith(\n \"fo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n \"foal\"~string,\n \"foo\"~string,\n \"four\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n n~string^n.startsWith(\n \"fo\"~string\n )~bool^starts_with_string,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"list_no_shortcircuit","description":"Errors invalidate everything, even if already false.","expr":"[3, 2, 1, 0].exists_one(n, 12 / n \u003e 1)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int,\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12~int,\n n~int^n\n )~int^divide_int64,\n 1~int\n )~bool^greater_int64,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"},{"original":{"name":"map_one","expr":"{6: 'six', 7: 'seven', 8: 'eight'}.exists_one(foo, foo % 5 == 2)","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n foo,\n // Target\n {\n 6^#*expr.Constant_Int64Value#:\"six\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:\"seven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:\"eight\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n foo,\n // Target\n {\n 6~int:\"six\"~string,\n 7~int:\"seven\"~string,\n 8~int:\"eight\"~string\n }~map(int, string),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo~int^foo,\n 5~int\n )~int^modulo_int64,\n 2~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool","type":"bool"}]},{"name":"map","tests":[{"original":{"name":"list_empty","expr":"[].map(n, n / 2)","value":{"listValue":{}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n n~int^n,\n 2~int\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_one","expr":"[3].map(n, n * n)","value":{"listValue":{"values":[{"int64Value":"9"}]}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _*_(\n n^#*expr.Expr_IdentExpr#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _*_(\n n~int^n,\n n~int^n\n )~int^multiply_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_many","expr":"[2, 4, 6].map(n, n / 2)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"}]}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int,\n 4~int,\n 6~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n n~int^n,\n 2~int\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_error","expr":"[2, 1, 0].map(n, 4 / n)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n 4^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n 4~int,\n n~int^n\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"map_extract_keys","expr":"{'John': 'smart'}.map(key, key) == ['John']","value":{"boolValue":true}},"ast":"_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n \"John\"^#*expr.Constant_StringValue#:\"smart\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n key^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n [\n \"John\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n \"John\"~string:\"smart\"~string\n }~map(string, string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(string)^@result,\n [\n key~string^key\n ]~list(string)\n )~list(string)^add_list,\n // Result\n @result~list(string)^@result)~list(string),\n [\n \"John\"~string\n ]~list(string)\n)~bool^equals","type":"bool"}]},{"name":"filter","tests":[{"original":{"name":"list_empty","expr":"[].filter(n, n % 2 == 0)","value":{"listValue":{}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n~int^n,\n 2~int\n )~int^modulo_int64,\n 0~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_one_true","expr":"[2].filter(n, n == 2)","value":{"listValue":{"values":[{"int64Value":"2"}]}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n n~int^n,\n 2~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_one_false","expr":"[1].filter(n, n \u003e 3)","value":{"listValue":{}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n n^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 1~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n n~int^n,\n 3~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_none","expr":"[1, 2, 3].filter(e, e \u003e 3)","value":{"listValue":{}}},"ast":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n e^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n e~int^e,\n 3~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n e~int^e\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_some","expr":"[0, 1, 2, 3, 4].filter(x, x % 2 == 1)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"3"}]}}},"ast":"__comprehension__(\n // Variable\n x,\n // Target\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n x^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n x,\n // Target\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n x~int^x,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n x~int^x\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_all","expr":"[1, 2, 3].filter(n, n \u003e 0)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"2"},{"int64Value":"3"}]}}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n n^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n n~int^n,\n 0~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"list_no_shortcircuit","expr":"[3, 2, 1, 0].filter(n, 12 / n \u003e 4)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int,\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12~int,\n n~int^n\n )~int^divide_int64,\n 4~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"map_filter_keys","expr":"{'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}.filter(key, key == 'Ringo') == ['Ringo']","value":{"boolValue":true}},"ast":"_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n \"John\"^#*expr.Constant_StringValue#:\"smart\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"Paul\"^#*expr.Constant_StringValue#:\"cute\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"George\"^#*expr.Constant_StringValue#:\"quiet\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"Ringo\"^#*expr.Constant_StringValue#:\"funny\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n key^#*expr.Expr_IdentExpr#,\n \"Ringo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n key^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n [\n \"Ringo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n \"John\"~string:\"smart\"~string,\n \"Paul\"~string:\"cute\"~string,\n \"George\"~string:\"quiet\"~string,\n \"Ringo\"~string:\"funny\"~string\n }~map(string, string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n key~string^key,\n \"Ringo\"~string\n )~bool^equals,\n _+_(\n @result~list(string)^@result,\n [\n key~string^key\n ]~list(string)\n )~list(string)^add_list,\n @result~list(string)^@result\n )~list(string)^conditional,\n // Result\n @result~list(string)^@result)~list(string),\n [\n \"Ringo\"~string\n ]~list(string)\n)~bool^equals","type":"bool"}]},{"name":"nested","tests":[{"original":{"name":"filter_all","expr":"['signer'].filter(signer, ['artifact'].all(artifact, true))","value":{"listValue":{"values":[{"stringValue":"signer"}]}}},"ast":"__comprehension__(\n // Variable\n signer,\n // Target\n [\n \"signer\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n \"artifact\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n signer^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n signer,\n // Target\n [\n \"signer\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n \"artifact\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n true~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool,\n _+_(\n @result~list(string)^@result,\n [\n signer~string^signer\n ]~list(string)\n )~list(string)^add_list,\n @result~list(string)^@result\n )~list(string)^conditional,\n // Result\n @result~list(string)^@result)~list(string)","type":"list(string)"},{"original":{"name":"all_all","expr":"['signer'].all(signer, ['artifact'].all(artifact, true))","value":{"boolValue":true}},"ast":"__comprehension__(\n // Variable\n signer,\n // Target\n [\n \"signer\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n \"artifact\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n signer,\n // Target\n [\n \"signer\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n \"artifact\"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n true~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool","type":"bool"}]}]},{"name":"macros2","suites":[{"name":"exists","tests":[{"original":{"name":"list_elem_all_true","expr":"[1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)","value":{"boolValue":true}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .......................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................................^"},{"original":{"name":"list_elem_some_true","expr":"[1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)","value":{"boolValue":true}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .......................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .................................^"},{"original":{"name":"list_elem_none_true","expr":"[1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | .......................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ................................^"},{"original":{"name":"list_elem_type_shortcircuit","expr":"[1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')","value":{"boolValue":true}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:21: undeclared reference to 'exists' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ....................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ...........................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | .....................................^"},{"original":{"name":"list_elem_type_exhaustive","expr":"[1, 'foo', 3].exists(i, v, i == 3 || v == '10')","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n \"10\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:21: undeclared reference to 'exists' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ....................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ...........................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | .....................................^"},{"original":{"name":"list_elem_exists_error","expr":"[1, 2, 3].exists(i, v, v / i == 17)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ...........................^"},{"original":{"name":"list_empty","expr":"[].exists(i, v, i == 0 || v == 2)","value":{"boolValue":false}},"ast":"[]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: undeclared reference to 'exists' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | .........^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'i' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ..........^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'v' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | .............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'i' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ..........................^"},{"original":{"name":"map_key","expr":"{'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)","value":{"boolValue":true}},"ast":"{\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: undeclared reference to 'exists' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ..................................^\nERROR: \u003cinput\u003e:1:50: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | .................................................^"},{"original":{"name":"not_map_key","expr":"!{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)","value":{"boolValue":true}},"ast":"!_(\n {\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key3\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:29: undeclared reference to 'exists' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ............................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'k' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | .............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ................................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'k' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ...................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'v' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ..................................................^"},{"original":{"name":"map_key_type_shortcircuit","expr":"{'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)","value":{"boolValue":true}},"ast":"{\n \"key\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:21^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:23: undeclared reference to 'exists' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | ......................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'k' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'k' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .............................^\nERROR: \u003cinput\u003e:1:40: undeclared reference to 'v' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .......................................^"},{"original":{"name":"map_key_type_exhaustive","expr":"!{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)","value":{"boolValue":true}},"ast":"!_(\n {\n \"key\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 43^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'exists' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'k' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'k' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ..............................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'v' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ........................................^"}]},{"name":"all","tests":[{"original":{"name":"list_elem_all_true","expr":"[1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)","value":{"boolValue":true}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ..............................^"},{"original":{"name":"list_elem_some_true","expr":"[1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ..............................^"},{"original":{"name":"list_elem_none_true","expr":"[1, 2, 3].all(i, v, i == 3 || v == 4)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ..............................^"},{"original":{"name":"list_elem_type_shortcircuit","expr":"[1, 'foo', 3].all(i, v, i == 0 || v == 1)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ........................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ..................................^"},{"original":{"name":"list_elem_type_exhaustive","expr":"[0, 'foo', 3].all(i, v, v % 2 == i)","value":{"boolValue":false}},"ast":"[\n 0^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | ........................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .................................^"},{"original":{"name":"list_elem_type_error_exhaustive","expr":"[0, 'foo', 5].all(i, v, v % 3 == i)","evalError":{"errors":[{"message":"no_such_overload"}]}},"ast":"[\n 0^#*expr.Constant_Int64Value#,\n \"foo\"^#*expr.Constant_StringValue#,\n 5^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | ........................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .................................^"},{"original":{"name":"list_elem_error_shortcircuit","expr":"[1, 2, 3].all(i, v, 6 / (2 - v) == i)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n 6^#*expr.Constant_Int64Value#,\n _-_(\n 2^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .............................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | ...................................^"},{"original":{"name":"list_elem_error_exhaustive","expr":"[1, 2, 3].all(i, v, v / i != 17)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _!=_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ........................^"},{"original":{"name":"list_empty","expr":"[].all(i, v, i \u003e -1 || v \u003e 0)","value":{"boolValue":true}},"ast":"[]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:7: undeclared reference to 'all' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | ......^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'i' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .......^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'v' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | ..........^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'i' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .............^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .......................^"},{"original":{"name":"map_key","expr":"{'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)","value":{"boolValue":false}},"ast":"{\n \"key1\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.all(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"key2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:25: undeclared reference to 'all' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ........................^\nERROR: \u003cinput\u003e:1:26: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | .........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...............................^\nERROR: \u003cinput\u003e:1:47: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ..............................................^"}]},{"name":"existsOne","tests":[{"original":{"name":"list_empty","expr":"[].existsOne(i, v, i == 3 || v == 7)","value":{"boolValue":false}},"ast":"[]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: undeclared reference to 'existsOne' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ............^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'i' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'v' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'i' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ...................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | .............................^"},{"original":{"name":"list_one_true","expr":"[7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)","value":{"boolValue":true}},"ast":"[\n 7^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'existsOne' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............................^"},{"original":{"name":"list_one_false","expr":"[8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)","value":{"boolValue":false}},"ast":"[\n 8^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:14: undeclared reference to 'existsOne' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............................^"},{"original":{"name":"list_none","expr":"[1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)","value":{"boolValue":false}},"ast":"[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: undeclared reference to 'existsOne' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ...................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'i' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ..........................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'v' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ...................................^"},{"original":{"name":"list_one","expr":"[5, 7, 8].existsOne(i, v, v % 5 == i)","value":{"boolValue":true}},"ast":"[\n 5^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: undeclared reference to 'existsOne' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ...................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ..........................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'i' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ...................................^"},{"original":{"name":"list_many","expr":"[0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)","value":{"boolValue":false}},"ast":"[\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:26: undeclared reference to 'existsOne' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .........................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'i' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | ................................^\nERROR: \u003cinput\u003e:1:42: undeclared reference to 'i' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .........................................^"},{"original":{"name":"list_all","expr":"['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))","value":{"boolValue":false}},"ast":"[\n \"foal\"^#*expr.Constant_StringValue#,\n \"foo\"^#*expr.Constant_StringValue#,\n \"four\"^#*expr.Constant_StringValue#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#.startsWith(\n \"fo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:34: undeclared reference to 'existsOne' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | .................................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ..................................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | .....................................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'i' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ........................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'v' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ..................................................^"},{"original":{"name":"list_no_shortcircuit","expr":"[3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:23: undeclared reference to 'existsOne' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | ......................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .............................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .................................^"},{"original":{"name":"map_one","expr":"{6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')","value":{"boolValue":true}},"ast":"{\n 6^#*expr.Constant_Int64Value#:\"six\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:\"seven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:\"eight\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.existsOne(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n _%_(\n k^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n \"seven\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:45: undeclared reference to 'existsOne' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ............................................^\nERROR: \u003cinput\u003e:1:46: undeclared reference to 'k' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | .............................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ................................................^\nERROR: \u003cinput\u003e:1:52: undeclared reference to 'k' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ...................................................^\nERROR: \u003cinput\u003e:1:66: undeclared reference to 'v' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | .................................................................^"}]},{"name":"transformList","tests":[{"original":{"name":"empty","expr":"[].transformList(i, v, i / v)","value":{"listValue":{}}},"ast":"[]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'transformList' (in container '')\n | [].transformList(i, v, i / v)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i / v)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i / v)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i / v)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i / v)\n | ...........................^"},{"original":{"name":"empty_filter","expr":"[].transformList(i, v, i \u003e v, i / v)","value":{"listValue":{}}},"ast":"[]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n _/_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:17: undeclared reference to 'transformList' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ..................................^"},{"original":{"name":"one","expr":"[3].transformList(i, v, v * v + i)","value":{"listValue":{"values":[{"int64Value":"9"}]}}},"ast":"[\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n _*_(\n v^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'transformList' (in container '')\n | [3].transformList(i, v, v * v + i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ................................^"},{"original":{"name":"one_filter","expr":"[3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)","value":{"listValue":{"values":[{"int64Value":"9"}]}}},"ast":"[\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n v^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: undeclared reference to 'transformList' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ........................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................................^\nERROR: \u003cinput\u003e:1:43: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..........................................^\nERROR: \u003cinput\u003e:1:47: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..............................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................................................^"},{"original":{"name":"many","expr":"[2, 4, 6].transformList(i, v, v / 2 + i)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"3"},{"int64Value":"5"}]}}},"ast":"[\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ..............................^\nERROR: \u003cinput\u003e:1:39: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ......................................^"},{"original":{"name":"many_filter","expr":"[2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)","value":{"listValue":{"values":[{"int64Value":"1"},{"int64Value":"5"}]}}},"ast":"[\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ..............................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ................................................^\nERROR: \u003cinput\u003e:1:57: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................................................^"},{"original":{"name":"error","expr":"[2, 1, 0].transformList(i, v, v / i)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ..................................^"},{"original":{"name":"error_filter","expr":"[2, 1, 0].transformList(i, v, v / i \u003e 0, v)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"[\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ..................................^\nERROR: \u003cinput\u003e:1:42: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | .........................................^"}]},{"name":"transformMap","tests":[{"original":{"name":"empty","expr":"{}.transformMap(k, v, k + v)","value":{"mapValue":{}}},"ast":"{}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:16: undeclared reference to 'transformMap' (in container '')\n | {}.transformMap(k, v, k + v)\n | ...............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k + v)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k + v)\n | ...................^\nERROR: \u003cinput\u003e:1:23: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k + v)\n | ......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k + v)\n | ..........................^"},{"original":{"name":"empty_filter","expr":"{}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)","value":{"mapValue":{}}},"ast":"{}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"foo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n \"bar\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:16: undeclared reference to 'transformMap' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...................^\nERROR: \u003cinput\u003e:1:23: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ......................^\nERROR: \u003cinput\u003e:1:37: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ....................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................^\nERROR: \u003cinput\u003e:1:53: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ....................................................^"},{"original":{"name":"one","expr":"{'foo': 'bar'}.transformMap(k, v, k + v)","value":{"mapValue":{"entries":[{"key":{"stringValue":"foo"},"value":{"stringValue":"foobar"}}]}}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:\"bar\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ..................................^\nERROR: \u003cinput\u003e:1:39: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ......................................^"},{"original":{"name":"one_filter","expr":"{'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)","value":{"mapValue":{"entries":[{"key":{"stringValue":"foo"},"value":{"stringValue":"foobar"}}]}}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:\"bar\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"foo\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n \"bar\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ..................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:65: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................................^"},{"original":{"name":"many","expr":"{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)","value":{"mapValue":{"entries":[{"key":{"stringValue":"foo"},"value":{"stringValue":"foobar"}},{"key":{"stringValue":"baz"},"value":{"stringValue":"bazbux"}},{"key":{"stringValue":"hello"},"value":{"stringValue":"helloworld"}}]}}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:\"bar\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"baz\"^#*expr.Constant_StringValue#:\"bux\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"hello\"^#*expr.Constant_StringValue#:\"world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:60: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ...........................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:64: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ...............................................................^\nERROR: \u003cinput\u003e:1:67: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ..................................................................^\nERROR: \u003cinput\u003e:1:71: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ......................................................................^"},{"original":{"name":"many_filter","expr":"{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)","value":{"mapValue":{"entries":[{"key":{"stringValue":"foo"},"value":{"stringValue":"foobar"}},{"key":{"stringValue":"hello"},"value":{"stringValue":"helloworld"}}]}}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:\"bar\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"baz\"^#*expr.Constant_StringValue#:\"bux\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"hello\"^#*expr.Constant_StringValue#:\"world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n \"baz\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n \"bux\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:60: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ...........................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:64: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ...............................................................^\nERROR: \u003cinput\u003e:1:67: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ..................................................................^\nERROR: \u003cinput\u003e:1:81: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ................................................................................^\nERROR: \u003cinput\u003e:1:93: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ............................................................................................^\nERROR: \u003cinput\u003e:1:97: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ................................................................................................^"},{"original":{"name":"error","expr":"{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"bar\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"baz\"^#*expr.Constant_StringValue#:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n 4^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:44: undeclared reference to 'transformMap' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ...........................................^\nERROR: \u003cinput\u003e:1:45: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ............................................^\nERROR: \u003cinput\u003e:1:48: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ...............................................^\nERROR: \u003cinput\u003e:1:55: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ......................................................^"},{"original":{"name":"error_filter","expr":"{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)","evalError":{"errors":[{"message":"divide by zero"}]}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"bar\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"baz\"^#*expr.Constant_StringValue#:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n \"baz\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n _/_(\n 4^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:44: undeclared reference to 'transformMap' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ...........................................^\nERROR: \u003cinput\u003e:1:45: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ............................................^\nERROR: \u003cinput\u003e:1:48: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ...............................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ..................................................^\nERROR: \u003cinput\u003e:1:69: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ....................................................................^\nERROR: \u003cinput\u003e:1:77: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ............................................................................^"}]}]},{"name":"math_ext","suites":[{"name":"greatest_int_result","tests":[{"original":{"name":"unary_negative","expr":"math.greatest(-5)","value":{"int64Value":"-5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -5~int\n)~int^math_@max_int","type":"int"},{"original":{"name":"unary_positive","expr":"math.greatest(5)","value":{"int64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5~int\n)~int^math_@max_int","type":"int"},{"original":{"name":"binary_same_args","expr":"math.greatest(1, 1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~int,\n 1~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_with_decimal","expr":"math.greatest(1, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1~int,\n 1~double\n )~dyn^math_@max_int_double,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_uint","expr":"math.greatest(1, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1~int,\n 1u~uint\n )~dyn^math_@max_int_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_greater","expr":"math.greatest(3, -3)","value":{"int64Value":"3"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 3^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 3~int,\n -3~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_second_arg_greater","expr":"math.greatest(-7, 5)","value":{"int64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -7^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -7~int,\n 5~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_first_arg_int_max","expr":"math.greatest(9223372036854775807, 1)","value":{"int64Value":"9223372036854775807"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 9223372036854775807~int,\n 1~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_second_arg_int_max","expr":"math.greatest(1, 9223372036854775807)","value":{"int64Value":"9223372036854775807"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~int,\n 9223372036854775807~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_first_arg_int_min","expr":"math.greatest(-9223372036854775808, 1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -9223372036854775808~int,\n 1~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"binary_second_arg_int_min","expr":"math.greatest(1, -9223372036854775808)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~int,\n -9223372036854775808~int\n)~int^math_@max_int_int","type":"int"},{"original":{"name":"ternary_same_args","expr":"math.greatest(1, 1, 1) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~int,\n 1~int,\n 1~int\n ]~list(int)\n )~int^math_@max_list_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_decimal","expr":"math.greatest(1, 1.0, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~int,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_uint","expr":"math.greatest(1, 1u, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~int,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_greatest","expr":"math.greatest(10, 1, 3) == 10"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 10~int,\n 1~int,\n 3~int\n ]~list(int)\n )~int^math_@max_list_int,\n 10~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_greatest","expr":"math.greatest(1, 3, 10) == 10"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~int,\n 3~int,\n 10~int\n ]~list(int)\n )~int^math_@max_list_int,\n 10~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_negatives","expr":"math.greatest(-1, -2, -3) == -1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n -1~int,\n -2~int,\n -3~int\n ]~list(int)\n )~int^math_@max_list_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_max","expr":"math.greatest(9223372036854775807, 1, 5) == 9223372036854775807"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 9223372036854775807~int,\n 1~int,\n 5~int\n ]~list(int)\n )~int^math_@max_list_int,\n 9223372036854775807~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_min","expr":"math.greatest(-9223372036854775807, -1, -5) == -1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -9223372036854775807^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n -9223372036854775807~int,\n -1~int,\n -5~int\n ]~list(int)\n )~int^math_@max_list_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.greatest(5.4, 10, 3u, -5.0, 9223372036854775807) == 9223372036854775807"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 9223372036854775807~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 9223372036854775807~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.greatest([5.4, 10, 3u, -5.0, 3.5]) == 10"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.greatest([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10~int\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10~int\n)~bool^equals","type":"bool"}]},{"name":"greatest_double_result","tests":[{"original":{"name":"unary_negative","expr":"math.greatest(-5.0)","value":{"doubleValue":-5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -5~double\n)~double^math_@max_double","type":"double"},{"original":{"name":"unary_positive","expr":"math.greatest(5.0)","value":{"doubleValue":5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5~double\n)~double^math_@max_double","type":"double"},{"original":{"name":"binary_same_args","expr":"math.greatest(1.0, 1.0)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~double,\n 1~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"binary_with_int","expr":"math.greatest(1.0, 1) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1~double,\n 1~int\n )~dyn^math_@max_double_int,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_uint","expr":"math.greatest(1.0, 1u) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1~double,\n 1u~uint\n )~dyn^math_@max_double_uint,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_greater","expr":"math.greatest(5.0, -7.0)","value":{"doubleValue":5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_DoubleValue#,\n -7^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5~double,\n -7~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"binary_second_arg_greater","expr":"math.greatest(-3.0, 3.0)","value":{"doubleValue":3}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -3^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -3~double,\n 3~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"binary_first_arg_double_max","expr":"math.greatest(1.797693e308, 1)","value":{"doubleValue":1.797693e+308}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1.797693e+308~double,\n 1~int\n)~dyn^math_@max_double_int","type":"dyn"},{"original":{"name":"binary_second_arg_double_max","expr":"math.greatest(1, 1.797693e308)","value":{"doubleValue":1.797693e+308}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1~int,\n 1.797693e+308~double\n)~dyn^math_@max_int_double","type":"dyn"},{"original":{"name":"binary_first_arg_double_min","expr":"math.greatest(-1.797693e308, 1.5)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -1.797693e+308~double,\n 1.5~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"binary_second_arg_double_min","expr":"math.greatest(1.5, -1.797693e308)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1.5^#*expr.Constant_DoubleValue#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1.5~double,\n -1.797693e+308~double\n)~double^math_@max_double_double","type":"double"},{"original":{"name":"ternary_same_args","expr":"math.greatest(1.0, 1.0, 1.0) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~double,\n 1~double,\n 1~double\n ]~list(double)\n )~double^math_@max_list_double,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_int","expr":"math.greatest(1.0, 1, 1) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~double,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_uint","expr":"math.greatest(1.0, 1u, 1u) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1~double,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_greatest","expr":"math.greatest(10.5, 1.5, 3.5) == 10.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 10.5~double,\n 1.5~double,\n 3.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n 10.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_greatest","expr":"math.greatest(1.5, 3.5, 10.5) == 10.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1.5~double,\n 3.5~double,\n 10.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n 10.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_negatives","expr":"math.greatest(-1.5, -2.5, -3.5) == -1.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1.5^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#,\n -3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n -1.5~double,\n -2.5~double,\n -3.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n -1.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_double_max","expr":"math.greatest(1.797693e308, 1, 5) == 1.797693e308"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1.797693e+308~double,\n 1~int,\n 5~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1.797693e+308~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_double_min","expr":"math.greatest(-1.797693e308, -1, -5) == -1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n -1.797693e+308~double,\n -1~int,\n -5~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.greatest(5.4, 10, 3u, -5.0, 1.797693e308) == 1.797693e308"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 1.797693e+308~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1.797693e+308~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.greatest([5.4, 10.5, 3u, -5.0, 3.5]) == 10.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10.5~double,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.greatest([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10.5~double\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10.5~double\n)~bool^equals","type":"bool"}]},{"name":"greatest_uint_result","tests":[{"original":{"name":"unary","expr":"math.greatest(5u)","value":{"uint64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5u~uint\n)~uint^math_@max_uint","type":"uint"},{"original":{"name":"binary_same_args","expr":"math.greatest(1u, 1u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1u~uint,\n 1u~uint\n)~uint^math_@max_uint_uint","type":"uint"},{"original":{"name":"binary_with_decimal","expr":"math.greatest(1u, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1u~uint,\n 1~double\n )~dyn^math_@max_uint_double,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_int","expr":"math.greatest(1u, 1) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n 1u~uint,\n 1~int\n )~dyn^math_@max_uint_int,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_greater","expr":"math.greatest(5u, -7)","value":{"uint64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 5u^#*expr.Constant_Uint64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 5u~uint,\n -7~int\n)~dyn^math_@max_uint_int","type":"dyn"},{"original":{"name":"binary_second_arg_greater","expr":"math.greatest(-3, 3u)","value":{"uint64Value":"3"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n -3^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n -3~int,\n 3u~uint\n)~dyn^math_@max_int_uint","type":"dyn"},{"original":{"name":"binary_first_arg_uint_max","expr":"math.greatest(18446744073709551615u, 1u)","value":{"uint64Value":"18446744073709551615"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^math_@max_uint_uint","type":"uint"},{"original":{"name":"binary_second_arg_uint_max","expr":"math.greatest(1u, 18446744073709551615u)","value":{"uint64Value":"18446744073709551615"}},"ast":"math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@max(\n 1u~uint,\n 18446744073709551615u~uint\n)~uint^math_@max_uint_uint","type":"uint"},{"original":{"name":"ternary_same_args","expr":"math.greatest(1u, 1u, 1u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1u~uint,\n 1u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_decimal","expr":"math.greatest(1u, 1.0, 1.0) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1u~uint,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_int","expr":"math.greatest(1u, 1, 1) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1u~uint,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_greatest","expr":"math.greatest(10u, 1u, 3u) == 10u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 10u~uint,\n 1u~uint,\n 3u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 10u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_greatest","expr":"math.greatest(1u, 3u, 10u) == 10u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 1u~uint,\n 3u~uint,\n 10u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 10u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_max","expr":"math.greatest(18446744073709551615u, 1u, 5u) == 18446744073709551615u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 18446744073709551615u~uint,\n 1u~uint,\n 5u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 18446744073709551615u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.greatest(5.4, 10, 3u, -5.0, 18446744073709551615u) == 18446744073709551615u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 18446744073709551615u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 18446744073709551615u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.greatest([5.4, 10u, 3u, -5.0, 3.5]) == 10u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n 5.4~double,\n 10u~uint,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.greatest([dyn(5.4), dyn(10u), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10u~uint\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10u~uint\n)~bool^equals","type":"bool"}]},{"name":"least_int_result","tests":[{"original":{"name":"unary_negative","expr":"math.least(-5)","value":{"int64Value":"-5"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -5~int\n)~int^math_@min_int","type":"int"},{"original":{"name":"unary_positive","expr":"math.least(5)","value":{"int64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5~int\n)~int^math_@min_int","type":"int"},{"original":{"name":"binary_same_args","expr":"math.least(1, 1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1~int,\n 1~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_with_decimal","expr":"math.least(1, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1~int,\n 1~double\n )~dyn^math_@min_int_double,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_uint","expr":"math.least(1, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1~int,\n 1u~uint\n )~dyn^math_@min_int_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_least","expr":"math.least(-3, 3)","value":{"int64Value":"-3"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -3^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -3~int,\n 3~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_second_arg_least","expr":"math.least(5, -7)","value":{"int64Value":"-7"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5^#*expr.Constant_Int64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5~int,\n -7~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_first_arg_int_max","expr":"math.least(9223372036854775807, 1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 9223372036854775807~int,\n 1~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_second_arg_int_max","expr":"math.least(1, 9223372036854775807)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1~int,\n 9223372036854775807~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_first_arg_int_min","expr":"math.least(-9223372036854775808, 1)","value":{"int64Value":"-9223372036854775808"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -9223372036854775808~int,\n 1~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"binary_second_arg_int_min","expr":"math.least(1, -9223372036854775808)","value":{"int64Value":"-9223372036854775808"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1~int,\n -9223372036854775808~int\n)~int^math_@min_int_int","type":"int"},{"original":{"name":"ternary_same_args","expr":"math.least(1, 1, 1) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~int,\n 1~int,\n 1~int\n ]~list(int)\n )~int^math_@min_list_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_decimal","expr":"math.least(1, 1.0, 1.0) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~int,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_uint","expr":"math.least(1, 1u, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~int,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_least","expr":"math.least(0, 1, 3) == 0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 0~int,\n 1~int,\n 3~int\n ]~list(int)\n )~int^math_@min_list_int,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_least","expr":"math.least(1, 3, 0) == 0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~int,\n 3~int,\n 0~int\n ]~list(int)\n )~int^math_@min_list_int,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_negatives","expr":"math.least(-1, -2, -3) == -3"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n -1~int,\n -2~int,\n -3~int\n ]~list(int)\n )~int^math_@min_list_int,\n -3~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_max","expr":"math.least(9223372036854775807, 1, 5) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 9223372036854775807~int,\n 1~int,\n 5~int\n ]~list(int)\n )~int^math_@min_list_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_int_min","expr":"math.least(-9223372036854775808, -1, -5) == -9223372036854775808"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n -9223372036854775808~int,\n -1~int,\n -5~int\n ]~list(int)\n )~int^math_@min_list_int,\n -9223372036854775808~int\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.least(5.4, 10, 3u, -5.0, 9223372036854775807) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 9223372036854775807~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.least([5.4, 10, 3u, -5.0, 3.5]) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.least([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10~int\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"}]},{"name":"least_double_result","tests":[{"original":{"name":"unary_negative","expr":"math.least(-5.5)","value":{"doubleValue":-5.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -5.5~double\n)~double^math_@min_double","type":"double"},{"original":{"name":"unary_positive","expr":"math.least(5.5)","value":{"doubleValue":5.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5.5~double\n)~double^math_@min_double","type":"double"},{"original":{"name":"binary_same_args","expr":"math.least(1.5, 1.5)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1.5~double,\n 1.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_with_int","expr":"math.least(1.0, 1) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1~double,\n 1~int\n )~dyn^math_@min_double_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_uint","expr":"math.least(1, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1~int,\n 1u~uint\n )~dyn^math_@min_int_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_least","expr":"math.least(-3.5, 3.5)","value":{"doubleValue":-3.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -3.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -3.5~double,\n 3.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_second_arg_least","expr":"math.least(5.5, -7.5)","value":{"doubleValue":-7.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5.5^#*expr.Constant_DoubleValue#,\n -7.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5.5~double,\n -7.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_first_arg_double_max","expr":"math.least(1.797693e308, 1.5)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1.797693e+308~double,\n 1.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_second_arg_double_max","expr":"math.least(1.5, 1.797693e308)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1.5~double,\n 1.797693e+308~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_first_arg_double_min","expr":"math.least(-1.797693e308, 1.5)","value":{"doubleValue":-1.797693e+308}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n -1.797693e+308~double,\n 1.5~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"binary_second_arg_double_min","expr":"math.least(1.5, -1.797693e308)","value":{"doubleValue":-1.797693e+308}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1.5~double,\n -1.797693e+308~double\n)~double^math_@min_double_double","type":"double"},{"original":{"name":"ternary_same_args","expr":"math.least(1.5, 1.5, 1.5) == 1.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1.5~double,\n 1.5~double,\n 1.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 1.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_int","expr":"math.least(1.0, 1, 1) == 1.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~double,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_uint","expr":"math.least(1.0, 1u, 1u) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1~double,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_least","expr":"math.least(0.5, 1.5, 3.5) == 0.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 0.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 0.5~double,\n 1.5~double,\n 3.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 0.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_least","expr":"math.least(1.5, 3.5, 0.5) == 0.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#,\n 0.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1.5~double,\n 3.5~double,\n 0.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 0.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_negatives","expr":"math.least(-1.5, -2.5, -3.5) == -3.5"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1.5^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#,\n -3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n -1.5~double,\n -2.5~double,\n -3.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n -3.5~double\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_double_max","expr":"math.least(1.797693e308, 1, 5) == 1"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1.797693e+308~double,\n 1~int,\n 5~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_double_min","expr":"math.least(-1.797693e308, -1, -5) == -1.797693e308"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n -1.797693e+308~double,\n -1~int,\n -5~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -1.797693e+308~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.least(5.4, 10, 3u, -5.0, 1.797693e308) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 1.797693e+308~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.least([5.4, 10.5, 3u, -5.0, 3.5]) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10.5~double,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.least([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10.5~double\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals","type":"bool"}]},{"name":"least_uint_result","tests":[{"original":{"name":"unary","expr":"math.least(5u)","value":{"uint64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5u~uint\n)~uint^math_@min_uint","type":"uint"},{"original":{"name":"binary_same_args","expr":"math.least(1u, 1u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1u~uint,\n 1u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"binary_with_decimal","expr":"math.least(1u, 1.0) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1u~uint,\n 1~double\n )~dyn^math_@min_uint_double,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"binary_with_int","expr":"math.least(1u, 1) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n 1u~uint,\n 1~int\n )~dyn^math_@min_uint_int,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"binary_first_arg_least","expr":"math.least(1u, 3u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1u~uint,\n 3u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"binary_second_arg_least","expr":"math.least(5u, 2u)","value":{"uint64Value":"2"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 5u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 5u~uint,\n 2u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"binary_first_arg_uint_max","expr":"math.least(18446744073709551615u, 1u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"binary_second_arg_uint_max","expr":"math.least(1u, 18446744073709551615u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.@min(\n 1u~uint,\n 18446744073709551615u~uint\n)~uint^math_@min_uint_uint","type":"uint"},{"original":{"name":"ternary_same_args","expr":"math.least(1u, 1u, 1u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1u~uint,\n 1u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_decimal","expr":"math.least(1u, 1.0, 1.0) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1u~uint,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_with_int","expr":"math.least(1u, 1, 1) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1u~uint,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_first_arg_least","expr":"math.least(1u, 10u, 3u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 1u~uint,\n 10u~uint,\n 3u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_third_arg_least","expr":"math.least(10u, 3u, 1u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 10u~uint,\n 3u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_uint_max","expr":"math.least(18446744073709551615u, 1u, 5u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 18446744073709551615u~uint,\n 1u~uint,\n 5u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed","expr":"math.least(5.4, 10, 3u, 1u, 18446744073709551615u) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n 1u~uint,\n 18446744073709551615u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_array","expr":"math.least([5.4, 10u, 3u, 1u, 3.5]) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n 5.4~double,\n 10u~uint,\n 3u~uint,\n 1u~uint,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"},{"original":{"name":"quaternary_mixed_dyn_array","expr":"math.least([dyn(5.4), dyn(10u), dyn(3u), dyn(1u), dyn(3.5)]) == 1u"},"ast":"_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10u~uint\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals","type":"bool"}]},{"name":"ceil","tests":[{"original":{"name":"negative","expr":"math.ceil(-1.2)","value":{"doubleValue":-1}},"ast":"math^#*expr.Expr_IdentExpr#.ceil(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.ceil(\n -1.2~double\n)~double^math_ceil_double","type":"double"},{"original":{"name":"positive","expr":"math.ceil(1.2)","value":{"doubleValue":2}},"ast":"math^#*expr.Expr_IdentExpr#.ceil(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.ceil(\n 1.2~double\n)~double^math_ceil_double","type":"double"},{"original":{"name":"dyn_error","expr":"math.ceil(dyn(1))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.ceil(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.ceil(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_ceil_double","type":"double"}]},{"name":"floor","tests":[{"original":{"name":"negative","expr":"math.floor(-1.2)","value":{"doubleValue":-2}},"ast":"math^#*expr.Expr_IdentExpr#.floor(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.floor(\n -1.2~double\n)~double^math_floor_double","type":"double"},{"original":{"name":"positive","expr":"math.floor(1.2)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.floor(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.floor(\n 1.2~double\n)~double^math_floor_double","type":"double"},{"original":{"name":"dyn_error","expr":"math.floor(dyn(1))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.floor(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.floor(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_floor_double","type":"double"}]},{"name":"round","tests":[{"original":{"name":"negative_down","expr":"math.round(-1.6)","value":{"doubleValue":-2}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n -1.6^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n -1.6~double\n)~double^math_round_double","type":"double"},{"original":{"name":"negative_up","expr":"math.round(-1.4)","value":{"doubleValue":-1}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n -1.4^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n -1.4~double\n)~double^math_round_double","type":"double"},{"original":{"name":"negative_mid","expr":"math.round(-1.5)","value":{"doubleValue":-2}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n -1.5~double\n)~double^math_round_double","type":"double"},{"original":{"name":"positive_down","expr":"math.round(1.2)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n 1.2~double\n)~double^math_round_double","type":"double"},{"original":{"name":"positive_up","expr":"math.round(1.5)","value":{"doubleValue":2}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n 1.5~double\n)~double^math_round_double","type":"double"},{"original":{"name":"nan","expr":"math.isNaN(math.round(0.0/0.0))"},"ast":"math^#*expr.Expr_IdentExpr#.isNaN(\n math^#*expr.Expr_IdentExpr#.round(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isNaN(\n math.round(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~double^math_round_double\n)~bool^math_isNaN_double","type":"bool"},{"original":{"name":"dyn_error","expr":"math.round(dyn(1))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.round(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.round(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_round_double","type":"double"}]},{"name":"trunc","tests":[{"original":{"name":"negative","expr":"math.trunc(-1.2)","value":{"doubleValue":-1}},"ast":"math^#*expr.Expr_IdentExpr#.trunc(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.trunc(\n -1.2~double\n)~double^math_trunc_double","type":"double"},{"original":{"name":"positive","expr":"math.trunc(1.2)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.trunc(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.trunc(\n 1.2~double\n)~double^math_trunc_double","type":"double"},{"original":{"name":"nan","expr":"math.isNaN(math.trunc(0.0/0.0))"},"ast":"math^#*expr.Expr_IdentExpr#.isNaN(\n math^#*expr.Expr_IdentExpr#.trunc(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isNaN(\n math.trunc(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~double^math_trunc_double\n)~bool^math_isNaN_double","type":"bool"},{"original":{"name":"dyn_error","expr":"math.trunc(dyn(1))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.trunc(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.trunc(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_trunc_double","type":"double"}]},{"name":"abs","tests":[{"original":{"name":"uint","expr":"math.abs(1u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n 1u~uint\n)~uint^math_abs_uint","type":"uint"},{"original":{"name":"positive_int","expr":"math.abs(1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n 1~int\n)~int^math_abs_int","type":"int"},{"original":{"name":"negative_int","expr":"math.abs(-11)","value":{"int64Value":"11"}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n -11^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n -11~int\n)~int^math_abs_int","type":"int"},{"original":{"name":"positive_double","expr":"math.abs(1.5)","value":{"doubleValue":1.5}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n 1.5~double\n)~double^math_abs_double","type":"double"},{"original":{"name":"negative_double","expr":"math.abs(-11.5)","value":{"doubleValue":11.5}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n -11.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n -11.5~double\n)~double^math_abs_double","type":"double"},{"original":{"name":"int_overflow","expr":"math.abs(-9223372036854775808)","evalError":{"errors":[{"message":"overflow"}]}},"ast":"math^#*expr.Expr_IdentExpr#.abs(\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.abs(\n -9223372036854775808~int\n)~int^math_abs_int","type":"int"}]},{"name":"sign","tests":[{"original":{"name":"positive_uint","expr":"math.sign(100u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 100u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 100u~uint\n)~uint^math_sign_uint","type":"uint"},{"original":{"name":"zero_uint","expr":"math.sign(0u)","value":{"uint64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 0u~uint\n)~uint^math_sign_uint","type":"uint"},{"original":{"name":"positive_int","expr":"math.sign(100)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 100^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 100~int\n)~int^math_sign_int","type":"int"},{"original":{"name":"negative_int","expr":"math.sign(-11)","value":{"int64Value":"-1"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n -11^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n -11~int\n)~int^math_sign_int","type":"int"},{"original":{"name":"zero_int","expr":"math.sign(0)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 0~int\n)~int^math_sign_int","type":"int"},{"original":{"name":"positive_double","expr":"math.sign(100.5)","value":{"doubleValue":1}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 100.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 100.5~double\n)~double^math_sign_double","type":"double"},{"original":{"name":"negative_double","expr":"math.sign(-32.0)","value":{"doubleValue":-1}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n -32^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n -32~double\n)~double^math_sign_double","type":"double"},{"original":{"name":"zero_double","expr":"math.sign(0.0)","value":{"doubleValue":0}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n 0~double\n)~double^math_sign_double","type":"double"},{"original":{"name":"dyn_error","expr":"math.sign(dyn(true))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.sign(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.sign(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~dyn^math_sign_double|math_sign_int|math_sign_uint","type":"dyn"}]},{"name":"isNaN","tests":[{"original":{"name":"true","expr":"math.isNaN(0.0/0.0)"},"ast":"math^#*expr.Expr_IdentExpr#.isNaN(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isNaN(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^math_isNaN_double","type":"bool"},{"original":{"name":"false","expr":"!math.isNaN(1.0/0.0)"},"ast":"!_(\n math^#*expr.Expr_IdentExpr#.isNaN(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n math.isNaN(\n _/_(\n 1~double,\n 0~double\n )~double^divide_double\n )~bool^math_isNaN_double\n)~bool^logical_not","type":"bool"},{"original":{"name":"dyn_error","expr":"math.isNaN(dyn(true))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.isNaN(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isNaN(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isNaN_double","type":"bool"}]},{"name":"isInf","tests":[{"original":{"name":"true","expr":"math.isInf(1.0/0.0)"},"ast":"math^#*expr.Expr_IdentExpr#.isInf(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isInf(\n _/_(\n 1~double,\n 0~double\n )~double^divide_double\n)~bool^math_isInf_double","type":"bool"},{"original":{"name":"false","expr":"!math.isInf(0.0/0.0)"},"ast":"!_(\n math^#*expr.Expr_IdentExpr#.isInf(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n math.isInf(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~bool^math_isInf_double\n)~bool^logical_not","type":"bool"},{"original":{"name":"dyn_error","expr":"math.isInf(dyn(true))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.isInf(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isInf(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isInf_double","type":"bool"}]},{"name":"isFinite","tests":[{"original":{"name":"true","expr":"math.isFinite(1.0/1.5)"},"ast":"math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isFinite(\n _/_(\n 1~double,\n 1.5~double\n )~double^divide_double\n)~bool^math_isFinite_double","type":"bool"},{"original":{"name":"false_nan","expr":"!math.isFinite(0.0/0.0)"},"ast":"!_(\n math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n math.isFinite(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~bool^math_isFinite_double\n)~bool^logical_not","type":"bool"},{"original":{"name":"false_inf","expr":"!math.isFinite(-1.0/0.0)"},"ast":"!_(\n math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n -1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"!_(\n math.isFinite(\n _/_(\n -1~double,\n 0~double\n )~double^divide_double\n )~bool^math_isFinite_double\n)~bool^logical_not","type":"bool"},{"original":{"name":"dyn_error","expr":"math.isFinite(dyn(true))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.isFinite(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.isFinite(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isFinite_double","type":"bool"}]},{"name":"bit_and","tests":[{"original":{"name":"int_int_non_intersect","expr":"math.bitAnd(1, 2)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1~int,\n 2~int\n)~int^math_bitAnd_int_int","type":"int"},{"original":{"name":"int_int_intersect","expr":"math.bitAnd(1, 3)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1~int,\n 3~int\n)~int^math_bitAnd_int_int","type":"int"},{"original":{"name":"int_int_intersect_neg","expr":"math.bitAnd(1, -1)","value":{"int64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1~int,\n -1~int\n)~int^math_bitAnd_int_int","type":"int"},{"original":{"name":"uint_uint_non_intersect","expr":"math.bitAnd(1u, 2u)","value":{"uint64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1u~uint,\n 2u~uint\n)~uint^math_bitAnd_uint_uint","type":"uint"},{"original":{"name":"uint_uint_intersect","expr":"math.bitAnd(1u, 3u)","value":{"uint64Value":"1"}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 1u~uint,\n 3u~uint\n)~uint^math_bitAnd_uint_uint","type":"uint"},{"original":{"name":"int_dyn_error","expr":"math.bitAnd(2u, dyn(''))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitAnd(\n 2u^#*expr.Constant_Uint64Value#,\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitAnd(\n 2u~uint,\n dyn(\n \"\"~string\n )~dyn^to_dyn\n)~uint^math_bitAnd_uint_uint","type":"uint"}]},{"name":"bit_or","tests":[{"original":{"name":"int_int_positive","expr":"math.bitOr(1, 2)","value":{"int64Value":"3"}},"ast":"math^#*expr.Expr_IdentExpr#.bitOr(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitOr(\n 1~int,\n 2~int\n)~int^math_bitOr_int_int","type":"int"},{"original":{"name":"int_int_positive_negative","expr":"math.bitOr(4, -2)","value":{"int64Value":"-2"}},"ast":"math^#*expr.Expr_IdentExpr#.bitOr(\n 4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitOr(\n 4~int,\n -2~int\n)~int^math_bitOr_int_int","type":"int"},{"original":{"name":"uint_uint","expr":"math.bitOr(1u, 4u)","value":{"uint64Value":"5"}},"ast":"math^#*expr.Expr_IdentExpr#.bitOr(\n 1u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitOr(\n 1u~uint,\n 4u~uint\n)~uint^math_bitOr_uint_uint","type":"uint"},{"original":{"name":"dyn_int_error","expr":"math.bitOr(dyn(1.2), 1)","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitOr(\n dyn(\n 1.2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitOr(\n dyn(\n 1.2~double\n )~dyn^to_dyn,\n 1~int\n)~int^math_bitOr_int_int","type":"int"}]},{"name":"bit_xor","tests":[{"original":{"name":"int_int_positive","expr":"math.bitXor(1, 3)","value":{"int64Value":"2"}},"ast":"math^#*expr.Expr_IdentExpr#.bitXor(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitXor(\n 1~int,\n 3~int\n)~int^math_bitXor_int_int","type":"int"},{"original":{"name":"int_int_positive_negative","expr":"math.bitXor(4, -2)","value":{"int64Value":"-6"}},"ast":"math^#*expr.Expr_IdentExpr#.bitXor(\n 4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitXor(\n 4~int,\n -2~int\n)~int^math_bitXor_int_int","type":"int"},{"original":{"name":"uint_uint","expr":"math.bitXor(1u, 3u)","value":{"uint64Value":"2"}},"ast":"math^#*expr.Expr_IdentExpr#.bitXor(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitXor(\n 1u~uint,\n 3u~uint\n)~uint^math_bitXor_uint_uint","type":"uint"},{"original":{"name":"dyn_dyn_error","expr":"math.bitXor(dyn([]), dyn([1]))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitXor(\n dyn(\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitXor(\n dyn(\n []~list(dyn)\n )~dyn^to_dyn,\n dyn(\n [\n 1~int\n ]~list(int)\n )~dyn^to_dyn\n)~dyn^math_bitXor_int_int|math_bitXor_uint_uint","type":"dyn"}]},{"name":"bit_not","tests":[{"original":{"name":"int_positive","expr":"math.bitNot(1)","value":{"int64Value":"-2"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n 1~int\n)~int^math_bitNot_int_int","type":"int"},{"original":{"name":"int_negative","expr":"math.bitNot(-1)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n -1~int\n)~int^math_bitNot_int_int","type":"int"},{"original":{"name":"int_zero","expr":"math.bitNot(0)","value":{"int64Value":"-1"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n 0~int\n)~int^math_bitNot_int_int","type":"int"},{"original":{"name":"uint_positive","expr":"math.bitNot(1u)","value":{"uint64Value":"18446744073709551614"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n 1u~uint\n)~uint^math_bitNot_uint_uint","type":"uint"},{"original":{"name":"uint_zero","expr":"math.bitNot(0u)","value":{"uint64Value":"18446744073709551615"}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n 0u~uint\n)~uint^math_bitNot_uint_uint","type":"uint"},{"original":{"name":"dyn_error","expr":"math.bitNot(dyn(''))","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitNot(\n dyn(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitNot(\n dyn(\n \"\"~string\n )~dyn^to_dyn\n)~dyn^math_bitNot_int_int|math_bitNot_uint_uint","type":"dyn"}]},{"name":"bit_shift_left","tests":[{"original":{"name":"int","expr":"math.bitShiftLeft(1, 2)","value":{"int64Value":"4"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1~int,\n 2~int\n)~int^math_bitShiftLeft_int_int","type":"int"},{"original":{"name":"int_large_shift","expr":"math.bitShiftLeft(1, 200)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1^#*expr.Constant_Int64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1~int,\n 200~int\n)~int^math_bitShiftLeft_int_int","type":"int"},{"original":{"name":"int_negative_large_shift","expr":"math.bitShiftLeft(-1, 200)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n -1^#*expr.Constant_Int64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n -1~int,\n 200~int\n)~int^math_bitShiftLeft_int_int","type":"int"},{"original":{"name":"uint","expr":"math.bitShiftLeft(1u, 2)","value":{"uint64Value":"4"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1u~uint,\n 2~int\n)~uint^math_bitShiftLeft_uint_int","type":"uint"},{"original":{"name":"uint_large_shift","expr":"math.bitShiftLeft(1u, 200)","value":{"uint64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1u~uint,\n 200~int\n)~uint^math_bitShiftLeft_uint_int","type":"uint"},{"original":{"name":"bad_shift","expr":"math.bitShiftLeft(1u, -1)","evalError":{"errors":[{"message":"negative offset"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n 1u~uint,\n -1~int\n)~uint^math_bitShiftLeft_uint_int","type":"uint"},{"original":{"name":"dyn_int_error","expr":"math.bitShiftLeft(dyn(4.3), 1)","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n dyn(\n 4.3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftLeft(\n dyn(\n 4.3~double\n )~dyn^to_dyn,\n 1~int\n)~dyn^math_bitShiftLeft_int_int|math_bitShiftLeft_uint_int","type":"dyn"}]},{"name":"bit_shift_right","tests":[{"original":{"name":"int","expr":"math.bitShiftRight(1024, 2)","value":{"int64Value":"256"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1024~int,\n 2~int\n)~int^math_bitShiftRight_int_int","type":"int"},{"original":{"name":"int_large_shift","expr":"math.bitShiftRight(1024, 64)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024^#*expr.Constant_Int64Value#,\n 64^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1024~int,\n 64~int\n)~int^math_bitShiftRight_int_int","type":"int"},{"original":{"name":"int_negative","expr":"math.bitShiftRight(-1024, 3)","value":{"int64Value":"2305843009213693824"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n -1024^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n -1024~int,\n 3~int\n)~int^math_bitShiftRight_int_int","type":"int"},{"original":{"name":"int_negative_large_shift","expr":"math.bitShiftRight(-1024, 64)","value":{"int64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n -1024^#*expr.Constant_Int64Value#,\n 64^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n -1024~int,\n 64~int\n)~int^math_bitShiftRight_int_int","type":"int"},{"original":{"name":"uint","expr":"math.bitShiftRight(1024u, 2)","value":{"uint64Value":"256"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1024u~uint,\n 2~int\n)~uint^math_bitShiftRight_uint_int","type":"uint"},{"original":{"name":"uint_large_shift","expr":"math.bitShiftRight(1024u, 200)","value":{"uint64Value":"0"}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024u^#*expr.Constant_Uint64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1024u~uint,\n 200~int\n)~uint^math_bitShiftRight_uint_int","type":"uint"},{"original":{"name":"bad_shift","expr":"math.bitShiftRight(1u, -1)","evalError":{"errors":[{"message":"negative offset"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1u^#*expr.Constant_Uint64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n 1u~uint,\n -1~int\n)~uint^math_bitShiftRight_uint_int","type":"uint"},{"original":{"name":"dyn_int_error","expr":"math.bitShiftRight(dyn(b'123'), 1)","evalError":{"errors":[{"message":"no such overload"}]}},"ast":"math^#*expr.Expr_IdentExpr#.bitShiftRight(\n dyn(\n b\"123\"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"math.bitShiftRight(\n dyn(\n b\"123\"~bytes\n )~dyn^to_dyn,\n 1~int\n)~dyn^math_bitShiftRight_int_int|math_bitShiftRight_uint_int","type":"dyn"}]}]},{"name":"namespace","suites":[{"name":"qualified","tests":[{"original":{"name":"self_eval_qualified_lookup","expr":"x.y","typeEnv":[{"name":"x.y","ident":{"type":{"primitive":"BOOL"}}}],"bindings":{"x.y":{"value":{"boolValue":true}}},"value":{"boolValue":true}},"ast":"x^#*expr.Expr_IdentExpr#.y^#*expr.Expr_SelectExpr#","checkedAst":"x.y~bool^x.y","type":"bool"}]},{"name":"namespace","tests":[{"original":{"name":"self_eval_container_lookup","expr":"y","typeEnv":[{"name":"x.y","ident":{"type":{"primitive":"BOOL"}}},{"name":"y","ident":{"type":{"primitive":"STRING"}}}],"container":"x","bindings":{"x.y":{"value":{"boolValue":true}},"y":{"value":{"stringValue":"false"}}},"value":{"boolValue":true}},"ast":"y^#*expr.Expr_IdentExpr#","checkedAst":"x.y~bool^x.y","type":"bool"},{"original":{"name":"self_eval_container_lookup_unchecked","expr":"y","disableCheck":true,"typeEnv":[{"name":"x.y","ident":{"type":{"primitive":"BOOL"}}},{"name":"y","ident":{"type":{"primitive":"BOOL"}}}],"container":"x","bindings":{"x.y":{"value":{"boolValue":true}},"y":{"value":{"boolValue":false}}},"value":{"boolValue":true}},"ast":"y^#*expr.Expr_IdentExpr#","checkedAst":"x.y~bool^x.y","type":"bool"}]}]},{"name":"optionals","suites":[{"name":"optionals","tests":[{"original":{"name":"null","expr":"optional.of(null).hasValue()","value":{"boolValue":true}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#","checkedAst":"optional.of(\n null~null\n)~optional_type(null)^optional_of.hasValue()~bool^optional_hasValue","type":"bool"},{"original":{"name":"null_non_zero_value","expr":"optional.ofNonZeroValue(null).hasValue()","value":{"boolValue":false}},"ast":"optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#","checkedAst":"optional.ofNonZeroValue(\n null~null\n)~optional_type(null)^optional_ofNonZeroValue.hasValue()~bool^optional_hasValue","type":"bool"},{"original":{"name":"none_or_none_or_value","expr":"optional.none().or(optional.none()).orValue(42)","value":{"int64Value":"42"}},"ast":"optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.none()~optional_type(int)^optional_none.or(\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^optional_or_optional.orValue(\n 42~int\n)~int^optional_orValue_value","type":"int"},{"original":{"name":"none_optMap_hasValue","expr":"optional.none().optMap(y, y + 1).hasValue()","value":{"boolValue":false}},"ast":"optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#.optMap(\n y^#*expr.Expr_IdentExpr#,\n _+_(\n y^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n optional.none()~optional_type(dyn)^optional_none.hasValue()~bool^optional_hasValue,\n optional.of(\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n y,\n // Init\n optional.none()~optional_type(int)^optional_none.value()~int^optional_value,\n // LoopCondition\n false~bool,\n // LoopStep\n y~int^y,\n // Result\n _+_(\n y~int^y,\n 1~int\n )~int^add_int64)~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^conditional.hasValue()~bool^optional_hasValue","type":"bool"},{"original":{"name":"empty_map_optFlatMap_hasValue","expr":"{}.?key.optFlatMap(k, k.?subkey).hasValue()","value":{"boolValue":false}},"error":"ERROR: empty_map_optFlatMap_hasValue:1:3: unsupported syntax '.?'\n | {}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ..^\nERROR: empty_map_optFlatMap_hasValue:1:24: unsupported syntax '.?'\n | {}.?key.optFlatMap(k, k.?subkey).hasValue()\n | .......................^"},{"original":{"name":"map_empty_submap_optFlatMap_hasValue","expr":"{'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()","value":{"boolValue":false}},"error":"ERROR: map_empty_submap_optFlatMap_hasValue:1:12: unsupported syntax '.?'\n | {'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ...........^\nERROR: map_empty_submap_optFlatMap_hasValue:1:33: unsupported syntax '.?'\n | {'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ................................^"},{"original":{"name":"map_null_entry_hasValue","expr":"{'null_key': dyn(null)}.?null_key.hasValue()","value":{"boolValue":true}},"error":"ERROR: map_null_entry_hasValue:1:24: unsupported syntax '.?'\n | {'null_key': dyn(null)}.?null_key.hasValue()\n | .......................^"},{"original":{"name":"map_null_entry_no_such_key","expr":"{'null_key': dyn(null)}.?null_key.invalid.hasValue()","evalError":{"errors":[{"message":"no such key"}]}},"error":"ERROR: map_null_entry_no_such_key:1:24: unsupported syntax '.?'\n | {'null_key': dyn(null)}.?null_key.invalid.hasValue()\n | .......................^"},{"original":{"name":"map_absent_key_absent_field_none","expr":"{true: dyn(0)}[?false].absent.hasValue()","value":{"boolValue":false}},"error":"ERROR: map_absent_key_absent_field_none:1:15: unsupported syntax '[?'\n | {true: dyn(0)}[?false].absent.hasValue()\n | ..............^"},{"original":{"name":"map_present_key_invalid_field","expr":"{true: dyn(0)}[?true].absent.hasValue()","evalError":{"errors":[{"message":"no such key"}]}},"error":"ERROR: map_present_key_invalid_field:1:15: unsupported syntax '[?'\n | {true: dyn(0)}[?true].absent.hasValue()\n | ..............^"},{"original":{"name":"map_undefined_entry_hasValue","expr":"{}.?null_key.invalid.hasValue()","value":{"boolValue":false}},"error":"ERROR: map_undefined_entry_hasValue:1:3: unsupported syntax '.?'\n | {}.?null_key.invalid.hasValue()\n | ..^"},{"original":{"name":"map_submap_subkey_optFlatMap_value","expr":"{'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()","value":{"stringValue":"subvalue"}},"error":"ERROR: map_submap_subkey_optFlatMap_value:1:32: unsupported syntax '.?'\n | {'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()\n | ...............................^\nERROR: map_submap_subkey_optFlatMap_value:1:53: unsupported syntax '.?'\n | {'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()\n | ....................................................^"},{"original":{"name":"map_submap_optFlatMap_value","expr":"{'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()","value":{"stringValue":""}},"error":"ERROR: map_submap_optFlatMap_value:1:24: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()\n | .......................^\nERROR: map_submap_optFlatMap_value:1:45: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()\n | ............................................^"},{"original":{"name":"map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue","expr":"{'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()","value":{"boolValue":false}},"error":"ERROR: map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue:1:24: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()\n | .......................^"},{"original":{"name":"optional_of_optMap_value","expr":"optional.of(42).optMap(y, y + 1).value()","value":{"int64Value":"43"}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.optMap(\n y^#*expr.Expr_IdentExpr#,\n _+_(\n y^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.value()^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n optional.of(\n 42~int\n )~optional_type(int)^optional_of.hasValue()~bool^optional_hasValue,\n optional.of(\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n y,\n // Init\n optional.of(\n 42~int\n )~optional_type(int)^optional_of.value()~int^optional_value,\n // LoopCondition\n false~bool,\n // LoopStep\n y~int^y,\n // Result\n _+_(\n y~int^y,\n 1~int\n )~int^add_int64)~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^conditional.value()~int^optional_value","type":"int"},{"original":{"name":"optional_ofNonZeroValue_or_optional_value","expr":"optional.ofNonZeroValue(42).or(optional.of(20)).value() == 42","value":{"boolValue":true}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n 42^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.of(\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#.value()^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.ofNonZeroValue(\n 42~int\n )~optional_type(int)^optional_ofNonZeroValue.or(\n optional.of(\n 20~int\n )~optional_type(int)^optional_of\n )~optional_type(int)^optional_or_optional.value()~int^optional_value,\n 42~int\n)~bool^equals","type":"bool"},{"original":{"name":"ternary_optional_hasValue","expr":"(has({}.x) ? optional.of({}.x) : optional.none()).hasValue()","value":{"boolValue":false}},"ast":"_?_:_(\n {}^#*expr.Expr_StructExpr#.x~test-only~^#*expr.Expr_SelectExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n {}^#*expr.Expr_StructExpr#.x^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n {}~map(dyn, dyn).x~test-only~~bool,\n optional.of(\n {}~map(dyn, dyn).x~dyn\n )~optional_type(dyn)^optional_of,\n optional.none()~optional_type(dyn)^optional_none\n)~optional_type(dyn)^conditional.hasValue()~bool^optional_hasValue","type":"bool"},{"original":{"name":"map_optindex_hasValue","expr":"{}.?x.hasValue()","value":{"boolValue":false}},"error":"ERROR: map_optindex_hasValue:1:3: unsupported syntax '.?'\n | {}.?x.hasValue()\n | ..^"},{"original":{"name":"has_map_optindex","expr":"has({}.?x.y)","value":{"boolValue":false}},"error":"ERROR: has_map_optindex:1:7: unsupported syntax '.?'\n | has({}.?x.y)\n | ......^"},{"original":{"name":"has_map_optindex_field","expr":"has({'x': {'y': 'z'}}.?x.y)","value":{"boolValue":true}},"error":"ERROR: has_map_optindex_field:1:22: unsupported syntax '.?'\n | has({'x': {'y': 'z'}}.?x.y)\n | .....................^"},{"original":{"name":"type","expr":"type(optional.none()) == optional_type","value":{"boolValue":true}},"ast":"_==_(\n type(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional_type^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n type(\n optional.none()~optional_type(dyn)^optional_none\n )~type(optional_type(dyn))^type,\n optional_type~type(optional_type)^optional_type\n)~bool^equals","type":"bool"},{"original":{"name":"optional_chaining_1","expr":"optional.ofNonZeroValue('').or(optional.of({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])).orValue('default value')","value":{"stringValue":"goodbye"}},"ast":"optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.of(\n _[_](\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"dashed-index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.c^#*expr.Expr_SelectExpr#,\n \"dashed-index\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.ofNonZeroValue(\n \"\"~string\n)~optional_type(string)^optional_ofNonZeroValue.or(\n optional.of(\n _[_](\n {\n \"c\"~string:{\n \"dashed-index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string)).c~map(string, string),\n \"dashed-index\"~string\n )~string^index_map\n )~optional_type(string)^optional_of\n)~optional_type(string)^optional_or_optional.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_2","expr":"{'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')","value":{"stringValue":"goodbye"}},"error":"ERROR: optional_chaining_2:1:37: unsupported syntax '[?'\n | {'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')\n | ....................................^"},{"original":{"name":"optional_chaining_3","expr":"{'c': {}}.c[?'missing-index'].orValue('default value')","value":{"stringValue":"default value"}},"error":"ERROR: optional_chaining_3:1:12: unsupported syntax '[?'\n | {'c': {}}.c[?'missing-index'].orValue('default value')\n | ...........^"},{"original":{"name":"optional_chaining_4","expr":"optional.of({'c': {'index': 'goodbye'}}).c.index.orValue('default value')","value":{"stringValue":"goodbye"}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.index^#*expr.Expr_SelectExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.of(\n {\n \"c\"~string:{\n \"index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string))\n)~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)).index~optional_type(string).orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_5","expr":"optional.of({'c': {}}).c.missing.or(optional.none()[0]).orValue('default value')","value":{"stringValue":"default value"}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing^#*expr.Expr_SelectExpr#.or(\n _[_](\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.of(\n {\n \"c\"~string:{}~map(dyn, string)\n }~map(string, map(dyn, string))\n)~optional_type(map(string, map(dyn, string)))^optional_of.c~optional_type(map(dyn, string)).missing~optional_type(string).or(\n _[_](\n optional.none()~optional_type(list(string))^optional_none,\n 0~int\n )~optional_type(string)^optional_list_index_int\n)~optional_type(string)^optional_or_optional.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_6","expr":"optional.of({'c': {}}).c.missing.or(optional.of(['list-value'])[0]).orValue('default value')","value":{"stringValue":"list-value"}},"ast":"optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing^#*expr.Expr_SelectExpr#.or(\n _[_](\n optional^#*expr.Expr_IdentExpr#.of(\n [\n \"list-value\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.of(\n {\n \"c\"~string:{}~map(dyn, string)\n }~map(string, map(dyn, string))\n)~optional_type(map(string, map(dyn, string)))^optional_of.c~optional_type(map(dyn, string)).missing~optional_type(string).or(\n _[_](\n optional.of(\n [\n \"list-value\"~string\n ]~list(string)\n )~optional_type(list(string))^optional_of,\n 0~int\n )~optional_type(string)^optional_list_index_int\n)~optional_type(string)^optional_or_optional.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_7","expr":"optional.of({'c': {'index': 'goodbye'}}).c['index'].orValue('default value')","value":{"stringValue":"goodbye"}},"ast":"_[_](\n optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#,\n \"index\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n optional.of(\n {\n \"c\"~string:{\n \"index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)),\n \"index\"~string\n)~optional_type(string)^optional_map_index_value.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_8","expr":"optional.of({'c': {}}).c['missing'].orValue('default value')","value":{"stringValue":"default value"}},"ast":"_[_](\n optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#,\n \"missing\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.orValue(\n \"default value\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n optional.of(\n {\n \"c\"~string:{}~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)),\n \"missing\"~string\n)~optional_type(string)^optional_map_index_value.orValue(\n \"default value\"~string\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_9","expr":"has(optional.of({'c': {'entry': 'hello world'}}).c) \u0026\u0026 !has(optional.of({'c': {'entry': 'hello world'}}).c.missing)","value":{"boolValue":true}},"ast":"_\u0026\u0026_(\n optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"entry\"^#*expr.Constant_StringValue#:\"hello world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c~test-only~^#*expr.Expr_SelectExpr#,\n !_(\n optional^#*expr.Expr_IdentExpr#.of(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"entry\"^#*expr.Constant_StringValue#:\"hello world\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing~test-only~^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n optional.of(\n {\n \"c\"~string:{\n \"entry\"~string:\"hello world\"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~test-only~~bool,\n !_(\n optional.of(\n {\n \"c\"~string:{\n \"entry\"~string:\"hello world\"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)).missing~test-only~~bool\n )~bool^logical_not\n)~bool^logical_and","type":"bool"},{"original":{"name":"optional_chaining_10","expr":"optional.ofNonZeroValue({'c': {'dashed-index': 'goodbye'}}.a.z).orValue({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])","evalError":{"errors":[{"message":"no such key"}]}},"ast":"optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"dashed-index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.a^#*expr.Expr_SelectExpr#.z^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n _[_](\n {\n \"c\"^#*expr.Constant_StringValue#:{\n \"dashed-index\"^#*expr.Constant_StringValue#:\"goodbye\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.c^#*expr.Expr_SelectExpr#,\n \"dashed-index\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"optional.ofNonZeroValue(\n {\n \"c\"~string:{\n \"dashed-index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string)).a~map(string, string).z~string\n)~optional_type(string)^optional_ofNonZeroValue.orValue(\n _[_](\n {\n \"c\"~string:{\n \"dashed-index\"~string:\"goodbye\"~string\n }~map(string, string)\n }~map(string, map(string, string)).c~map(string, string),\n \"dashed-index\"~string\n )~string^index_map\n)~string^optional_orValue_value","type":"string"},{"original":{"name":"optional_chaining_11","expr":"{'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()","value":{"int64Value":"7"}},"error":"ERROR: optional_chaining_11:1:35: unsupported syntax '.?'\n | {'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()\n | ..................................^\nERROR: optional_chaining_11:1:84: unsupported syntax '.?'\n | {'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()\n | ...................................................................................^"},{"original":{"name":"optional_chaining_12","expr":"{?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}","value":{"mapValue":{"entries":[{"key":{"stringValue":"nested_map"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"map"},"value":{"mapValue":{"entries":[{"key":{"stringValue":"dashed-index"},"value":{"stringValue":"goodbye"}}]}}}]}}}]}}},"error":"ERROR: optional_chaining_12:1:2: unsupported syntax '?'\n | {?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}\n | .^"},{"original":{"name":"optional_chaining_13","expr":"{?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}","value":{"mapValue":{"entries":[{"key":{"stringValue":"singleton"},"value":{"boolValue":true}}]}}},"error":"ERROR: optional_chaining_13:1:2: unsupported syntax '?'\n | {?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}\n | .^"},{"original":{"name":"optional_chaining_14","expr":"[?{}.?c, ?optional.of(42), ?optional.none()]","value":{"listValue":{"values":[{"int64Value":"42"}]}}},"error":"ERROR: optional_chaining_14:1:2: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | .^\nERROR: optional_chaining_14:1:5: unsupported syntax '.?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | ....^\nERROR: optional_chaining_14:1:10: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | .........^\nERROR: optional_chaining_14:1:28: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | ...........................^"},{"original":{"name":"optional_chaining_15","expr":"[?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]","value":{"listValue":{}}},"error":"ERROR: optional_chaining_15:1:2: unsupported syntax '?'\n | [?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]\n | .^\nERROR: optional_chaining_15:1:36: unsupported syntax '.?'\n | [?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]\n | ...................................^"},{"original":{"name":"optional_chaining_16","expr":"optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_chaining_16:1:26: unsupported syntax '?'\n | optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()\n | .........................^"},{"original":{"name":"has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field","expr":"has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field:1:18: unsupported syntax '?'\n | has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)\n | .................^"},{"original":{"name":"optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field","expr":"optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field:1:38: unsupported syntax '?'\n | optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()\n | .....................................^"},{"original":{"name":"struct_map_optindex_field","expr":"TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"error":"ERROR: struct_map_optindex_field:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string\n | .............^"},{"original":{"name":"struct_optional_ofNonZeroValue_map_optindex_field","expr":"TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"error":"ERROR: struct_optional_ofNonZeroValue_map_optindex_field:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string\n | .............^"},{"original":{"name":"struct_map_optindex_field_nested","expr":"TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string","container":"cel.expr.conformance.proto2","value":{"mapValue":{"entries":[{"key":{"stringValue":"hello"},"value":{"stringValue":"world"}}]}}},"error":"ERROR: struct_map_optindex_field_nested:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string\n | .............^"},{"original":{"name":"struct_list_optindex_field","expr":"TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"stringValue":"greetings"},{"stringValue":"world"}]}}},"error":"ERROR: struct_list_optindex_field:1:45: unsupported syntax '?'\n | TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string\n | ............................................^\nERROR: struct_list_optindex_field:1:83: unsupported syntax '.?'\n | TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string\n | ..................................................................................^"},{"original":{"name":"optional_empty_map_optindex_hasValue","expr":"optional.of({}).?c.hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_empty_map_optindex_hasValue:1:16: unsupported syntax '.?'\n | optional.of({}).?c.hasValue()\n | ...............^"},{"original":{"name":"empty_struct_optindex_hasValue","expr":"TestAllTypes{}.?repeated_string.hasValue()","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: empty_struct_optindex_hasValue:1:15: unsupported syntax '.?'\n | TestAllTypes{}.?repeated_string.hasValue()\n | ..............^"},{"original":{"name":"optional_empty_struct_optindex_hasValue","expr":"optional.of(TestAllTypes{}).?repeated_string.hasValue()","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: optional_empty_struct_optindex_hasValue:1:28: unsupported syntax '.?'\n | optional.of(TestAllTypes{}).?repeated_string.hasValue()\n | ...........................^"},{"original":{"name":"optional_none_optselect_hasValue","expr":"optional.none().?repeated_string.hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_none_optselect_hasValue:1:16: unsupported syntax '.?'\n | optional.none().?repeated_string.hasValue()\n | ...............^"},{"original":{"name":"struct_optindex_value","expr":"TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"stringValue":"foo"}]}}},"error":"ERROR: struct_optindex_value:1:39: unsupported syntax '.?'\n | TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()\n | ......................................^"},{"original":{"name":"optional_struct_optindex_value","expr":"optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()","container":"cel.expr.conformance.proto2","value":{"listValue":{"values":[{"stringValue":"foo"}]}}},"error":"ERROR: optional_struct_optindex_value:1:52: unsupported syntax '.?'\n | optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()\n | ...................................................^"},{"original":{"name":"optional_struct_optindex_index_value","expr":"optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()","container":"cel.expr.conformance.proto2","value":{"stringValue":"foo"}},"error":"ERROR: optional_struct_optindex_index_value:1:52: unsupported syntax '.?'\n | optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()\n | ...................................................^"},{"original":{"name":"empty_list_optindex_hasValue","expr":"[][?0].hasValue()","value":{"boolValue":false}},"error":"ERROR: empty_list_optindex_hasValue:1:3: unsupported syntax '[?'\n | [][?0].hasValue()\n | ..^"},{"original":{"name":"optional_empty_list_optindex_hasValue","expr":"optional.of([])[?0].hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_empty_list_optindex_hasValue:1:16: unsupported syntax '[?'\n | optional.of([])[?0].hasValue()\n | ...............^"},{"original":{"name":"optional_none_optindex_hasValue","expr":"optional.none()[?0].hasValue()","value":{"boolValue":false}},"error":"ERROR: optional_none_optindex_hasValue:1:16: unsupported syntax '[?'\n | optional.none()[?0].hasValue()\n | ...............^"},{"original":{"name":"list_optindex_value","expr":"['foo'][?0].value()","value":{"stringValue":"foo"}},"error":"ERROR: list_optindex_value:1:8: unsupported syntax '[?'\n | ['foo'][?0].value()\n | .......^"},{"original":{"name":"optional_list_optindex_value","expr":"optional.of(['foo'])[?0].value()","value":{"stringValue":"foo"}},"error":"ERROR: optional_list_optindex_value:1:21: unsupported syntax '[?'\n | optional.of(['foo'])[?0].value()\n | ....................^"},{"original":{"name":"map_key_mixed_type_optindex_value","expr":"{true: 1, 2: 2, 5u: 3}[?true].value()","value":{"int64Value":"1"}},"error":"ERROR: map_key_mixed_type_optindex_value:1:23: unsupported syntax '[?'\n | {true: 1, 2: 2, 5u: 3}[?true].value()\n | ......................^"},{"original":{"name":"map_key_mixed_numbers_double_key_optindex_value","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()","value":{"doubleValue":3}},"error":"ERROR: map_key_mixed_numbers_double_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()\n | ..........................^"},{"original":{"name":"map_key_mixed_numbers_uint_key_optindex_value","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()","value":{"doubleValue":2}},"error":"ERROR: map_key_mixed_numbers_uint_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()\n | ..........................^"},{"original":{"name":"map_key_mixed_numbers_int_key_optindex_value","expr":"{1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()","value":{"doubleValue":1}},"error":"ERROR: map_key_mixed_numbers_int_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()\n | ..........................^"},{"original":{"name":"optional_eq_none_none","expr":"optional.none() == optional.none()","value":{"boolValue":true}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.none()~optional_type(dyn)^optional_none,\n optional.none()~optional_type(dyn)^optional_none\n)~bool^equals","type":"bool"},{"original":{"name":"optional_eq_none_int","expr":"optional.none() == optional.of(1)","value":{"boolValue":false}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^equals","type":"bool"},{"original":{"name":"optional_eq_int_none","expr":"optional.of(1) == optional.none()","value":{"boolValue":false}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~bool^equals","type":"bool"},{"original":{"name":"optional_eq_int_int","expr":"optional.of(1) == optional.of(1)","value":{"boolValue":true}},"ast":"_==_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^equals","type":"bool"},{"original":{"name":"optional_ne_none_none","expr":"optional.none() != optional.none()","value":{"boolValue":false}},"ast":"_!=_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n optional.none()~optional_type(dyn)^optional_none,\n optional.none()~optional_type(dyn)^optional_none\n)~bool^not_equals","type":"bool"},{"original":{"name":"optional_ne_none_int","expr":"optional.none() != optional.of(1)","value":{"boolValue":true}},"ast":"_!=_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^not_equals","type":"bool"},{"original":{"name":"optional_ne_int_none","expr":"optional.of(1) != optional.none()","value":{"boolValue":true}},"ast":"_!=_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~bool^not_equals","type":"bool"},{"original":{"name":"optional_ne_int_int","expr":"optional.of(1) != optional.of(1)","value":{"boolValue":false}},"ast":"_!=_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^not_equals","type":"bool"},{"original":{"name":"map_optional_has","expr":"has({'foo': optional.none()}.foo)","value":{"boolValue":true}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.foo~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"foo\"~string:optional.none()~optional_type(dyn)^optional_none\n}~map(string, optional_type(dyn)).foo~test-only~~bool","type":"bool"},{"original":{"name":"map_optional_select_has","expr":"has({'foo': optional.none()}.foo.bar)","value":{"boolValue":false}},"ast":"{\n \"foo\"^#*expr.Constant_StringValue#:optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.foo^#*expr.Expr_SelectExpr#.bar~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"foo\"~string:optional.none()~optional_type(dyn)^optional_none\n}~map(string, optional_type(dyn)).foo~optional_type(dyn).bar~test-only~~bool","type":"bool"},{"original":{"name":"map_optional_entry_has","expr":"has({?'foo': optional.none()}.foo)","value":{"boolValue":false}},"error":"ERROR: map_optional_entry_has:1:6: unsupported syntax '?'\n | has({?'foo': optional.none()}.foo)\n | .....^"}]}]},{"name":"parse","suites":[{"name":"nest","tests":[{"original":{"name":"list_index","description":"Member = Member '[' Expr ']'. Nested indices are supported up to 12 times.","expr":"a[a[a[a[a[a[a[a[a[a[a[a[0]]]]]]]]]]]]","typeEnv":[{"name":"a","ident":{"type":{"listType":{"elemType":{"primitive":"INT64"}}}}}],"bindings":{"a":{"value":{"listValue":{"values":[{"int64Value":"0"}]}}}},"value":{"int64Value":"0"}},"ast":"_[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n 0~int\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n)~int^index_list","type":"int"},{"original":{"name":"message_literal","description":"Member = Member '{' [FieldInits] '}'. Nested messages supported up to 12 levels deep.","expr":"NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{payload: TestAllTypes{single_int64: 137}}}}}}}}}}}}.payload.single_int64","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n payload:TestAllTypes{\n single_int64:137^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.payload^#*expr.Expr_SelectExpr#.single_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n payload:cel.expr.conformance.proto3.TestAllTypes{\n single_int64:137~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n}~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes.payload~cel.expr.conformance.proto3.TestAllTypes.single_int64~int","type":"int"},{"original":{"name":"funcall","description":"Primary = ['.'] IDENT ['(' [ExprList] ')']. Nested function calls supported up to 12 levels deep.","expr":"int(uint(int(uint(int(uint(int(uint(int(uint(int(uint(7))))))))))))","value":{"int64Value":"7"}},"ast":"int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n 7~int\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n)~int^uint64_to_int64","type":"int"},{"original":{"name":"list_literal","description":"Primary = '[' [ExprList] ']'. Nested list literals up to 12 levels deep.","expr":"size([[[[[[[[[[[[0]]]]]]]]]]]])","value":{"int64Value":"1"}},"ast":"size(\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n 0~int\n ]~list(int)\n ]~list(list(int))\n ]~list(list(list(int)))\n ]~list(list(list(list(int))))\n ]~list(list(list(list(list(int)))))\n ]~list(list(list(list(list(list(int))))))\n ]~list(list(list(list(list(list(list(int)))))))\n ]~list(list(list(list(list(list(list(list(int))))))))\n ]~list(list(list(list(list(list(list(list(list(int)))))))))\n ]~list(list(list(list(list(list(list(list(list(list(int))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(int)))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(list(int))))))))))))\n)~int^size_list","type":"int"},{"original":{"name":"map_literal","description":"Primary = '{' [MapInits] '}'. Nested map literals up to 12 levels deep.","expr":"size({0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: 'foo'}}}}}}}}}}}})","value":{"int64Value":"1"}},"ast":"size(\n {\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n {\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:\"foo\"~string\n }~map(int, string)\n }~map(int, map(int, string))\n }~map(int, map(int, map(int, string)))\n }~map(int, map(int, map(int, map(int, string))))\n }~map(int, map(int, map(int, map(int, map(int, string)))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, string))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))))))\n)~int^size_map","type":"int"},{"original":{"name":"parens","description":"Primary = '(' Expr ')'","expr":"((((((((((((((((((((((((((((((((7))))))))))))))))))))))))))))))))","value":{"int64Value":"7"}},"error":"ERROR: parens:-1:0: expression recursion limit exceeded: 32"}]},{"name":"repeat","tests":[{"original":{"name":"conditional","description":"Expr = ConditionalOr ['?' ConditionalOr ':' Expr]. Chained ternary operators up to 24 levels.","expr":"true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : false","value":{"boolValue":true}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n false~bool\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n)~bool^conditional","type":"bool"},{"original":{"name":"or","description":"ConditionalOr = [ConditionalOr '||'] ConditionalAnd. Logical OR statements with 32 conditions.","expr":"false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || true","value":{"boolValue":true}},"ast":"_||_(\n _||_(\n _||_(\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_||_(\n _||_(\n _||_(\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n true~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n)~bool^logical_or","type":"bool"},{"original":{"name":"and","description":"ConditionalAnd = [ConditionalAnd '\u0026\u0026'] Relation. Logical AND statements with 32 conditions.","expr":"true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 false","value":{"boolValue":false}},"ast":"_\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n false~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n)~bool^logical_and","type":"bool"},{"original":{"name":"add_sub","description":"Addition = [Addition ('+' | '-')] Multiplication. Addition operators are supported up to 24 times consecutively.","expr":"3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3","value":{"int64Value":"3"}},"ast":"_+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n 3^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n 3~int,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n)~int^add_int64","type":"int"},{"original":{"name":"mul_div","description":"Multiplication = [Multiplication ('*' | '/' | '%')] Unary. Multiplication operators are supported up to 24 times consecutively.","expr":"4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4","value":{"int64Value":"4"}},"ast":"_/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n 4^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n 4~int,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n)~int^divide_int64","type":"int"},{"original":{"name":"not","description":"Unary = '!' {'!'} Member","expr":"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!true","value":{"boolValue":true}},"ast":"true^#*expr.Constant_BoolValue#","checkedAst":"true~bool","type":"bool"},{"original":{"name":"unary_neg","description":"Unary = '-' {'-'} Member","expr":"--------------------------------19","value":{"int64Value":"19"}},"ast":"19^#*expr.Constant_Int64Value#","checkedAst":"19~int","type":"int"},{"original":{"name":"select","description":"Member = Member '.' IDENT ['(' [ExprList] ')']. Selection is supported up to 12 times consecutively.","expr":"NestedTestAllTypes{}.child.child.child.child.child.child.child.child.child.child.payload.single_int32","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"NestedTestAllTypes{}^#*expr.Expr_StructExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.payload^#*expr.Expr_SelectExpr#.single_int32^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.NestedTestAllTypes{}~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.payload~cel.expr.conformance.proto3.TestAllTypes.single_int32~int","type":"int"},{"original":{"name":"index","description":"Member = Member '[' Expr ']'. Indexing is supported up to 12 times consecutively.","expr":"[[[[[[[[[[[['foo']]]]]]]]]]]][0][0][0][0][0][0][0][0][0][0][0][0]","value":{"stringValue":"foo"}},"ast":"_[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n \"foo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n \"foo\"~string\n ]~list(string)\n ]~list(list(string))\n ]~list(list(list(string)))\n ]~list(list(list(list(string))))\n ]~list(list(list(list(list(string)))))\n ]~list(list(list(list(list(list(string))))))\n ]~list(list(list(list(list(list(list(string)))))))\n ]~list(list(list(list(list(list(list(list(string))))))))\n ]~list(list(list(list(list(list(list(list(list(string)))))))))\n ]~list(list(list(list(list(list(list(list(list(list(string))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(string)))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(list(string)))))))))))),\n 0~int\n )~list(list(list(list(list(list(list(list(list(list(list(string)))))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(list(list(string))))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(list(string)))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(string))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(string)))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(string))))))^index_list,\n 0~int\n )~list(list(list(list(list(string)))))^index_list,\n 0~int\n )~list(list(list(list(string))))^index_list,\n 0~int\n )~list(list(list(string)))^index_list,\n 0~int\n )~list(list(string))^index_list,\n 0~int\n )~list(string)^index_list,\n 0~int\n)~string^index_list","type":"string"},{"original":{"name":"list_literal","description":"Primary = '[' [ExprList] ']'. List literals with up to 32 elements.","expr":"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31][17]","value":{"int64Value":"17"}},"ast":"_[_](\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#,\n 10^#*expr.Constant_Int64Value#,\n 11^#*expr.Constant_Int64Value#,\n 12^#*expr.Constant_Int64Value#,\n 13^#*expr.Constant_Int64Value#,\n 14^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#,\n 16^#*expr.Constant_Int64Value#,\n 17^#*expr.Constant_Int64Value#,\n 18^#*expr.Constant_Int64Value#,\n 19^#*expr.Constant_Int64Value#,\n 20^#*expr.Constant_Int64Value#,\n 21^#*expr.Constant_Int64Value#,\n 22^#*expr.Constant_Int64Value#,\n 23^#*expr.Constant_Int64Value#,\n 24^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#,\n 26^#*expr.Constant_Int64Value#,\n 27^#*expr.Constant_Int64Value#,\n 28^#*expr.Constant_Int64Value#,\n 29^#*expr.Constant_Int64Value#,\n 30^#*expr.Constant_Int64Value#,\n 31^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int,\n 5~int,\n 6~int,\n 7~int,\n 8~int,\n 9~int,\n 10~int,\n 11~int,\n 12~int,\n 13~int,\n 14~int,\n 15~int,\n 16~int,\n 17~int,\n 18~int,\n 19~int,\n 20~int,\n 21~int,\n 22~int,\n 23~int,\n 24~int,\n 25~int,\n 26~int,\n 27~int,\n 28~int,\n 29~int,\n 30~int,\n 31~int\n ]~list(int),\n 17~int\n)~int^index_list","type":"int"},{"original":{"name":"map_literal","description":"Primary = '{' [MapInits] '}'. Map literals with up to 32 entries.","expr":"{0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 21: 'twenty-one', 22: 'twenty-two', 23: 'twenty-three', 24: 'twenty-four', 25: 'twenty-five', 26: 'twenty-six', 27: 'twenty-seven', 28: 'twenty-eight', 29: 'twenty-nine', 30: 'thirty', 31: 'thirty-one'}[17]","value":{"stringValue":"seventeen"}},"ast":"_[_](\n {\n 0^#*expr.Constant_Int64Value#:\"zero\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:\"one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:\"two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:\"three\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 4^#*expr.Constant_Int64Value#:\"four\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:\"five\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 6^#*expr.Constant_Int64Value#:\"six\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:\"seven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:\"eight\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 9^#*expr.Constant_Int64Value#:\"nine\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 10^#*expr.Constant_Int64Value#:\"ten\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 11^#*expr.Constant_Int64Value#:\"eleven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 12^#*expr.Constant_Int64Value#:\"twelve\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 13^#*expr.Constant_Int64Value#:\"thirteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 14^#*expr.Constant_Int64Value#:\"fourteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 15^#*expr.Constant_Int64Value#:\"fifteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 16^#*expr.Constant_Int64Value#:\"sixteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 17^#*expr.Constant_Int64Value#:\"seventeen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 18^#*expr.Constant_Int64Value#:\"eighteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 19^#*expr.Constant_Int64Value#:\"nineteen\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 20^#*expr.Constant_Int64Value#:\"twenty\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 21^#*expr.Constant_Int64Value#:\"twenty-one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 22^#*expr.Constant_Int64Value#:\"twenty-two\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 23^#*expr.Constant_Int64Value#:\"twenty-three\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 24^#*expr.Constant_Int64Value#:\"twenty-four\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 25^#*expr.Constant_Int64Value#:\"twenty-five\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 26^#*expr.Constant_Int64Value#:\"twenty-six\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 27^#*expr.Constant_Int64Value#:\"twenty-seven\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 28^#*expr.Constant_Int64Value#:\"twenty-eight\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 29^#*expr.Constant_Int64Value#:\"twenty-nine\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 30^#*expr.Constant_Int64Value#:\"thirty\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 31^#*expr.Constant_Int64Value#:\"thirty-one\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n 0~int:\"zero\"~string,\n 1~int:\"one\"~string,\n 2~int:\"two\"~string,\n 3~int:\"three\"~string,\n 4~int:\"four\"~string,\n 5~int:\"five\"~string,\n 6~int:\"six\"~string,\n 7~int:\"seven\"~string,\n 8~int:\"eight\"~string,\n 9~int:\"nine\"~string,\n 10~int:\"ten\"~string,\n 11~int:\"eleven\"~string,\n 12~int:\"twelve\"~string,\n 13~int:\"thirteen\"~string,\n 14~int:\"fourteen\"~string,\n 15~int:\"fifteen\"~string,\n 16~int:\"sixteen\"~string,\n 17~int:\"seventeen\"~string,\n 18~int:\"eighteen\"~string,\n 19~int:\"nineteen\"~string,\n 20~int:\"twenty\"~string,\n 21~int:\"twenty-one\"~string,\n 22~int:\"twenty-two\"~string,\n 23~int:\"twenty-three\"~string,\n 24~int:\"twenty-four\"~string,\n 25~int:\"twenty-five\"~string,\n 26~int:\"twenty-six\"~string,\n 27~int:\"twenty-seven\"~string,\n 28~int:\"twenty-eight\"~string,\n 29~int:\"twenty-nine\"~string,\n 30~int:\"thirty\"~string,\n 31~int:\"thirty-one\"~string\n }~map(int, string),\n 17~int\n)~string^index_map","type":"string"},{"original":{"name":"message_literal","description":"Member = Member '{' [FieldInits] '}'. Message literals with up to 32 fields.","expr":"TestAllTypes{single_int32: 5, single_int64: 10, single_uint32: 15u, single_uint64: 20u, single_sint32: 25, single_sint64: 30, single_fixed32: 35u, single_fixed64: 40u, single_float: 45.0, single_double: 50.0, single_bool: true, single_string: 'sixty', single_bytes: b'sixty-five', single_value: 70.0, single_int64_wrapper: 75, single_int32_wrapper: 80, single_double_wrapper: 85.0, single_float_wrapper: 90.0, single_uint64_wrapper: 95u, single_uint32_wrapper: 100u, single_string_wrapper: 'one hundred five', single_bool_wrapper: true, repeated_int32: [115], repeated_int64: [120], repeated_uint32: [125u], repeated_uint64: [130u], repeated_sint32: [135], repeated_sint64: [140], repeated_fixed32: [145u], repeated_fixed64: [150u], repeated_sfixed32: [155], repeated_float: [160.0]}.single_sint64","container":"cel.expr.conformance.proto3","value":{"int64Value":"30"}},"ast":"TestAllTypes{\n single_int32:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_int64:10^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint32:15u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint64:20u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_sint32:25^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_sint64:30^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_fixed32:35u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_fixed64:40u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_float:45^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_double:50^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n single_string:\"sixty\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bytes:b\"sixty-five\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#,\n single_value:70^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_int64_wrapper:75^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_int32_wrapper:80^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_double_wrapper:85^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_float_wrapper:90^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_uint64_wrapper:95u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint32_wrapper:100u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string_wrapper:\"one hundred five\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n repeated_int32:[\n 115^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_int64:[\n 120^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_uint32:[\n 125u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_uint64:[\n 130u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sint32:[\n 135^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sint64:[\n 140^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_fixed32:[\n 145u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_fixed64:[\n 150u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sfixed32:[\n 155^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_float:[\n 160^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_sint64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32:5~int,\n single_int64:10~int,\n single_uint32:15u~uint,\n single_uint64:20u~uint,\n single_sint32:25~int,\n single_sint64:30~int,\n single_fixed32:35u~uint,\n single_fixed64:40u~uint,\n single_float:45~double,\n single_double:50~double,\n single_bool:true~bool,\n single_string:\"sixty\"~string,\n single_bytes:b\"sixty-five\"~bytes,\n single_value:70~double,\n single_int64_wrapper:75~int,\n single_int32_wrapper:80~int,\n single_double_wrapper:85~double,\n single_float_wrapper:90~double,\n single_uint64_wrapper:95u~uint,\n single_uint32_wrapper:100u~uint,\n single_string_wrapper:\"one hundred five\"~string,\n single_bool_wrapper:true~bool,\n repeated_int32:[\n 115~int\n ]~list(int),\n repeated_int64:[\n 120~int\n ]~list(int),\n repeated_uint32:[\n 125u~uint\n ]~list(uint),\n repeated_uint64:[\n 130u~uint\n ]~list(uint),\n repeated_sint32:[\n 135~int\n ]~list(int),\n repeated_sint64:[\n 140~int\n ]~list(int),\n repeated_fixed32:[\n 145u~uint\n ]~list(uint),\n repeated_fixed64:[\n 150u~uint\n ]~list(uint),\n repeated_sfixed32:[\n 155~int\n ]~list(int),\n repeated_float:[\n 160~double\n ]~list(double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_sint64~int","type":"int"}]},{"name":"string_literals","tests":[{"original":{"name":"single_quoted","expr":"'hello'","value":{"stringValue":"hello"}},"ast":"\"hello\"^#*expr.Constant_StringValue#","checkedAst":"\"hello\"~string","type":"string"},{"original":{"name":"double_quoted","expr":"\"hello\"","value":{"stringValue":"hello"}},"ast":"\"hello\"^#*expr.Constant_StringValue#","checkedAst":"\"hello\"~string","type":"string"},{"original":{"name":"triple_single_quoted","expr":"'''hello'''","value":{"stringValue":"hello"}},"ast":"\"hello\"^#*expr.Constant_StringValue#","checkedAst":"\"hello\"~string","type":"string"},{"original":{"name":"triple_double_quoted","expr":"\"\"\"hello\"\"\"","value":{"stringValue":"hello"}},"ast":"\"hello\"^#*expr.Constant_StringValue#","checkedAst":"\"hello\"~string","type":"string"},{"original":{"name":"single_quoted_escaped_punctuation","expr":"' \\\\ \\? \\\" \\' \\` '","value":{"stringValue":" \\ ? \" ' ` "}},"ast":"\" \\\\ ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\ ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_punctuation","expr":"\" \\\\ \\? \\\" \\' \\` \"","value":{"stringValue":" \\ ? \" ' ` "}},"ast":"\" \\\\ ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\ ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_punctuation","expr":"''' \\\\ \\? \\\" \\' \\` '''","value":{"stringValue":" \\ ? \" ' ` "}},"ast":"\" \\\\ ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\ ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_punctuation","expr":"\"\"\" \\\\ \\? \\\" \\' \\` \"\"\"","value":{"stringValue":" \\ ? \" ' ` "}},"ast":"\" \\\\ ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\ ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"triple_single_quoted_unescaped_punctuation","expr":"''' ? \" ' ` '''","value":{"stringValue":" ? \" ' ` "}},"ast":"\" ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"triple_double_quoted_unescaped_punctuation","expr":"\"\"\" ? \" ' ` \"\"\"","value":{"stringValue":" ? \" ' ` "}},"ast":"\" ? \\\" ' ` \"^#*expr.Constant_StringValue#","checkedAst":"\" ? \\\" ' ` \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_special_control_characters","expr":"' \\a \\b \\f \\t \\v '","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_special_control_characters","expr":"\" \\a \\b \\f \\t \\v \"","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"single_quoted_unescaped_special_control_characters","expr":"' \u0007 \b \f \t \u000b '","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"double_quoted_unescaped_special_control_characters","expr":"\" \u0007 \b \f \t \u000b \"","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_special_control_characters","expr":"''' \\a \\b \\f \\t \\v '''","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_special_control_characters","expr":"\"\"\" \\a \\b \\f \\t \\v \"\"\"","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"triple_single_quoted_unescaped_special_control_characters","expr":"''' \u0007 \b \f \t \u000b '''","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"triple_double_quoted_unescaped_special_control_characters","expr":"\"\"\" \u0007 \b \f \t \u000b \"\"\"","value":{"stringValue":" \u0007 \b \f \t \u000b "}},"ast":"\" \\a \\b \\f \\t \\v \"^#*expr.Constant_StringValue#","checkedAst":"\" \\a \\b \\f \\t \\v \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_line_feed","expr":"' \\n '","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_line_feed","expr":"\" \\n \"","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_line_feed","expr":"''' \\n '''","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_line_feed","expr":"\"\"\" \\n \"\"\"","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"triple_single_quoted_unescaped_line_feed","expr":"''' \n '''","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"triple_double_quoted_unescaped_line_feed","expr":"\"\"\" \n \"\"\"","value":{"stringValue":" \n "}},"ast":"\" \\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\n \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_carriage_return","expr":"' \\r '","value":{"stringValue":" \r "}},"ast":"\" \\r \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_carriage_return","expr":"\" \\r \"","value":{"stringValue":" \r "}},"ast":"\" \\r \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_carriage_return","expr":"''' \\r '''","value":{"stringValue":" \r "}},"ast":"\" \\r \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_carriage_return","expr":"\"\"\" \\r \"\"\"","value":{"stringValue":" \r "}},"ast":"\" \\r \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_windows_line_end","expr":"' \\r\\n '","value":{"stringValue":" \r\n "}},"ast":"\" \\r\\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r\\n \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_windows_line_end","expr":"\" \\r\\n \"","value":{"stringValue":" \r\n "}},"ast":"\" \\r\\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r\\n \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_windows_line_end","expr":"''' \\r\\n '''","value":{"stringValue":" \r\n "}},"ast":"\" \\r\\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r\\n \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_windows_line_end","expr":"\"\"\" \\r\\n \"\"\"","value":{"stringValue":" \r\n "}},"ast":"\" \\r\\n \"^#*expr.Constant_StringValue#","checkedAst":"\" \\r\\n \"~string","type":"string"},{"original":{"name":"single_quoted_escaped_all_control_characters","expr":"' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_escaped_all_control_characters","expr":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F \"","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_unescaped_all_control_characters","expr":"' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_unescaped_all_control_characters","expr":"\" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  \"","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_escaped_all_control_characters","expr":"''' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '''","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_escaped_all_control_characters","expr":"\"\"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F \"\"\"","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_unescaped_all_control_characters","expr":"''' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '''","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_unescaped_all_control_characters","expr":"\"\"\" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  \"\"\"","value":{"stringValue":" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "}},"ast":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_octal_escapes","expr":"' \\000 \\012 \\177 '","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_octal_escapes","expr":"\" \\000 \\012 \\177 \"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_octal_escapes","expr":"''' \\000 \\012 \\177 '''","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_octal_escapes","expr":"\"\"\" \\000 \\012 \\177 \"\"\"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_lower_x_escapes","expr":"' \\x00 \\x0A \\x7F '","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_lower_x_escapes","expr":"\" \\x00 \\x0A \\x7F \"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_lower_x_escapes","expr":"''' \\x00 \\x0A \\x7F '''","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_lower_x_escapes","expr":"\"\"\" \\x00 \\x0A \\x7F \"\"\"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_upper_x_escapes","expr":"' \\X00 \\X0A \\X7F '","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"double_quoted_upper_x_escapes","expr":"\" \\X00 \\X0A \\X7F \"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_single_quoted_upper_x_escapes","expr":"''' \\X00 \\X0A \\X7F '''","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"triple_double_quoted_upper_x_escapes","expr":"\"\"\" \\X00 \\X0A \\X7F \"\"\"","value":{"stringValue":" \u0000 \n  "}},"ast":"\" \\x00 \\n \\x7f \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f \"~string","type":"string"},{"original":{"name":"single_quoted_lower_u_escapes","expr":"' \\u0000 \\u000A \\u007F \\u0100 \\uFFFB '","value":{"stringValue":" \u0000 \n  Ā  "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb \"~string","type":"string"},{"original":{"name":"double_quoted_lower_u_escapes","expr":"\" \\u0000 \\u000A \\u007F \\u0100 \\uFFFB \"","value":{"stringValue":" \u0000 \n  Ā  "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb \"~string","type":"string"},{"original":{"name":"triple_single_quoted_lower_u_escapes","expr":"''' \\u0000 \\u000A \\u007F \\u0100 \\uFFFB '''","value":{"stringValue":" \u0000 \n  Ā  "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb \"~string","type":"string"},{"original":{"name":"triple_double_quoted_lower_u_escapes","expr":"\"\"\" \\u0000 \\u000A \\u007F \\u0100 \\uFFFB \"\"\"","value":{"stringValue":" \u0000 \n  Ā  "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb \"~string","type":"string"},{"original":{"name":"single_quoted_upper_u_escapes","expr":"' \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C '","value":{"stringValue":" \u0000 \n  Ā  𐀀 😬 "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"~string","type":"string"},{"original":{"name":"double_quoted_upper_u_escapes","expr":"\" \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C \"","value":{"stringValue":" \u0000 \n  Ā  𐀀 😬 "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"~string","type":"string"},{"original":{"name":"triple_single_quoted_upper_u_escapes","expr":"''' \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C '''","value":{"stringValue":" \u0000 \n  Ā  𐀀 😬 "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"~string","type":"string"},{"original":{"name":"triple_double_quoted_upper_u_escapes","expr":"\"\"\" \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C \"\"\"","value":{"stringValue":" \u0000 \n  Ā  𐀀 😬 "}},"ast":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 \"~string","type":"string"},{"original":{"name":"mixed_case_hex_single_quoted_escapes","expr":"' \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB '","value":{"stringValue":" J K L M ƫ ƫ "}},"ast":"\" J K L M ƫ ƫ \"^#*expr.Constant_StringValue#","checkedAst":"\" J K L M ƫ ƫ \"~string","type":"string"},{"original":{"name":"mixed_case_hex_double_quoted_escapes","expr":"\" \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB \"","value":{"stringValue":" J K L M ƫ ƫ "}},"ast":"\" J K L M ƫ ƫ \"^#*expr.Constant_StringValue#","checkedAst":"\" J K L M ƫ ƫ \"~string","type":"string"},{"original":{"name":"mixed_case_hex_triple_single_quoted_escapes","expr":"''' \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB '''","value":{"stringValue":" J K L M ƫ ƫ "}},"ast":"\" J K L M ƫ ƫ \"^#*expr.Constant_StringValue#","checkedAst":"\" J K L M ƫ ƫ \"~string","type":"string"},{"original":{"name":"mixed_case_hex_triple_double_quoted_escapes","expr":"\"\"\" \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB \"\"\"","value":{"stringValue":" J K L M ƫ ƫ "}},"ast":"\" J K L M ƫ ƫ \"^#*expr.Constant_StringValue#","checkedAst":"\" J K L M ƫ ƫ \"~string","type":"string"},{"original":{"name":"unassigned_code_point_single_quoted_escapes","expr":"' \\U00088888 '","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_double_quoted_escapes","expr":"\" \\U00088888 \"","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_triple_single_quoted_escapes","expr":"''' \\U00088888 '''","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_triple_double_quoted_escapes","expr":"\"\"\" \\U00088888 \"\"\"","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_single_quoted_unescaped","expr":"' 򈢈 '","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_double_quoted_unescaped","expr":"\" 򈢈 \"","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_triple_single_quoted_unescaped","expr":"''' 򈢈 '''","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"unassigned_code_point_triple_double_quoted_unescaped","expr":"\"\"\" 򈢈 \"\"\"","value":{"stringValue":" 򈢈 "}},"ast":"\" \\U00088888 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\U00088888 \"~string","type":"string"},{"original":{"name":"raw_single_quoted_escapes","expr":"r' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '","value":{"stringValue":" \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"raw_double_quoted_escapes","expr":"r\" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"","value":{"stringValue":" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"raw_triple_single_quoted_escapes","expr":"r''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''","value":{"stringValue":" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"raw_triple_double_quoted_escapes","expr":"r\"\"\" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"\"\"","value":{"stringValue":" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"upper_raw_single_quoted_escapes","expr":"R' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '","value":{"stringValue":" \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"upper_raw_double_quoted_escapes","expr":"R\" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"","value":{"stringValue":" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"upper_raw_triple_single_quoted_escapes","expr":"R''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''","value":{"stringValue":" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"},{"original":{"name":"upper_raw_triple_double_quoted_escapes","expr":"R\"\"\" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"\"\"","value":{"stringValue":" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "}},"ast":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_StringValue#","checkedAst":"\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~string","type":"string"}]},{"name":"bytes_literals","tests":[{"original":{"name":"single_quoted","expr":"b'hello'","value":{"bytesValue":"aGVsbG8="}},"ast":"b\"hello\"^#*expr.Constant_BytesValue#","checkedAst":"b\"hello\"~bytes","type":"bytes"},{"original":{"name":"double_quoted","expr":"b\"hello\"","value":{"bytesValue":"aGVsbG8="}},"ast":"b\"hello\"^#*expr.Constant_BytesValue#","checkedAst":"b\"hello\"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted","expr":"b'''hello'''","value":{"bytesValue":"aGVsbG8="}},"ast":"b\"hello\"^#*expr.Constant_BytesValue#","checkedAst":"b\"hello\"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted","expr":"b\"\"\"hello\"\"\"","value":{"bytesValue":"aGVsbG8="}},"ast":"b\"hello\"^#*expr.Constant_BytesValue#","checkedAst":"b\"hello\"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_punctuation","expr":"b' \\\\ \\? \\\" \\' \\` '","value":{"bytesValue":"IFwgPyAiICcgYCA="}},"ast":"b\" \\\\ ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\ ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_punctuation","expr":"b\" \\\\ \\? \\\" \\' \\` \"","value":{"bytesValue":"IFwgPyAiICcgYCA="}},"ast":"b\" \\\\ ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\ ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_punctuation","expr":"b''' \\\\ \\? \\\" \\' \\` '''","value":{"bytesValue":"IFwgPyAiICcgYCA="}},"ast":"b\" \\\\ ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\ ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_punctuation","expr":"b\"\"\" \\\\ \\? \\\" \\' \\` \"\"\"","value":{"bytesValue":"IFwgPyAiICcgYCA="}},"ast":"b\" \\\\ ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\ ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_unescaped_punctuation","expr":"b''' ? \" ' ` '''","value":{"bytesValue":"ID8gIiAnIGAg"}},"ast":"b\" ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_unescaped_punctuation","expr":"b\"\"\" ? \" ' ` \"\"\"","value":{"bytesValue":"ID8gIiAnIGAg"}},"ast":"b\" ? \\\" ' ` \"^#*expr.Constant_BytesValue#","checkedAst":"b\" ? \\\" ' ` \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_special_control_characters","expr":"b' \\a \\b \\f \\t \\v '","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_special_control_characters","expr":"b\" \\a \\b \\f \\t \\v \"","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_unescaped_special_control_characters","expr":"b' \u0007 \b \f \t \u000b '","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_unescaped_special_control_characters","expr":"b\" \u0007 \b \f \t \u000b \"","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_special_control_characters","expr":"b''' \\a \\b \\f \\t \\v '''","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_special_control_characters","expr":"b\"\"\" \\a \\b \\f \\t \\v \"\"\"","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_unescaped_special_control_characters","expr":"b''' \u0007 \b \f \t \u000b '''","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_unescaped_special_control_characters","expr":"b\"\"\" \u0007 \b \f \t \u000b \"\"\"","value":{"bytesValue":"IAcgCCAMIAkgCyA="}},"ast":"b\" \\a \\b \\f \\t \\v \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\a \\b \\f \\t \\v \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_line_feed","expr":"b' \\n '","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_line_feed","expr":"b\" \\n \"","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_line_feed","expr":"b''' \\n '''","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_line_feed","expr":"b\"\"\" \\n \"\"\"","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_unescaped_line_feed","expr":"b''' \n '''","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_unescaped_line_feed","expr":"b\"\"\" \n \"\"\"","value":{"bytesValue":"IAog"}},"ast":"b\" \\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\n \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_carriage_return","expr":"b' \\r '","value":{"bytesValue":"IA0g"}},"ast":"b\" \\r \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_carriage_return","expr":"b\" \\r \"","value":{"bytesValue":"IA0g"}},"ast":"b\" \\r \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_carriage_return","expr":"b''' \\r '''","value":{"bytesValue":"IA0g"}},"ast":"b\" \\r \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_carriage_return","expr":"b\"\"\" \\r \"\"\"","value":{"bytesValue":"IA0g"}},"ast":"b\" \\r \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_windows_line_end","expr":"b' \\r\\n '","value":{"bytesValue":"IA0KIA=="}},"ast":"b\" \\r\\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r\\n \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_windows_line_end","expr":"b\" \\r\\n \"","value":{"bytesValue":"IA0KIA=="}},"ast":"b\" \\r\\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r\\n \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_windows_line_end","expr":"b''' \\r\\n '''","value":{"bytesValue":"IA0KIA=="}},"ast":"b\" \\r\\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r\\n \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_windows_line_end","expr":"b\"\"\" \\r\\n \"\"\"","value":{"bytesValue":"IA0KIA=="}},"ast":"b\" \\r\\n \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\r\\n \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_escaped_all_control_characters","expr":"b' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_escaped_all_control_characters","expr":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F \"","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_unescaped_all_control_characters","expr":"b' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_unescaped_all_control_characters","expr":"b\" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  \"","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_escaped_all_control_characters","expr":"b''' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '''","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_escaped_all_control_characters","expr":"b\"\"\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F \"\"\"","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_unescaped_all_control_characters","expr":"b''' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '''","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_unescaped_all_control_characters","expr":"b\"\"\" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  \"\"\"","value":{"bytesValue":"IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA=="}},"ast":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_octal_escapes","expr":"b' \\000 \\012 \\177 \\377 '","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_octal_escapes","expr":"b\" \\000 \\012 \\177 \\377 \"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_octal_escapes","expr":"b''' \\000 \\012 \\177 \\377 '''","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_octal_escapes","expr":"b\"\"\" \\000 \\012 \\177 \\377 \"\"\"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_lower_x_escapes","expr":"b' \\x00 \\x0A \\x7F \\xFF '","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_lower_x_escapes","expr":"b\" \\x00 \\x0A \\x7F \\xFF \"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_lower_x_escapes","expr":"b''' \\x00 \\x0A \\x7F \\xFF '''","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_lower_x_escapes","expr":"b\"\"\" \\x00 \\x0A \\x7F \\xFF \"\"\"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"single_quoted_upper_x_escapes","expr":"b' \\X00 \\X0A \\X7F \\XFF '","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"double_quoted_upper_x_escapes","expr":"b\" \\X00 \\X0A \\X7F \\XFF \"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_single_quoted_upper_x_escapes","expr":"b''' \\X00 \\X0A \\X7F \\XFF '''","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"triple_double_quoted_upper_x_escapes","expr":"b\"\"\" \\X00 \\X0A \\X7F \\XFF \"\"\"","value":{"bytesValue":"IAAgCiB/IP8g"}},"ast":"b\" \\x00 \\n \\x7f \\xff \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\x00 \\n \\x7f \\xff \"~bytes","type":"bytes"},{"original":{"name":"mixed_case_hex_single_quoted_escapes","expr":"B' \\x4a \\x4B \\X4c \\X4D '","value":{"bytesValue":"IEogSyBMIE0g"}},"ast":"b\" J K L M \"^#*expr.Constant_BytesValue#","checkedAst":"b\" J K L M \"~bytes","type":"bytes"},{"original":{"name":"mixed_case_hex_double_quoted_escapes","expr":"B\" \\x4a \\x4B \\X4c \\X4D \"","value":{"bytesValue":"IEogSyBMIE0g"}},"ast":"b\" J K L M \"^#*expr.Constant_BytesValue#","checkedAst":"b\" J K L M \"~bytes","type":"bytes"},{"original":{"name":"mixed_case_hex_triple_single_quoted_escapes","expr":"B''' \\x4a \\x4B \\X4c \\X4D '''","value":{"bytesValue":"IEogSyBMIE0g"}},"ast":"b\" J K L M \"^#*expr.Constant_BytesValue#","checkedAst":"b\" J K L M \"~bytes","type":"bytes"},{"original":{"name":"mixed_case_hex_triple_double_quoted_escapes","expr":"B\"\"\" \\x4a \\x4B \\X4c \\X4D \"\"\"","value":{"bytesValue":"IEogSyBMIE0g"}},"ast":"b\" J K L M \"^#*expr.Constant_BytesValue#","checkedAst":"b\" J K L M \"~bytes","type":"bytes"},{"original":{"name":"raw_single_quoted_escapes","expr":"br' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '","value":{"bytesValue":"IFxcIFw/IFwiIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"raw_double_quoted_escapes","expr":"br\" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"","value":{"bytesValue":"IFxcIFw/IFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"raw_triple_single_quoted_escapes","expr":"br''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''","value":{"bytesValue":"IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"raw_triple_double_quoted_escapes","expr":"br\"\"\" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"\"\"","value":{"bytesValue":"IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"upper_raw_single_quoted_escapes","expr":"bR' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '","value":{"bytesValue":"IFxcIFw/IFwiIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"upper_raw_double_quoted_escapes","expr":"bR\" \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"","value":{"bytesValue":"IFxcIFw/IFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"upper_raw_triple_single_quoted_escapes","expr":"bR''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''","value":{"bytesValue":"IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"},{"original":{"name":"upper_raw_triple_double_quoted_escapes","expr":"bR\"\"\" \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 \"\"\"","value":{"bytesValue":"IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA=="}},"ast":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"^#*expr.Constant_BytesValue#","checkedAst":"b\" \\\\\\\\ \\\\? \\\\\\\" \\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 \"~bytes","type":"bytes"}]},{"name":"whitespace","tests":[{"original":{"name":"spaces","description":"Check that spaces are ignored.","expr":"[ . cel. expr .conformance. proto3. TestAllTypes { single_int64 : int ( 17 ) } . single_int64 ] [ 0 ] == ( 18 - 1 ) \u0026\u0026 ! false ? 1 : 2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"tabs","description":"Check that tabs (`\\t`) are ignored.","expr":"[\t.\tcel.\texpr\t.conformance.\tproto3.\tTestAllTypes\t{\tsingle_int64\t:\tint\t(\t17\t)\t}\t.\tsingle_int64\t]\t[\t0\t]\t==\t(\t18\t-\t1\t)\t\u0026\u0026\t!\tfalse\t?\t1\t:\t2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"new_lines","description":"Check that new lines (`\\n`) are ignored.","expr":"[\n.\ncel.\nexpr\n.conformance.\nproto3.\nTestAllTypes\n{\nsingle_int64\n:\nint\n(\n17\n)\n}\n.\nsingle_int64\n]\n[\n0\n]\n==\n(\n18\n-\n1\n)\n\u0026\u0026\n!\nfalse\n?\n1\n:\n2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"new_pages","description":"Check that new pages (`\\f`) are ignored.","expr":"[\f.\fcel.\fexpr\f.conformance.\fproto3.\fTestAllTypes\f{\fsingle_int64\f:\fint\f(\f17\f)\f}\f.\fsingle_int64\f]\f[\f0\f]\f==\f(\f18\f-\f1\f)\f\u0026\u0026\f!\ffalse\f?\f1\f:\f2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"},{"original":{"name":"carriage_returns","description":"Check that carriage returns (`\\r`) are ignored.","expr":"[\r.\rcel.\rexpr\r.conformance.\rproto3.\rTestAllTypes\r{\rsingle_int64\r:\rint\r(\r17\r)\r}\r.\rsingle_int64\r]\r[\r0\r]\r==\r(\r18\r-\r1\r)\r\u0026\u0026\r!\rfalse\r?\r1\r:\r2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"}]},{"name":"comments","tests":[{"original":{"name":"new_line_terminated","description":"Check that new-line-terminated comments are ignored.","expr":"[// @\n.// @\ncel.// @\nexpr// @\n.conformance.// @\nproto3.// @\nTestAllTypes// @\n{// @\nsingle_int64// @\n:// @\nint// @\n(// @\n17// @\n)// @\n}// @\n.// @\nsingle_int64// @\n]// @\n[// @\n0// @\n]// @\n==// @\n(// @\n18// @\n-// @\n1// @\n)// @\n\u0026\u0026// @\n!// @\nfalse// @\n?// @\n1// @\n:// @\n2","value":{"int64Value":"1"}},"ast":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional","type":"int"}]},{"name":"selectors","tests":[{"original":{"name":"as","description":"Check that `as` can be used as a selector.","expr":"{ 'as': 1 }.as","value":{"int64Value":"1"}},"ast":"{\n \"as\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.as^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"as\"~string:1~int\n}~map(string, int).as~int","type":"int"},{"original":{"name":"break","description":"Check that `break` can be used as a selector.","expr":"{ 'break': 1 }.break","value":{"int64Value":"1"}},"ast":"{\n \"break\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.break^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"break\"~string:1~int\n}~map(string, int).break~int","type":"int"},{"original":{"name":"const","description":"Check that `const` can be used as a selector.","expr":"{ 'const': 1 }.const","value":{"int64Value":"1"}},"ast":"{\n \"const\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.const^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"const\"~string:1~int\n}~map(string, int).const~int","type":"int"},{"original":{"name":"continue","description":"Check that `continue` can be used as a selector.","expr":"{ 'continue': 1 }.continue","value":{"int64Value":"1"}},"ast":"{\n \"continue\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.continue^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"continue\"~string:1~int\n}~map(string, int).continue~int","type":"int"},{"original":{"name":"else","description":"Check that `else` can be used as a selector.","expr":"{ 'else': 1 }.else","value":{"int64Value":"1"}},"ast":"{\n \"else\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.else^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"else\"~string:1~int\n}~map(string, int).else~int","type":"int"},{"original":{"name":"for","description":"Check that `for` can be used as a selector.","expr":"{ 'for': 1 }.for","value":{"int64Value":"1"}},"ast":"{\n \"for\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.for^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"for\"~string:1~int\n}~map(string, int).for~int","type":"int"},{"original":{"name":"function","description":"Check that `function` can be used as a selector.","expr":"{ 'function': 1 }.function","value":{"int64Value":"1"}},"ast":"{\n \"function\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.function^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"function\"~string:1~int\n}~map(string, int).function~int","type":"int"},{"original":{"name":"if","description":"Check that `if` can be used as a selector.","expr":"{ 'if': 1 }.if","value":{"int64Value":"1"}},"ast":"{\n \"if\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.if^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"if\"~string:1~int\n}~map(string, int).if~int","type":"int"},{"original":{"name":"import","description":"Check that `import` can be used as a selector.","expr":"{ 'import': 1 }.import","value":{"int64Value":"1"}},"ast":"{\n \"import\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.import^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"import\"~string:1~int\n}~map(string, int).import~int","type":"int"},{"original":{"name":"let","description":"Check that `let` can be used as a selector.","expr":"{ 'let': 1 }.let","value":{"int64Value":"1"}},"ast":"{\n \"let\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.let^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"let\"~string:1~int\n}~map(string, int).let~int","type":"int"},{"original":{"name":"loop","description":"Check that `loop` can be used as a selector.","expr":"{ 'loop': 1 }.loop","value":{"int64Value":"1"}},"ast":"{\n \"loop\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.loop^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"loop\"~string:1~int\n}~map(string, int).loop~int","type":"int"},{"original":{"name":"package","description":"Check that `package` can be used as a selector.","expr":"{ 'package': 1 }.package","value":{"int64Value":"1"}},"ast":"{\n \"package\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.package^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"package\"~string:1~int\n}~map(string, int).package~int","type":"int"},{"original":{"name":"namespace","description":"Check that `namespace` can be used as a selector.","expr":"{ 'namespace': 1 }.namespace","value":{"int64Value":"1"}},"ast":"{\n \"namespace\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.namespace^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"namespace\"~string:1~int\n}~map(string, int).namespace~int","type":"int"},{"original":{"name":"return","description":"Check that `return` can be used as a selector.","expr":"{ 'return': 1 }.return","value":{"int64Value":"1"}},"ast":"{\n \"return\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.return^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"return\"~string:1~int\n}~map(string, int).return~int","type":"int"},{"original":{"name":"var","description":"Check that `var` can be used as a selector.","expr":"{ 'var': 1 }.var","value":{"int64Value":"1"}},"ast":"{\n \"var\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.var^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"var\"~string:1~int\n}~map(string, int).var~int","type":"int"},{"original":{"name":"void","description":"Check that `void` can be used as a selector.","expr":"{ 'void': 1 }.void","value":{"int64Value":"1"}},"ast":"{\n \"void\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.void^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"void\"~string:1~int\n}~map(string, int).void~int","type":"int"},{"original":{"name":"while","description":"Check that `while` can be used as a selector.","expr":"{ 'while': 1 }.while","value":{"int64Value":"1"}},"ast":"{\n \"while\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.while^#*expr.Expr_SelectExpr#","checkedAst":"{\n \"while\"~string:1~int\n}~map(string, int).while~int","type":"int"}]},{"name":"receiver_function_names","tests":[{"original":{"name":"as","description":"Check that `as` can be used as a receiver function.","expr":"a.as() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.as()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.as() || true\n | ^\nERROR: \u003cinput\u003e:1:5: undeclared reference to 'as' (in container '')\n | a.as() || true\n | ....^"},{"original":{"name":"break","description":"Check that `break` can be used as a receiver function.","expr":"a.break() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.break()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.break() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'break' (in container '')\n | a.break() || true\n | .......^"},{"original":{"name":"const","description":"Check that `const` can be used as a receiver function.","expr":"a.const() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.const()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.const() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'const' (in container '')\n | a.const() || true\n | .......^"},{"original":{"name":"continue","description":"Check that `continue` can be used as a receiver function.","expr":"a.continue() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.continue()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.continue() || true\n | ^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'continue' (in container '')\n | a.continue() || true\n | ..........^"},{"original":{"name":"else","description":"Check that `else` can be used as a receiver function.","expr":"a.else() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.else()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.else() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'else' (in container '')\n | a.else() || true\n | ......^"},{"original":{"name":"for","description":"Check that `for` can be used as a receiver function.","expr":"a.for() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.for()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.for() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'for' (in container '')\n | a.for() || true\n | .....^"},{"original":{"name":"function","description":"Check that `function` can be used as a receiver function.","expr":"a.function() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.function()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.function() || true\n | ^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'function' (in container '')\n | a.function() || true\n | ..........^"},{"original":{"name":"if","description":"Check that `if` can be used as a receiver function.","expr":"a.if() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.if()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.if() || true\n | ^\nERROR: \u003cinput\u003e:1:5: undeclared reference to 'if' (in container '')\n | a.if() || true\n | ....^"},{"original":{"name":"import","description":"Check that `import` can be used as a receiver function.","expr":"a.import() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.import()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.import() || true\n | ^\nERROR: \u003cinput\u003e:1:9: undeclared reference to 'import' (in container '')\n | a.import() || true\n | ........^"},{"original":{"name":"let","description":"Check that `let` can be used as a receiver function.","expr":"a.let() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.let()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.let() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'let' (in container '')\n | a.let() || true\n | .....^"},{"original":{"name":"loop","description":"Check that `loop` can be used as a receiver function.","expr":"a.loop() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.loop()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.loop() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'loop' (in container '')\n | a.loop() || true\n | ......^"},{"original":{"name":"package","description":"Check that `package` can be used as a receiver function.","expr":"a.package() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.package()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.package() || true\n | ^\nERROR: \u003cinput\u003e:1:10: undeclared reference to 'package' (in container '')\n | a.package() || true\n | .........^"},{"original":{"name":"namespace","description":"Check that `namespace` can be used as a receiver function.","expr":"a.namespace() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.namespace()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.namespace() || true\n | ^\nERROR: \u003cinput\u003e:1:12: undeclared reference to 'namespace' (in container '')\n | a.namespace() || true\n | ...........^"},{"original":{"name":"return","description":"Check that `return` can be used as a receiver function.","expr":"a.return() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.return()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.return() || true\n | ^\nERROR: \u003cinput\u003e:1:9: undeclared reference to 'return' (in container '')\n | a.return() || true\n | ........^"},{"original":{"name":"var","description":"Check that `var` can be used as a receiver function.","expr":"a.var() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.var()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.var() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'var' (in container '')\n | a.var() || true\n | .....^"},{"original":{"name":"void","description":"Check that `void` can be used as a receiver function.","expr":"a.void() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.void()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.void() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'void' (in container '')\n | a.void() || true\n | ......^"},{"original":{"name":"while","description":"Check that `while` can be used as a receiver function.","expr":"a.while() || true","disableCheck":true,"value":{"boolValue":true}},"ast":"_||_(\n a^#*expr.Expr_IdentExpr#.while()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.while() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'while' (in container '')\n | a.while() || true\n | .......^"}]},{"name":"struct_field_names","tests":[{"original":{"name":"as","description":"Check that `as` can be used as a struct field name.","expr":"TestAllTypes{ as: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","as":true}}},"ast":"TestAllTypes{\n as:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n as:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"break","description":"Check that `break` can be used as a struct field name.","expr":"TestAllTypes{ break: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","break":true}}},"ast":"TestAllTypes{\n break:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n break:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"const","description":"Check that `const` can be used as a struct field name.","expr":"TestAllTypes{ const: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","const":true}}},"ast":"TestAllTypes{\n const:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n const:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"continue","description":"Check that `continue` can be used as a struct field name.","expr":"TestAllTypes{ continue: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","continue":true}}},"ast":"TestAllTypes{\n continue:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n continue:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"else","description":"Check that `else` can be used as a struct field name.","expr":"TestAllTypes{ else: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","else":true}}},"ast":"TestAllTypes{\n else:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n else:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"for","description":"Check that `for` can be used as a struct field name.","expr":"TestAllTypes{ for: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","for":true}}},"ast":"TestAllTypes{\n for:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n for:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"function","description":"Check that `function` can be used as a struct field name.","expr":"TestAllTypes{ function: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","function":true}}},"ast":"TestAllTypes{\n function:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n function:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"if","description":"Check that `if` can be used as a struct field name.","expr":"TestAllTypes{ if: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","if":true}}},"ast":"TestAllTypes{\n if:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n if:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"import","description":"Check that `import` can be used as a struct field name.","expr":"TestAllTypes{ import: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","import":true}}},"ast":"TestAllTypes{\n import:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n import:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"let","description":"Check that `let` can be used as a struct field name.","expr":"TestAllTypes{ let: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","let":true}}},"ast":"TestAllTypes{\n let:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n let:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"loop","description":"Check that `loop` can be used as a struct field name.","expr":"TestAllTypes{ loop: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","loop":true}}},"ast":"TestAllTypes{\n loop:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n loop:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"package","description":"Check that `package` can be used as a struct field name.","expr":"TestAllTypes{ package: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","package":true}}},"ast":"TestAllTypes{\n package:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n package:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"namespace","description":"Check that `namespace` can be used as a struct field name.","expr":"TestAllTypes{ namespace: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","namespace":true}}},"ast":"TestAllTypes{\n namespace:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n namespace:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"return","description":"Check that `return` can be used as a struct field name.","expr":"TestAllTypes{ return: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","return":true}}},"ast":"TestAllTypes{\n return:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n return:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"var","description":"Check that `var` can be used as a struct field name.","expr":"TestAllTypes{ var: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","var":true}}},"ast":"TestAllTypes{\n var:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n var:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"void","description":"Check that `void` can be used as a struct field name.","expr":"TestAllTypes{ void: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","void":true}}},"ast":"TestAllTypes{\n void:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n void:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"while","description":"Check that `while` can be used as a struct field name.","expr":"TestAllTypes{ while: true }","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","while":true}}},"ast":"TestAllTypes{\n while:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n while:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]}]},{"name":"plumbing","suites":[{"name":"min","tests":[{"original":{"name":"min_program","description":"Smallest functionality: expr in, result out.","expr":"17","value":{"int64Value":"17"}},"ast":"17^#*expr.Constant_Int64Value#","checkedAst":"17~int","type":"int"}]},{"name":"eval_results","tests":[{"original":{"name":"error_result","description":"Check that error results go through.","expr":"1 / 0","evalError":{"errors":[{"message":"foo"}]}},"ast":"_/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_/_(\n 1~int,\n 0~int\n)~int^divide_int64","type":"int"},{"original":{"name":"eval_map_results","description":"Check that map literals results are order independent.","expr":"{\"k1\":\"v1\",\"k\":\"v\"}","value":{"mapValue":{"entries":[{"key":{"stringValue":"k"},"value":{"stringValue":"v"}},{"key":{"stringValue":"k1"},"value":{"stringValue":"v1"}}]}}},"ast":"{\n \"k1\"^#*expr.Constant_StringValue#:\"v1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"k\"^#*expr.Constant_StringValue#:\"v\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"{\n \"k1\"~string:\"v1\"~string,\n \"k\"~string:\"v\"~string\n}~map(string, string)","type":"map(string, string)"}]},{"name":"check_inputs","tests":[{"original":{"name":"skip_check","description":"Make sure we can skip type checking.","expr":"[17, 'pancakes']","disableCheck":true,"value":{"listValue":{"values":[{"int64Value":"17"},{"stringValue":"pancakes"}]}}},"ast":"[\n 17^#*expr.Constant_Int64Value#,\n \"pancakes\"^#*expr.Constant_StringValue#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n 17~int,\n \"pancakes\"~string\n]~list(dyn)","type":"list(dyn)"}]},{"name":"eval_inputs","tests":[{"original":{"name":"one_ignored_value_arg","description":"Check that value bindings can be given, even if ignored.","expr":"'foo'","bindings":{"x":{"value":{"int64Value":"17"}}},"value":{"stringValue":"foo"}},"ast":"\"foo\"^#*expr.Constant_StringValue#","checkedAst":"\"foo\"~string","type":"string"}]}]},{"name":"proto2","suites":[{"name":"literal_singular","tests":[{"original":{"name":"int64_nocontainer","expr":"cel.expr.conformance.proto2.TestAllTypes{single_int64: 17}","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64":"17"}}},"ast":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"int32","expr":"TestAllTypes{single_int32: -34}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":-34}}},"ast":"TestAllTypes{\n single_int32:-34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32:-34~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"int32_eq_uint","expr":"Int32Value{value: 34} == dyn(UInt64Value{value: 34u})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.UInt64Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_int32_eq_uint","expr":"Int32Value{value: 34} == dyn(UInt64Value{value: 18446744073709551615u})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"int32_eq_double","expr":"Int32Value{value: 34} == dyn(DoubleValue{value: 34.0})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:34~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_int32_eq_double","expr":"Int32Value{value: 34} == dyn(DoubleValue{value: -9223372036854775809.0})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:-9.223372036854776e+18^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:-9.223372036854776e+18~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"int64","expr":"TestAllTypes{single_int64: 17}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64":"17"}}},"ast":"TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"uint32","expr":"TestAllTypes{single_uint32: 1u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32":1}}},"ast":"TestAllTypes{\n single_uint32:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32:1u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"uint32_eq_int","expr":"UInt32Value{value: 34u} == dyn(Int64Value{value: 34})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.Int64Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_uint32_eq_int","expr":"UInt32Value{value: 34u} == dyn(Int64Value{value: -1})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.Int64Value{\n value:-1~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"uint32_eq_double","expr":"UInt32Value{value: 34u} == dyn(DoubleValue{value: 34.0})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:34~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_uint32_eq_double","expr":"UInt32Value{value: 34u} == dyn(DoubleValue{value: 18446744073709551616.0})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:1.8446744073709552e+19^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:1.8446744073709552e+19~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"uint64","expr":"TestAllTypes{single_uint64: 9999u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint64":"9999"}}},"ast":"TestAllTypes{\n single_uint64:9999u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64:9999u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"sint32","expr":"TestAllTypes{single_sint32: -3}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleSint32":-3}}},"ast":"TestAllTypes{\n single_sint32:-3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sint32:-3~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"sint64","expr":"TestAllTypes{single_sint64: 255}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleSint64":"255"}}},"ast":"TestAllTypes{\n single_sint64:255^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sint64:255~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"fixed32","expr":"TestAllTypes{single_fixed32: 43u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFixed32":43}}},"ast":"TestAllTypes{\n single_fixed32:43u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_fixed32:43u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"fixed64","expr":"TestAllTypes{single_fixed64: 1880u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFixed64":"1880"}}},"ast":"TestAllTypes{\n single_fixed64:1880u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_fixed64:1880u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"sfixed32","expr":"TestAllTypes{single_sfixed32: -404}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleSfixed32":-404}}},"ast":"TestAllTypes{\n single_sfixed32:-404^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sfixed32:-404~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"sfixed64","expr":"TestAllTypes{single_sfixed64: -1}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleSfixed64":"-1"}}},"ast":"TestAllTypes{\n single_sfixed64:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sfixed64:-1~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"float","expr":"TestAllTypes{single_float: 3.1416}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloat":3.1416}}},"ast":"TestAllTypes{\n single_float:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float:3.1416~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"float_eq_int","expr":"FloatValue{value: 3.0} == dyn(Int64Value{value: 3})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n FloatValue{\n value:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:3~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.Int64Value{\n value:3~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_float_eq_int","expr":"FloatValue{value: -1.14} == dyn(Int64Value{value: -1})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n FloatValue{\n value:-1.14^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:-1.14~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.Int64Value{\n value:-1~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"float_eq_uint","expr":"FloatValue{value: 34.0} == dyn(UInt64Value{value: 34u})","container":"google.protobuf","value":{"boolValue":true}},"ast":"_==_(\n FloatValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:34~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.UInt64Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"not_float_eq_uint","expr":"FloatValue{value: -1.0} == dyn(UInt64Value{value: 18446744073709551615u})","container":"google.protobuf","value":{"boolValue":false}},"ast":"_==_(\n FloatValue{\n value:-1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.FloatValue{\n value:-1~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals","type":"bool"},{"original":{"name":"double","expr":"TestAllTypes{single_double: 6.022e23}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDouble":6.022e+23}}},"ast":"TestAllTypes{\n single_double:6.022e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double:6.022e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"bool","expr":"TestAllTypes{single_bool: true}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBool":true}}},"ast":"TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"string","expr":"TestAllTypes{single_string: 'foo'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleString":"foo"}}},"ast":"TestAllTypes{\n single_string:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_string:\"foo\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"bytes","expr":"TestAllTypes{single_bytes: b'\\377'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBytes":"/w=="}}},"ast":"TestAllTypes{\n single_bytes:b\"\\xff\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bytes:b\"\\xff\"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"}]},{"name":"literal_wellknown","tests":[{"original":{"name":"any","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 1}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleAny":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":1}}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"duration","expr":"TestAllTypes{single_duration: duration('123s')}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDuration":"123s"}}},"ast":"TestAllTypes{\n single_duration:duration(\n \"123s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_duration:duration(\n \"123s\"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"timestamp","expr":"TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleTimestamp":"2009-02-13T23:31:30Z"}}},"ast":"TestAllTypes{\n single_timestamp:timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_timestamp:timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"struct","expr":"TestAllTypes{single_struct: {'one': 1, 'two': 2}}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStruct":{"one":1,"two":2}}}},"ast":"TestAllTypes{\n single_struct:{\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"two\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n \"one\"~string:1~int,\n \"two\"~string:2~int\n }~map(string, int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"value","expr":"TestAllTypes{single_value: 'foo'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleValue":"foo"}}},"ast":"TestAllTypes{\n single_value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:\"foo\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"int64_wrapper","expr":"TestAllTypes{single_int64_wrapper: -321}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64Wrapper":"-321"}}},"ast":"TestAllTypes{\n single_int64_wrapper:-321^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:-321~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"int32_wrapper","expr":"TestAllTypes{single_int32_wrapper: -456}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32Wrapper":-456}}},"ast":"TestAllTypes{\n single_int32_wrapper:-456^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:-456~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"double_wrapper","expr":"TestAllTypes{single_double_wrapper: 2.71828}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleDoubleWrapper":2.71828}}},"ast":"TestAllTypes{\n single_double_wrapper:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:2.71828~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"float_wrapper","expr":"TestAllTypes{single_float_wrapper: 2.99792e8}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleFloatWrapper":299792000}}},"ast":"TestAllTypes{\n single_float_wrapper:2.99792e+08^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:2.99792e+08~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"uint64_wrapper","expr":"TestAllTypes{single_uint64_wrapper: 8675309u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint64Wrapper":"8675309"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:8675309u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:8675309u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"uint32_wrapper","expr":"TestAllTypes{single_uint32_wrapper: 987u}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleUint32Wrapper":987}}},"ast":"TestAllTypes{\n single_uint32_wrapper:987u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:987u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"string_wrapper","expr":"TestAllTypes{single_string_wrapper: 'hubba'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleStringWrapper":"hubba"}}},"ast":"TestAllTypes{\n single_string_wrapper:\"hubba\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:\"hubba\"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"bool_wrapper","expr":"TestAllTypes{single_bool_wrapper: true}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBoolWrapper":true}}},"ast":"TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"},{"original":{"name":"bytes_wrapper","expr":"TestAllTypes{single_bytes_wrapper: b'\\301\\103'}","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleBytesWrapper":"wUM="}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"\\xc1C\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b\"\\xc1C\"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes","type":"cel.expr.conformance.proto2.TestAllTypes"}]},{"name":"singular_bind","tests":[{"original":{"name":"int32","expr":"x.single_int32","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt32":17}}}},"value":{"int64Value":"17"}},"ast":"x^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto2.TestAllTypes^x.single_int32~int","type":"int"},{"original":{"name":"int64","expr":"x.single_int64","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","singleInt64":"-99"}}}},"value":{"int64Value":"-99"}},"ast":"x^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto2.TestAllTypes^x.single_int64~int","type":"int"}]},{"name":"empty_field","tests":[{"original":{"name":"scalar_with_default","expr":"TestAllTypes{}.single_int32","container":"cel.expr.conformance.proto2","value":{"int64Value":"-32"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~int","type":"int"},{"original":{"name":"scalar_no_default","expr":"TestAllTypes{}.single_fixed32","container":"cel.expr.conformance.proto2","value":{"uint64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_fixed32^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_fixed32~uint","type":"uint"},{"original":{"name":"nested_message","expr":"TestAllTypes{}.single_nested_message","container":"cel.expr.conformance.proto2","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes.NestedMessage"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~cel.expr.conformance.proto2.TestAllTypes.NestedMessage","type":"cel.expr.conformance.proto2.TestAllTypes.NestedMessage"},{"original":{"name":"nested_message_subfield","expr":"TestAllTypes{}.single_nested_message.bb","container":"cel.expr.conformance.proto2","value":{"int64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#.bb^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~cel.expr.conformance.proto2.TestAllTypes.NestedMessage.bb~int","type":"int"},{"original":{"name":"wkt","expr":"TestAllTypes{}.single_int64_wrapper","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"repeated_scalar","expr":"TestAllTypes{}.repeated_int64","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int64~list(int)","type":"list(int)"},{"original":{"name":"repeated_enum","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"repeated_nested","expr":"TestAllTypes{}.repeated_nested_message","container":"cel.expr.conformance.proto2","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_message~list(cel.expr.conformance.proto2.TestAllTypes.NestedMessage)","type":"list(cel.expr.conformance.proto2.TestAllTypes.NestedMessage)"},{"original":{"name":"map","expr":"TestAllTypes{}.map_string_string","container":"cel.expr.conformance.proto2","value":{"mapValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~map(string, string)","type":"map(string, string)"}]},{"name":"has","tests":[{"original":{"name":"undefined","expr":"has(TestAllTypes{}.no_such_field)","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"no_such_field"}]}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.no_such_field~test-only~^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:4: undefined field 'no_such_field'\n | has(TestAllTypes{}.no_such_field)\n | ...^"},{"original":{"name":"repeated_none_implicit","expr":"has(TestAllTypes{}.repeated_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_none_explicit","expr":"has(TestAllTypes{repeated_int32: []}.repeated_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{\n repeated_int32:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_one","expr":"has(TestAllTypes{repeated_int32: [1]}.repeated_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[\n 1~int\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_many","expr":"has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"map_none_implicit","expr":"has(TestAllTypes{}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_none_explicit","expr":"has(TestAllTypes{map_string_string: {}}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{\n map_string_string:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{}~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_one_default","expr":"has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"MT\"^#*expr.Constant_StringValue#:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n \"MT\"~string:\"\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_one","expr":"has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"one\"^#*expr.Constant_StringValue#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n \"one\"~string:\"uno\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_many","expr":"has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"one\"^#*expr.Constant_StringValue#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"two\"^#*expr.Constant_StringValue#:\"dos\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n \"one\"~string:\"uno\"~string,\n \"two\"~string:\"dos\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"required","expr":"has(TestRequired{required_int32: 4}.required_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestRequired{\n required_int32:4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.required_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestRequired{\n required_int32:4~int\n}~cel.expr.conformance.proto2.TestRequired^cel.expr.conformance.proto2.TestRequired.required_int32~test-only~~bool","type":"bool"},{"original":{"name":"optional_unset_no_default","expr":"has(TestAllTypes{}.single_sint32)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_sint32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_sint32~test-only~~bool","type":"bool"},{"original":{"name":"optional_set_no_default","expr":"has(TestAllTypes{single_sint32: -4}.single_sint32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_sint32:-4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_sint32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_sint32:-4~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_sint32~test-only~~bool","type":"bool"},{"original":{"name":"optional_unset_with_default","expr":"has(TestAllTypes{}.single_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"optional_set_with_default","expr":"has(TestAllTypes{single_int32: 16}.single_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_int32:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32:16~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"optional_set_to_default","expr":"has(TestAllTypes{single_int32: -32}.single_int32)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_int32:-32^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_int32:-32~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"optional_message_unset","expr":"has(TestAllTypes{}.standalone_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"optional_message_set","expr":"has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_message:cel.expr.conformance.proto2.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto2.TestAllTypes.NestedMessage^cel.expr.conformance.proto2.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"optional_enum_unset","expr":"has(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"optional_enum_set","expr":"has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"optional_enum_set_zero","expr":"has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"oneof_unset","expr":"has(TestAllTypes{}.single_nested_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_other_set","expr":"has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_set","expr":"has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_nested_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_nested_message:cel.expr.conformance.proto2.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto2.TestAllTypes.NestedMessage^cel.expr.conformance.proto2.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_set_default","expr":"has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_enum~test-only~~bool","type":"bool"}]},{"name":"set_null","tests":[{"original":{"name":"single_message","expr":"TestAllTypes{single_nested_message: null} == TestAllTypes{}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_nested_message:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_nested_message:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_any","expr":"TestAllTypes{single_any: null}.single_any","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_any:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_any:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"single_value","expr":"TestAllTypes{single_value: null}.single_value","container":"cel.expr.conformance.proto2","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"single_duration","expr":"TestAllTypes{single_duration: null} == TestAllTypes{}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_duration:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_duration:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_timestamp","expr":"TestAllTypes{single_timestamp: null} == TestAllTypes{}","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_timestamp:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_timestamp:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_scalar","expr":"TestAllTypes{single_bool: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n single_bool:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:25: expected type of field 'single_bool' is 'bool' but provided type is 'null'\n | TestAllTypes{single_bool: null} == TestAllTypes{}\n | ........................^"},{"original":{"name":"repeated","expr":"TestAllTypes{repeated_int32: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n repeated_int32:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: expected type of field 'repeated_int32' is 'list(int)' but provided type is 'null'\n | TestAllTypes{repeated_int32: null} == TestAllTypes{}\n | ...........................^"},{"original":{"name":"map","expr":"TestAllTypes{map_string_string: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n map_string_string:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:31: expected type of field 'map_string_string' is 'map(string, string)' but provided type is 'null'\n | TestAllTypes{map_string_string: null} == TestAllTypes{}\n | ..............................^"},{"original":{"name":"list_value","expr":"TestAllTypes{list_value: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n list_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: expected type of field 'list_value' is 'list(dyn)' but provided type is 'null'\n | TestAllTypes{list_value: null} == TestAllTypes{}\n | .......................^"},{"original":{"name":"single_struct","expr":"TestAllTypes{single_struct: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto2","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n single_struct:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'null'\n | TestAllTypes{single_struct: null} == TestAllTypes{}\n | ..........................^"}]},{"name":"quoted_fields","tests":[{"original":{"name":"set_field_with_quoted_name","expr":"TestAllTypes{`in`: true} == TestAllTypes{}","container":"cel.expr.conformance.proto2","value":{"boolValue":false}},"error":"ERROR: set_field_with_quoted_name:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true} == TestAllTypes{}\n | .............^"},{"original":{"name":"get_field_with_quoted_name","expr":"TestAllTypes{`in`: true}.`in`","container":"cel.expr.conformance.proto2","value":{"boolValue":true}},"error":"ERROR: get_field_with_quoted_name:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .............^\nERROR: get_field_with_quoted_name:1:26: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .........................^"}]},{"name":"extensions_has","tests":[{"original":{"name":"package_scoped_int32","expr":"has(msg.`cel.expr.conformance.proto2.int32_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.int32_ext]":42}}}}},"error":"ERROR: package_scoped_int32:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.int32_ext`)\n | ........^"},{"original":{"name":"package_scoped_nested_ext","expr":"has(msg.`cel.expr.conformance.proto2.nested_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_ext]":{}}}}}},"error":"ERROR: package_scoped_nested_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.nested_ext`)\n | ........^"},{"original":{"name":"package_scoped_test_all_types_ext","expr":"has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.test_all_types_ext]":{}}}}}},"error":"ERROR: package_scoped_test_all_types_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)\n | ........^"},{"original":{"name":"package_scoped_test_all_types_nested_enum_ext","expr":"has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_enum_ext]":"BAR"}}}}},"error":"ERROR: package_scoped_test_all_types_nested_enum_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)\n | ........^"},{"original":{"name":"package_scoped_repeated_test_all_types","expr":"has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"error":"ERROR: package_scoped_repeated_test_all_types:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)\n | ........^"},{"original":{"name":"message_scoped_int64","expr":"has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]":"42"}}}}},"error":"ERROR: message_scoped_int64:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)\n | ........^"},{"original":{"name":"message_scoped_nested_ext","expr":"has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]":{}}}}}},"error":"ERROR: message_scoped_nested_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)\n | ........^"},{"original":{"name":"message_scoped_nested_enum_ext","expr":"has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]":"BAR"}}}}},"error":"ERROR: message_scoped_nested_enum_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)\n | ........^"},{"original":{"name":"message_scoped_repeated_test_all_types","expr":"has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"error":"ERROR: message_scoped_repeated_test_all_types:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)\n | ........^"}]},{"name":"extensions_get","tests":[{"original":{"name":"package_scoped_int32","expr":"msg.`cel.expr.conformance.proto2.int32_ext` == 42","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.int32_ext]":42}}}}},"error":"ERROR: package_scoped_int32:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.int32_ext` == 42\n | ....^"},{"original":{"name":"package_scoped_nested_ext","expr":"msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_ext]":{}}}}}},"error":"ERROR: package_scoped_nested_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^"},{"original":{"name":"package_scoped_test_all_types_ext","expr":"msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.test_all_types_ext]":{}}}}}},"error":"ERROR: package_scoped_test_all_types_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^"},{"original":{"name":"package_scoped_test_all_types_nested_enum_ext","expr":"msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_enum_ext]":"BAR"}}}}},"error":"ERROR: package_scoped_test_all_types_nested_enum_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n | ....^"},{"original":{"name":"package_scoped_repeated_test_all_types","expr":"msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"error":"ERROR: package_scoped_repeated_test_all_types:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]\n | ....^"},{"original":{"name":"message_scoped_int64","expr":"msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]":"42"}}}}},"error":"ERROR: message_scoped_int64:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42\n | ....^"},{"original":{"name":"message_scoped_nested_ext","expr":"msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]":{}}}}}},"error":"ERROR: message_scoped_nested_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^"},{"original":{"name":"message_scoped_nested_enum_ext","expr":"msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]":"BAR"}}}}},"error":"ERROR: message_scoped_nested_enum_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n | ....^"},{"original":{"name":"message_scoped_repeated_test_all_types","expr":"msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"error":"ERROR: message_scoped_repeated_test_all_types:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]\n | ....^"}]}]},{"name":"proto2_ext","suites":[{"name":"has_ext","tests":[{"original":{"name":"package_scoped_int32","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.int32_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.int32_ext]":42}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.int32_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.int32_ext~test-only~~bool","type":"bool"},{"original":{"name":"package_scoped_nested_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.nested_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_ext]":{}}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_ext~test-only~~bool","type":"bool"},{"original":{"name":"package_scoped_test_all_types_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.test_all_types_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.test_all_types_ext]":{}}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.test_all_types_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.test_all_types_ext~test-only~~bool","type":"bool"},{"original":{"name":"package_scoped_test_all_types_nested_enum_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.nested_enum_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_enum_ext]":"BAR"}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_enum_ext~test-only~~bool","type":"bool"},{"original":{"name":"package_scoped_repeated_test_all_types","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.repeated_test_all_types)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.repeated_test_all_types^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.repeated_test_all_types~test-only~~bool","type":"bool"},{"original":{"name":"message_scoped_int64","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]":"42"}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.int64_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext~test-only~~bool","type":"bool"},{"original":{"name":"message_scoped_nested_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]":{}}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_nested_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext~test-only~~bool","type":"bool"},{"original":{"name":"message_scoped_nested_enum_ext","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]":"BAR"}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext~test-only~~bool","type":"bool"},{"original":{"name":"message_scoped_repeated_test_all_types","expr":"proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types)","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"ast":"proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_repeated_test_all_types^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types~test-only~~bool","type":"bool"}]},{"name":"get_ext","tests":[{"original":{"name":"package_scoped_int32","expr":"proto.getExt(msg, cel.expr.conformance.proto2.int32_ext) == 42","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.int32_ext]":42}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.int32_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.int32_ext~int,\n 42~int\n)~bool^equals","type":"bool"},{"original":{"name":"package_scoped_nested_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_ext]":{}}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"package_scoped_test_all_types_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.test_all_types_ext) == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.test_all_types_ext]":{}}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.test_all_types_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.test_all_types_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"package_scoped_test_all_types_nested_enum_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.nested_enum_ext]":"BAR"}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.TestAllTypes^#*expr.Expr_SelectExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_enum_ext~int,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n)~bool^equals","type":"bool"},{"original":{"name":"package_scoped_repeated_test_all_types","expr":"proto.getExt(msg, cel.expr.conformance.proto2.repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.repeated_test_all_types^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.repeated_test_all_types~list(cel.expr.conformance.proto2.TestAllTypes),\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n ]~list(cel.expr.conformance.proto2.TestAllTypes)\n)~bool^equals","type":"bool"},{"original":{"name":"message_scoped_int64","expr":"proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext) == 42","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]":"42"}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.int64_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext~int,\n 42~int\n)~bool^equals","type":"bool"},{"original":{"name":"message_scoped_nested_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]":{}}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_nested_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"message_scoped_nested_enum_ext","expr":"proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]":"BAR"}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.TestAllTypes^#*expr.Expr_SelectExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext~int,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n)~bool^equals","type":"bool"},{"original":{"name":"message_scoped_repeated_test_all_types","expr":"proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto2.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes","[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]":[{"singleInt64":"1"},{"singleBool":true}]}}}}},"ast":"_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_repeated_test_all_types^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types~list(cel.expr.conformance.proto2.TestAllTypes),\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n ]~list(cel.expr.conformance.proto2.TestAllTypes)\n)~bool^equals","type":"bool"}]}]},{"name":"proto3","suites":[{"name":"literal_singular","tests":[{"original":{"name":"int64_nocontainer","expr":"cel.expr.conformance.proto3.TestAllTypes{single_int64: 17}","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64":"17"}}},"ast":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"int32","expr":"TestAllTypes{single_int32: -34}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":-34}}},"ast":"TestAllTypes{\n single_int32:-34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32:-34~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"int64","expr":"TestAllTypes{single_int64: 17}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64":"17"}}},"ast":"TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"uint32","expr":"TestAllTypes{single_uint32: 1u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32":1}}},"ast":"TestAllTypes{\n single_uint32:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32:1u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"uint64","expr":"TestAllTypes{single_uint64: 9999u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint64":"9999"}}},"ast":"TestAllTypes{\n single_uint64:9999u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint64:9999u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"sint32","expr":"TestAllTypes{single_sint32: -3}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleSint32":-3}}},"ast":"TestAllTypes{\n single_sint32:-3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_sint32:-3~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"sint64","expr":"TestAllTypes{single_sint64: 255}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleSint64":"255"}}},"ast":"TestAllTypes{\n single_sint64:255^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_sint64:255~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"fixed32","expr":"TestAllTypes{single_fixed32: 43u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFixed32":43}}},"ast":"TestAllTypes{\n single_fixed32:43u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_fixed32:43u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"fixed64","expr":"TestAllTypes{single_fixed64: 1880u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFixed64":"1880"}}},"ast":"TestAllTypes{\n single_fixed64:1880u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_fixed64:1880u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"sfixed32","expr":"TestAllTypes{single_sfixed32: -404}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleSfixed32":-404}}},"ast":"TestAllTypes{\n single_sfixed32:-404^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_sfixed32:-404~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"sfixed64","expr":"TestAllTypes{single_sfixed64: -1}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleSfixed64":"-1"}}},"ast":"TestAllTypes{\n single_sfixed64:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_sfixed64:-1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"float","expr":"TestAllTypes{single_float: 3.1416}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloat":3.1416}}},"ast":"TestAllTypes{\n single_float:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float:3.1416~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"double","expr":"TestAllTypes{single_double: 6.022e23}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDouble":6.022e+23}}},"ast":"TestAllTypes{\n single_double:6.022e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double:6.022e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"bool","expr":"TestAllTypes{single_bool: true}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBool":true}}},"ast":"TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bool:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"string","expr":"TestAllTypes{single_string: 'foo'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleString":"foo"}}},"ast":"TestAllTypes{\n single_string:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_string:\"foo\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"bytes","expr":"TestAllTypes{single_bytes: b'\\377'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBytes":"/w=="}}},"ast":"TestAllTypes{\n single_bytes:b\"\\xff\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bytes:b\"\\xff\"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"literal_wellknown","tests":[{"original":{"name":"any","expr":"TestAllTypes{single_any: TestAllTypes{single_int32: 1}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleAny":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":1}}}},"ast":"TestAllTypes{\n single_any:TestAllTypes{\n single_int32:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:1~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"duration","expr":"TestAllTypes{single_duration: duration('123s')}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDuration":"123s"}}},"ast":"TestAllTypes{\n single_duration:duration(\n \"123s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_duration:duration(\n \"123s\"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"timestamp","expr":"TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleTimestamp":"2009-02-13T23:31:30Z"}}},"ast":"TestAllTypes{\n single_timestamp:timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_timestamp:timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"struct","expr":"TestAllTypes{single_struct: {'one': 1, 'two': 2}}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStruct":{"one":1,"two":2}}}},"ast":"TestAllTypes{\n single_struct:{\n \"one\"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n \"two\"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n \"one\"~string:1~int,\n \"two\"~string:2~int\n }~map(string, int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"value","expr":"TestAllTypes{single_value: 'foo'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleValue":"foo"}}},"ast":"TestAllTypes{\n single_value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:\"foo\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"int64_wrapper","expr":"TestAllTypes{single_int64_wrapper: -321}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64Wrapper":"-321"}}},"ast":"TestAllTypes{\n single_int64_wrapper:-321^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:-321~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"int32_wrapper","expr":"TestAllTypes{single_int32_wrapper: -456}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32Wrapper":-456}}},"ast":"TestAllTypes{\n single_int32_wrapper:-456^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-456~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"double_wrapper","expr":"TestAllTypes{single_double_wrapper: 2.71828}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleDoubleWrapper":2.71828}}},"ast":"TestAllTypes{\n single_double_wrapper:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:2.71828~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"float_wrapper","expr":"TestAllTypes{single_float_wrapper: 2.99792e8}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleFloatWrapper":299792000}}},"ast":"TestAllTypes{\n single_float_wrapper:2.99792e+08^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:2.99792e+08~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"uint64_wrapper","expr":"TestAllTypes{single_uint64_wrapper: 8675309u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint64Wrapper":"8675309"}}},"ast":"TestAllTypes{\n single_uint64_wrapper:8675309u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:8675309u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"uint32_wrapper","expr":"TestAllTypes{single_uint32_wrapper: 987u}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleUint32Wrapper":987}}},"ast":"TestAllTypes{\n single_uint32_wrapper:987u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:987u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"string_wrapper","expr":"TestAllTypes{single_string_wrapper: 'hubba'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleStringWrapper":"hubba"}}},"ast":"TestAllTypes{\n single_string_wrapper:\"hubba\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:\"hubba\"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"bool_wrapper","expr":"TestAllTypes{single_bool_wrapper: true}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBoolWrapper":true}}},"ast":"TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"},{"original":{"name":"bytes_wrapper","expr":"TestAllTypes{single_bytes_wrapper: b'\\301\\103'}","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleBytesWrapper":"wUM="}}},"ast":"TestAllTypes{\n single_bytes_wrapper:b\"\\xc1C\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b\"\\xc1C\"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"singular_bind","tests":[{"original":{"name":"int32","expr":"x.single_int32","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt32":17}}}},"value":{"int64Value":"17"}},"ast":"x^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.single_int32~int","type":"int"},{"original":{"name":"int64","expr":"x.single_int64","typeEnv":[{"name":"x","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64":"-99"}}}},"value":{"int64Value":"-99"}},"ast":"x^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#","checkedAst":"x~cel.expr.conformance.proto3.TestAllTypes^x.single_int64~int","type":"int"}]},{"name":"empty_field","tests":[{"original":{"name":"scalar","expr":"TestAllTypes{}.single_fixed32","container":"cel.expr.conformance.proto3","value":{"uint64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_fixed32^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_fixed32~uint","type":"uint"},{"original":{"name":"nested_message","expr":"TestAllTypes{}.single_nested_message","container":"cel.expr.conformance.proto3","value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes.NestedMessage"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~cel.expr.conformance.proto3.TestAllTypes.NestedMessage","type":"cel.expr.conformance.proto3.TestAllTypes.NestedMessage"},{"original":{"name":"nested_message_subfield","expr":"TestAllTypes{}.single_nested_message.bb","container":"cel.expr.conformance.proto3","value":{"int64Value":"0"}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#.bb^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~cel.expr.conformance.proto3.TestAllTypes.NestedMessage.bb~int","type":"int"},{"original":{"name":"wkt","expr":"TestAllTypes{}.single_int64_wrapper","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper~wrapper(int)","type":"wrapper(int)"},{"original":{"name":"repeated_scalar","expr":"TestAllTypes{}.repeated_int64","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int64~list(int)","type":"list(int)"},{"original":{"name":"repeated_enum","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"repeated_nested","expr":"TestAllTypes{}.repeated_nested_message","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)","type":"list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)"},{"original":{"name":"map","expr":"TestAllTypes{}.map_string_string","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~map(string, string)","type":"map(string, string)"}]},{"name":"has","tests":[{"original":{"name":"undefined","expr":"has(TestAllTypes{}.no_such_field)","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"no_such_field"}]}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.no_such_field~test-only~^#*expr.Expr_SelectExpr#","error":"ERROR: \u003cinput\u003e:1:4: undefined field 'no_such_field'\n | has(TestAllTypes{}.no_such_field)\n | ...^"},{"original":{"name":"repeated_none_implicit","expr":"has(TestAllTypes{}.repeated_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_none_explicit","expr":"has(TestAllTypes{repeated_int32: []}.repeated_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n repeated_int32:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_one","expr":"has(TestAllTypes{repeated_int32: [1]}.repeated_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[\n 1~int\n ]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"repeated_many","expr":"has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool","type":"bool"},{"original":{"name":"map_none_implicit","expr":"has(TestAllTypes{}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_none_explicit","expr":"has(TestAllTypes{map_string_string: {}}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n map_string_string:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{}~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_one_default","expr":"has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"MT\"^#*expr.Constant_StringValue#:\"\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n \"MT\"~string:\"\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_one","expr":"has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"one\"^#*expr.Constant_StringValue#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n \"one\"~string:\"uno\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"map_many","expr":"has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n map_string_string:{\n \"one\"^#*expr.Constant_StringValue#:\"uno\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n \"two\"^#*expr.Constant_StringValue#:\"dos\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n \"one\"~string:\"uno\"~string,\n \"two\"~string:\"dos\"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool","type":"bool"},{"original":{"name":"single_unset","expr":"has(TestAllTypes{}.single_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"single_set","expr":"has(TestAllTypes{single_int32: 16}.single_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_int32:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32:16~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"single_set_to_default","expr":"has(TestAllTypes{single_int32: 0}.single_int32)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_int32:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int32:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool","type":"bool"},{"original":{"name":"single_message_unset","expr":"has(TestAllTypes{}.standalone_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"single_message_set","expr":"has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{bb: 123}}.standalone_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{\n bb:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{\n bb:123~int\n }~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"single_message_set_to_default","expr":"has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool","type":"bool"},{"original":{"name":"single_enum_unset","expr":"has(TestAllTypes{}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"single_enum_set","expr":"has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"single_enum_set_zero","expr":"has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool","type":"bool"},{"original":{"name":"oneof_unset","expr":"has(TestAllTypes{}.single_nested_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_other_set","expr":"has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"ast":"TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_set","expr":"has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_nested_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_nested_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool","type":"bool"},{"original":{"name":"oneof_set_default","expr":"has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_enum~test-only~^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_enum~test-only~~bool","type":"bool"}]},{"name":"set_null","tests":[{"original":{"name":"single_message","expr":"TestAllTypes{single_nested_message: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_nested_message:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_nested_message:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_any","expr":"TestAllTypes{single_any: null}.single_any","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_any:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"single_value","expr":"TestAllTypes{single_value: null}.single_value","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"single_duration","expr":"TestAllTypes{single_duration: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_duration:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_duration:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_timestamp","expr":"TestAllTypes{single_timestamp: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_timestamp:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_timestamp:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"},{"original":{"name":"single_scalar","expr":"TestAllTypes{single_bool: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n single_bool:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:25: expected type of field 'single_bool' is 'bool' but provided type is 'null'\n | TestAllTypes{single_bool: null} == TestAllTypes{}\n | ........................^"},{"original":{"name":"repeated","expr":"TestAllTypes{repeated_int32: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n repeated_int32:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:28: expected type of field 'repeated_int32' is 'list(int)' but provided type is 'null'\n | TestAllTypes{repeated_int32: null} == TestAllTypes{}\n | ...........................^"},{"original":{"name":"map","expr":"TestAllTypes{map_string_string: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n map_string_string:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:31: expected type of field 'map_string_string' is 'map(string, string)' but provided type is 'null'\n | TestAllTypes{map_string_string: null} == TestAllTypes{}\n | ..............................^"},{"original":{"name":"list_value","expr":"TestAllTypes{list_value: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n list_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: expected type of field 'list_value' is 'list(dyn)' but provided type is 'null'\n | TestAllTypes{list_value: null} == TestAllTypes{}\n | .......................^"},{"original":{"name":"single_struct","expr":"TestAllTypes{single_struct: null} == TestAllTypes{}","disableCheck":true,"container":"cel.expr.conformance.proto3","evalError":{"errors":[{"message":"unsupported field type"}]}},"ast":"_==_(\n TestAllTypes{\n single_struct:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'null'\n | TestAllTypes{single_struct: null} == TestAllTypes{}\n | ..........................^"}]},{"name":"quoted_fields","tests":[{"original":{"name":"set_field","expr":"TestAllTypes{`in`: true} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":false}},"error":"ERROR: set_field:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true} == TestAllTypes{}\n | .............^"},{"original":{"name":"get_field","expr":"TestAllTypes{`in`: true}.`in`","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"error":"ERROR: get_field:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .............^\nERROR: get_field:1:26: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .........................^"}]}]},{"name":"string","suites":[{"name":"size","tests":[{"original":{"name":"empty","expr":"size('')","value":{"int64Value":"0"}},"ast":"size(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"\"~string\n)~int^size_string","type":"int"},{"original":{"name":"one_ascii","expr":"size('A')","value":{"int64Value":"1"}},"ast":"size(\n \"A\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"A\"~string\n)~int^size_string","type":"int"},{"original":{"name":"one_unicode","expr":"size('ÿ')","value":{"int64Value":"1"}},"ast":"size(\n \"ÿ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"ÿ\"~string\n)~int^size_string","type":"int"},{"original":{"name":"ascii","expr":"size('four')","value":{"int64Value":"4"}},"ast":"size(\n \"four\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"four\"~string\n)~int^size_string","type":"int"},{"original":{"name":"unicode","expr":"size('πέντε')","value":{"int64Value":"5"}},"ast":"size(\n \"πέντε\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n \"πέντε\"~string\n)~int^size_string","type":"int"},{"original":{"name":"bytes_empty","expr":"size(b'')","value":{"int64Value":"0"}},"ast":"size(\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n b\"\"~bytes\n)~int^size_bytes","type":"int"},{"original":{"name":"bytes","expr":"size(b'abc')","value":{"int64Value":"3"}},"ast":"size(\n b\"abc\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"size(\n b\"abc\"~bytes\n)~int^size_bytes","type":"int"}]},{"name":"starts_with","tests":[{"original":{"name":"basic_true","expr":"'foobar'.startsWith('foo')","value":{"boolValue":true}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.startsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.startsWith(\n \"foo\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"basic_false","expr":"'foobar'.startsWith('bar')","value":{"boolValue":false}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.startsWith(\n \"bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.startsWith(\n \"bar\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"empty_target","expr":"''.startsWith('foo')","value":{"boolValue":false}},"ast":"\"\"^#*expr.Constant_StringValue#.startsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.startsWith(\n \"foo\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"empty_arg","expr":"'foobar'.startsWith('')","value":{"boolValue":true}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.startsWith(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.startsWith(\n \"\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"empty_empty","expr":"''.startsWith('')","value":{"boolValue":true}},"ast":"\"\"^#*expr.Constant_StringValue#.startsWith(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.startsWith(\n \"\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"unicode","expr":"'завтра'.startsWith('за')","value":{"boolValue":true}},"ast":"\"завтра\"^#*expr.Constant_StringValue#.startsWith(\n \"за\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"завтра\"~string.startsWith(\n \"за\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"unicode_smp","expr":"'🐱😀😛'.startsWith('🐱')","value":{"boolValue":true}},"ast":"\"🐱😀😛\"^#*expr.Constant_StringValue#.startsWith(\n \"🐱\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"🐱😀😛\"~string.startsWith(\n \"🐱\"~string\n)~bool^starts_with_string","type":"bool"}]},{"name":"ends_with","tests":[{"original":{"name":"basic_true","expr":"'foobar'.endsWith('bar')","value":{"boolValue":true}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.endsWith(\n \"bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.endsWith(\n \"bar\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"basic_false","expr":"'foobar'.endsWith('foo')","value":{"boolValue":false}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.endsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.endsWith(\n \"foo\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"empty_target","expr":"''.endsWith('foo')","value":{"boolValue":false}},"ast":"\"\"^#*expr.Constant_StringValue#.endsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.endsWith(\n \"foo\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"empty_arg","expr":"'foobar'.endsWith('')","value":{"boolValue":true}},"ast":"\"foobar\"^#*expr.Constant_StringValue#.endsWith(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"foobar\"~string.endsWith(\n \"\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"empty_empty","expr":"''.endsWith('')","value":{"boolValue":true}},"ast":"\"\"^#*expr.Constant_StringValue#.endsWith(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.endsWith(\n \"\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"unicode","expr":"'forté'.endsWith('té')","value":{"boolValue":true}},"ast":"\"forté\"^#*expr.Constant_StringValue#.endsWith(\n \"té\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"forté\"~string.endsWith(\n \"té\"~string\n)~bool^ends_with_string","type":"bool"},{"original":{"name":"unicode_smp","expr":"'🐱😀😛'.endsWith('😛')","value":{"boolValue":true}},"ast":"\"🐱😀😛\"^#*expr.Constant_StringValue#.endsWith(\n \"😛\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"🐱😀😛\"~string.endsWith(\n \"😛\"~string\n)~bool^ends_with_string","type":"bool"}]},{"name":"matches","tests":[{"original":{"name":"basic","expr":"'hubba'.matches('ubb')","value":{"boolValue":true}},"ast":"\"hubba\"^#*expr.Constant_StringValue#.matches(\n \"ubb\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"hubba\"~string.matches(\n \"ubb\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"empty_target","expr":"''.matches('foo|bar')","value":{"boolValue":false}},"ast":"\"\"^#*expr.Constant_StringValue#.matches(\n \"foo|bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.matches(\n \"foo|bar\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"empty_arg","expr":"'cows'.matches('')","value":{"boolValue":true}},"ast":"\"cows\"^#*expr.Constant_StringValue#.matches(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"cows\"~string.matches(\n \"\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"empty_empty","expr":"''.matches('')","value":{"boolValue":true}},"ast":"\"\"^#*expr.Constant_StringValue#.matches(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.matches(\n \"\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"re_concat","expr":"'abcd'.matches('bc')","value":{"boolValue":true}},"ast":"\"abcd\"^#*expr.Constant_StringValue#.matches(\n \"bc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"abcd\"~string.matches(\n \"bc\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"re_alt","expr":"'grey'.matches('gr(a|e)y')","value":{"boolValue":true}},"ast":"\"grey\"^#*expr.Constant_StringValue#.matches(\n \"gr(a|e)y\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"grey\"~string.matches(\n \"gr(a|e)y\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"re_rep","expr":"'banana'.matches('ba(na)*')","value":{"boolValue":true}},"ast":"\"banana\"^#*expr.Constant_StringValue#.matches(\n \"ba(na)*\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"banana\"~string.matches(\n \"ba(na)*\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"unicode","expr":"'mañana'.matches('a+ñ+a+')","value":{"boolValue":true}},"ast":"\"mañana\"^#*expr.Constant_StringValue#.matches(\n \"a+ñ+a+\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"mañana\"~string.matches(\n \"a+ñ+a+\"~string\n)~bool^matches_string","type":"bool"},{"original":{"name":"unicode_smp","expr":"'🐱😀😀'.matches('(a|😀){2}')","value":{"boolValue":true}},"ast":"\"🐱😀😀\"^#*expr.Constant_StringValue#.matches(\n \"(a|😀){2}\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"🐱😀😀\"~string.matches(\n \"(a|😀){2}\"~string\n)~bool^matches_string","type":"bool"}]},{"name":"concatenation","tests":[{"original":{"name":"concat_true","expr":"'he' + 'llo'","value":{"stringValue":"hello"}},"ast":"_+_(\n \"he\"^#*expr.Constant_StringValue#,\n \"llo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"he\"~string,\n \"llo\"~string\n)~string^add_string","type":"string"},{"original":{"name":"concat_with_spaces","expr":"'hello' + ' ' == 'hello'","value":{"boolValue":false}},"ast":"_==_(\n _+_(\n \"hello\"^#*expr.Constant_StringValue#,\n \" \"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"hello\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n \"hello\"~string,\n \" \"~string\n )~string^add_string,\n \"hello\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"concat_empty_string_beginning","expr":"'' + 'abc'","value":{"stringValue":"abc"}},"ast":"_+_(\n \"\"^#*expr.Constant_StringValue#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"\"~string,\n \"abc\"~string\n)~string^add_string","type":"string"},{"original":{"name":"concat_empty_string_end","expr":"'abc' + ''","value":{"stringValue":"abc"}},"ast":"_+_(\n \"abc\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"abc\"~string,\n \"\"~string\n)~string^add_string","type":"string"},{"original":{"name":"concat_empty_with_empty","expr":"'' + ''","value":{"stringValue":""}},"ast":"_+_(\n \"\"^#*expr.Constant_StringValue#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"\"~string,\n \"\"~string\n)~string^add_string","type":"string"},{"original":{"name":"unicode_unicode","expr":"'¢' + 'ÿ' + 'Ȁ'","value":{"stringValue":"¢ÿȀ"}},"ast":"_+_(\n _+_(\n \"¢\"^#*expr.Constant_StringValue#,\n \"ÿ\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"Ȁ\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _+_(\n \"¢\"~string,\n \"ÿ\"~string\n )~string^add_string,\n \"Ȁ\"~string\n)~string^add_string","type":"string"},{"original":{"name":"ascii_unicode","expr":"'r' + 'ô' + 'le'","value":{"stringValue":"rôle"}},"ast":"_+_(\n _+_(\n \"r\"^#*expr.Constant_StringValue#,\n \"ô\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"le\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _+_(\n \"r\"~string,\n \"ô\"~string\n )~string^add_string,\n \"le\"~string\n)~string^add_string","type":"string"},{"original":{"name":"ascii_unicode_unicode_smp","expr":"'a' + 'ÿ' + '🐱'","value":{"stringValue":"aÿ🐱"}},"ast":"_+_(\n _+_(\n \"a\"^#*expr.Constant_StringValue#,\n \"ÿ\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"🐱\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _+_(\n \"a\"~string,\n \"ÿ\"~string\n )~string^add_string,\n \"🐱\"~string\n)~string^add_string","type":"string"},{"original":{"name":"empty_unicode","expr":"'' + 'Ω' + ''","value":{"stringValue":"Ω"}},"ast":"_+_(\n _+_(\n \"\"^#*expr.Constant_StringValue#,\n \"Ω\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n _+_(\n \"\"~string,\n \"Ω\"~string\n )~string^add_string,\n \"\"~string\n)~string^add_string","type":"string"}]},{"name":"contains","tests":[{"original":{"name":"contains_true","expr":"'hello'.contains('he')","value":{"boolValue":true}},"ast":"\"hello\"^#*expr.Constant_StringValue#.contains(\n \"he\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"hello\"~string.contains(\n \"he\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_empty","expr":"'hello'.contains('')","value":{"boolValue":true}},"ast":"\"hello\"^#*expr.Constant_StringValue#.contains(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"hello\"~string.contains(\n \"\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_false","expr":"'hello'.contains('ol')","value":{"boolValue":false}},"ast":"\"hello\"^#*expr.Constant_StringValue#.contains(\n \"ol\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"hello\"~string.contains(\n \"ol\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_multiple","expr":"'abababc'.contains('ababc')","value":{"boolValue":true}},"ast":"\"abababc\"^#*expr.Constant_StringValue#.contains(\n \"ababc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"abababc\"~string.contains(\n \"ababc\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_unicode","expr":"'Straße'.contains('aß')","value":{"boolValue":true}},"ast":"\"Straße\"^#*expr.Constant_StringValue#.contains(\n \"aß\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"Straße\"~string.contains(\n \"aß\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"contains_unicode_smp","expr":"'🐱😀😁'.contains('😀')","value":{"boolValue":true}},"ast":"\"🐱😀😁\"^#*expr.Constant_StringValue#.contains(\n \"😀\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"🐱😀😁\"~string.contains(\n \"😀\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"empty_contains","expr":"''.contains('something')","value":{"boolValue":false}},"ast":"\"\"^#*expr.Constant_StringValue#.contains(\n \"something\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.contains(\n \"something\"~string\n)~bool^contains_string","type":"bool"},{"original":{"name":"empty_empty","expr":"''.contains('')","value":{"boolValue":true}},"ast":"\"\"^#*expr.Constant_StringValue#.contains(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"\"~string.contains(\n \"\"~string\n)~bool^contains_string","type":"bool"}]},{"name":"bytes_concat","tests":[{"original":{"name":"concat","expr":"b'abc' + b'def'","value":{"bytesValue":"YWJjZGVm"}},"ast":"_+_(\n b\"abc\"^#*expr.Constant_BytesValue#,\n b\"def\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n b\"abc\"~bytes,\n b\"def\"~bytes\n)~bytes^add_bytes","type":"bytes"},{"original":{"name":"left_unit","expr":"b'' + b'\\xffoo'","value":{"bytesValue":"/29v"}},"ast":"_+_(\n b\"\"^#*expr.Constant_BytesValue#,\n b\"\\xffoo\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n b\"\"~bytes,\n b\"\\xffoo\"~bytes\n)~bytes^add_bytes","type":"bytes"},{"original":{"name":"right_unit","expr":"b'zxy' + b''","value":{"bytesValue":"enh5"}},"ast":"_+_(\n b\"zxy\"^#*expr.Constant_BytesValue#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n b\"zxy\"~bytes,\n b\"\"~bytes\n)~bytes^add_bytes","type":"bytes"},{"original":{"name":"empty_empty","expr":"b'' + b''","value":{"bytesValue":""}},"ast":"_+_(\n b\"\"^#*expr.Constant_BytesValue#,\n b\"\"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n b\"\"~bytes,\n b\"\"~bytes\n)~bytes^add_bytes","type":"bytes"}]}]},{"name":"string_ext","suites":[{"name":"char_at","tests":[{"original":{"name":"middle_index","expr":"'tacocat'.charAt(3)","value":{"stringValue":"o"}},"ast":"\"tacocat\"^#*expr.Constant_StringValue#.charAt(\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"tacocat\"~string.charAt(\n 3~int\n)~string^string_char_at_int","type":"string"},{"original":{"name":"end_index","expr":"'tacocat'.charAt(7)","value":{"stringValue":""}},"ast":"\"tacocat\"^#*expr.Constant_StringValue#.charAt(\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"tacocat\"~string.charAt(\n 7~int\n)~string^string_char_at_int","type":"string"},{"original":{"name":"multiple","expr":"'©αT'.charAt(0) == '©' \u0026\u0026 '©αT'.charAt(1) == 'α' \u0026\u0026 '©αT'.charAt(2) == 'T'"},"ast":"_\u0026\u0026_(\n _\u0026\u0026_(\n _==_(\n \"©αT\"^#*expr.Constant_StringValue#.charAt(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"©\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n \"©αT\"^#*expr.Constant_StringValue#.charAt(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"α\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _==_(\n \"©αT\"^#*expr.Constant_StringValue#.charAt(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"T\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u0026\u0026_(\n _\u0026\u0026_(\n _==_(\n \"©αT\"~string.charAt(\n 0~int\n )~string^string_char_at_int,\n \"©\"~string\n )~bool^equals,\n _==_(\n \"©αT\"~string.charAt(\n 1~int\n )~string^string_char_at_int,\n \"α\"~string\n )~bool^equals\n )~bool^logical_and,\n _==_(\n \"©αT\"~string.charAt(\n 2~int\n )~string^string_char_at_int,\n \"T\"~string\n )~bool^equals\n)~bool^logical_and","type":"bool"}]},{"name":"index_of","tests":[{"original":{"name":"empty_index","expr":"'tacocat'.indexOf('')","value":{"int64Value":"0"}},"ast":"\"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"tacocat\"~string.indexOf(\n \"\"~string\n)~int^string_index_of_string","type":"int"},{"original":{"name":"string_index","expr":"'tacocat'.indexOf('ac')","value":{"int64Value":"1"}},"ast":"\"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"ac\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"tacocat\"~string.indexOf(\n \"ac\"~string\n)~int^string_index_of_string","type":"int"},{"original":{"name":"nomatch","expr":"'tacocat'.indexOf('none') == -1"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"none\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"none\"~string\n )~int^string_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"empty_index","expr":"'tacocat'.indexOf('', 3) == 3"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 3~int\n)~bool^equals","type":"bool"},{"original":{"name":"char_index","expr":"'tacocat'.indexOf('a', 3) == 5"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"a\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"a\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 5~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_index","expr":"'tacocat'.indexOf('at', 3) == 5"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"at\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"at\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 5~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_char","expr":"'ta©o©αT'.indexOf('©') == 2"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.indexOf(\n \"©\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.indexOf(\n \"©\"~string\n )~int^string_index_of_string,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_char_index","expr":"'ta©o©αT'.indexOf('©', 3) == 4"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.indexOf(\n \"©\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.indexOf(\n \"©\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 4~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_string_index","expr":"'ta©o©αT'.indexOf('©αT', 3) == 4"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.indexOf(\n \"©αT\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.indexOf(\n \"©αT\"~string,\n 3~int\n )~int^string_index_of_string_int,\n 4~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_string_nomatch_index","expr":"'ta©o©αT'.indexOf('©α', 5) == -1"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.indexOf(\n \"©α\"^#*expr.Constant_StringValue#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.indexOf(\n \"©α\"~string,\n 5~int\n )~int^string_index_of_string_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"char_index","expr":"'ijk'.indexOf('k') == 2"},"ast":"_==_(\n \"ijk\"^#*expr.Constant_StringValue#.indexOf(\n \"k\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ijk\"~string.indexOf(\n \"k\"~string\n )~int^string_index_of_string,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_fullmatch","expr":"'hello wello'.indexOf('hello wello') == 0"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.indexOf(\n \"hello wello\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.indexOf(\n \"hello wello\"~string\n )~int^string_index_of_string,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_index","expr":"'hello wello'.indexOf('ello', 6) == 7"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.indexOf(\n \"ello\"^#*expr.Constant_StringValue#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.indexOf(\n \"ello\"~string,\n 6~int\n )~int^string_index_of_string_int,\n 7~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_nomatch_index","expr":"'hello wello'.indexOf('elbo room!!') == -1"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.indexOf(\n \"elbo room!!\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.indexOf(\n \"elbo room!!\"~string\n )~int^string_index_of_string,\n -1~int\n)~bool^equals","type":"bool"}]},{"name":"last_index_of","tests":[{"original":{"name":"empty_string","expr":"''.lastIndexOf('@@') == -1"},"ast":"_==_(\n \"\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"@@\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\"~string.lastIndexOf(\n \"@@\"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"empty_argument","expr":"'tacocat'.lastIndexOf('') == 7"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"\"~string\n )~int^string_last_index_of_string,\n 7~int\n)~bool^equals","type":"bool"},{"original":{"name":"string","expr":"'tacocat'.lastIndexOf('at') == 5"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"at\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"at\"~string\n )~int^string_last_index_of_string,\n 5~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_nomatch","expr":"'tacocat'.lastIndexOf('none') == -1"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"none\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"none\"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"empty_index","expr":"'tacocat'.lastIndexOf('', 3) == 3"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"\"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 3~int\n)~bool^equals","type":"bool"},{"original":{"name":"char_index","expr":"'tacocat'.lastIndexOf('a', 3) == 1"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"a\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"a\"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_char","expr":"'ta©o©αT'.lastIndexOf('©') == 4"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"©\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.lastIndexOf(\n \"©\"~string\n )~int^string_last_index_of_string,\n 4~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_char_index","expr":"'ta©o©αT'.lastIndexOf('©', 3) == 2"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"©\"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.lastIndexOf(\n \"©\"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 2~int\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_string_index","expr":"'ta©o©αT'.lastIndexOf('©α', 4) == 4"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"©α\"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.lastIndexOf(\n \"©α\"~string,\n 4~int\n )~int^string_last_index_of_string_int,\n 4~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_string_index","expr":"'hello wello'.lastIndexOf('ello', 6) == 1"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"ello\"^#*expr.Constant_StringValue#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.lastIndexOf(\n \"ello\"~string,\n 6~int\n )~int^string_last_index_of_string_int,\n 1~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_string_nomatch","expr":"'hello wello'.lastIndexOf('low') == -1"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"low\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.lastIndexOf(\n \"low\"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_string_with_space_nomatch","expr":"'hello wello'.lastIndexOf('elbo room!!') == -1"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"elbo room!!\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.lastIndexOf(\n \"elbo room!!\"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"string_with_space_fullmatch","expr":"'hello wello'.lastIndexOf('hello wello') == 0"},"ast":"_==_(\n \"hello wello\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"hello wello\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello wello\"~string.lastIndexOf(\n \"hello wello\"~string\n )~int^string_last_index_of_string,\n 0~int\n)~bool^equals","type":"bool"},{"original":{"name":"repeated_string","expr":"'bananananana'.lastIndexOf('nana', 7) == 6"},"ast":"_==_(\n \"bananananana\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"nana\"^#*expr.Constant_StringValue#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 6^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"bananananana\"~string.lastIndexOf(\n \"nana\"~string,\n 7~int\n )~int^string_last_index_of_string_int,\n 6~int\n)~bool^equals","type":"bool"}]},{"name":"ascii_casing","tests":[{"original":{"name":"lowerascii","expr":"'TacoCat'.lowerAscii() == 'tacocat'"},"ast":"_==_(\n \"TacoCat\"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n \"tacocat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"TacoCat\"~string.lowerAscii()~string^string_lower_ascii,\n \"tacocat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"lowerascii_unicode","expr":"'TacoCÆt'.lowerAscii() == 'tacocÆt'"},"ast":"_==_(\n \"TacoCÆt\"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n \"tacocÆt\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"TacoCÆt\"~string.lowerAscii()~string^string_lower_ascii,\n \"tacocÆt\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"lowerascii_unicode_with_space","expr":"'TacoCÆt Xii'.lowerAscii() == 'tacocÆt xii'"},"ast":"_==_(\n \"TacoCÆt Xii\"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n \"tacocÆt xii\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"TacoCÆt Xii\"~string.lowerAscii()~string^string_lower_ascii,\n \"tacocÆt xii\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"upperascii","expr":"'tacoCat'.upperAscii() == 'TACOCAT'"},"ast":"_==_(\n \"tacoCat\"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n \"TACOCAT\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacoCat\"~string.upperAscii()~string^string_upper_ascii,\n \"TACOCAT\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"upperascii_unicode","expr":"'tacoCαt'.upperAscii() == 'TACOCαT'"},"ast":"_==_(\n \"tacoCαt\"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n \"TACOCαT\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacoCαt\"~string.upperAscii()~string^string_upper_ascii,\n \"TACOCαT\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"upperascii_unicode_with_space","expr":"'TacoCÆt Xii'.upperAscii() == 'TACOCÆT XII'"},"ast":"_==_(\n \"TacoCÆt Xii\"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n \"TACOCÆT XII\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"TacoCÆt Xii\"~string.upperAscii()~string^string_upper_ascii,\n \"TACOCÆT XII\"~string\n)~bool^equals","type":"bool"}]},{"name":"replace","tests":[{"original":{"name":"no_placeholder","expr":"'12 days 12 hours'.replace('{0}', '2') == '12 days 12 hours'"},"ast":"_==_(\n \"12 days 12 hours\"^#*expr.Constant_StringValue#.replace(\n \"{0}\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"12 days 12 hours\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"12 days 12 hours\"~string.replace(\n \"{0}\"~string,\n \"2\"~string\n )~string^string_replace_string_string,\n \"12 days 12 hours\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"basic","expr":"'{0} days {0} hours'.replace('{0}', '2') == '2 days 2 hours'"},"ast":"_==_(\n \"{0} days {0} hours\"^#*expr.Constant_StringValue#.replace(\n \"{0}\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"2 days 2 hours\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"{0} days {0} hours\"~string.replace(\n \"{0}\"~string,\n \"2\"~string\n )~string^string_replace_string_string,\n \"2 days 2 hours\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"chained","expr":"'{0} days {0} hours'.replace('{0}', '2', 1).replace('{0}', '23') == '2 days 23 hours'"},"ast":"_==_(\n \"{0} days {0} hours\"^#*expr.Constant_StringValue#.replace(\n \"{0}\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.replace(\n \"{0}\"^#*expr.Constant_StringValue#,\n \"23\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"2 days 23 hours\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"{0} days {0} hours\"~string.replace(\n \"{0}\"~string,\n \"2\"~string,\n 1~int\n )~string^string_replace_string_string_int.replace(\n \"{0}\"~string,\n \"23\"~string\n )~string^string_replace_string_string,\n \"2 days 23 hours\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode","expr":"'1 ©αT taco'.replace('αT', 'o©α') == '1 ©o©α taco'"},"ast":"_==_(\n \"1 ©αT taco\"^#*expr.Constant_StringValue#.replace(\n \"αT\"^#*expr.Constant_StringValue#,\n \"o©α\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"1 ©o©α taco\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"1 ©αT taco\"~string.replace(\n \"αT\"~string,\n \"o©α\"~string\n )~string^string_replace_string_string,\n \"1 ©o©α taco\"~string\n)~bool^equals","type":"bool"}]},{"name":"split","tests":[{"original":{"name":"empty","expr":"'hello world'.split(' ') == ['hello', 'world']"},"ast":"_==_(\n \"hello world\"^#*expr.Constant_StringValue#.split(\n \" \"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"hello\"^#*expr.Constant_StringValue#,\n \"world\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello world\"~string.split(\n \" \"~string\n )~list(string)^string_split_string,\n [\n \"hello\"~string,\n \"world\"~string\n ]~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"zero_limit","expr":"'hello world events!'.split(' ', 0) == []"},"ast":"_==_(\n \"hello world events!\"^#*expr.Constant_StringValue#.split(\n \" \"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello world events!\"~string.split(\n \" \"~string,\n 0~int\n )~list(string)^string_split_string_int,\n []~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"one_limit","expr":"'hello world events!'.split(' ', 1) == ['hello world events!']"},"ast":"_==_(\n \"hello world events!\"^#*expr.Constant_StringValue#.split(\n \" \"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"hello world events!\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"hello world events!\"~string.split(\n \" \"~string,\n 1~int\n )~list(string)^string_split_string_int,\n [\n \"hello world events!\"~string\n ]~list(string)\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_negative_limit","expr":"'o©o©o©o'.split('©', -1) == ['o', 'o', 'o', 'o']"},"ast":"_==_(\n \"o©o©o©o\"^#*expr.Constant_StringValue#.split(\n \"©\"^#*expr.Constant_StringValue#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"o\"^#*expr.Constant_StringValue#,\n \"o\"^#*expr.Constant_StringValue#,\n \"o\"^#*expr.Constant_StringValue#,\n \"o\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"o©o©o©o\"~string.split(\n \"©\"~string,\n -1~int\n )~list(string)^string_split_string_int,\n [\n \"o\"~string,\n \"o\"~string,\n \"o\"~string,\n \"o\"~string\n ]~list(string)\n)~bool^equals","type":"bool"}]},{"name":"substring","tests":[{"original":{"name":"start","expr":"'tacocat'.substring(4) == 'cat'"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 4~int\n )~string^string_substring_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"start_with_max_length","expr":"'tacocat'.substring(7) == ''"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 7~int\n )~string^string_substring_int,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"start_and_end","expr":"'tacocat'.substring(0, 4) == 'taco'"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 0^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"taco\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 0~int,\n 4~int\n )~string^string_substring_int_int,\n \"taco\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"start_and_end_equal_value","expr":"'tacocat'.substring(4, 4) == ''"},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 4~int,\n 4~int\n )~string^string_substring_int_int,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_start_and_end","expr":"'ta©o©αT'.substring(2, 6) == '©o©α'"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.substring(\n 2^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"©o©α\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.substring(\n 2~int,\n 6~int\n )~string^string_substring_int_int,\n \"©o©α\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_start_and_end_equal_value","expr":"'ta©o©αT'.substring(7, 7) == ''"},"ast":"_==_(\n \"ta©o©αT\"^#*expr.Constant_StringValue#.substring(\n 7^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"ta©o©αT\"~string.substring(\n 7~int,\n 7~int\n )~string^string_substring_int_int,\n \"\"~string\n)~bool^equals","type":"bool"}]},{"name":"trim","tests":[{"original":{"name":"blank_spaces_escaped_chars","expr":"' \\f\\n\\r\\t\\vtext '.trim() == 'text'"},"ast":"_==_(\n \" \\f\\n\\r\\t\\vtext \"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"text\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \" \\f\\n\\r\\t\\vtext \"~string.trim()~string^string_trim,\n \"text\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_space_chars_1","expr":"'\\u0085\\u00a0\\u1680text'.trim() == 'text'"},"ast":"_==_(\n \"\\u0085\\u00a0\\u1680text\"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"text\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\\u0085\\u00a0\\u1680text\"~string.trim()~string^string_trim,\n \"text\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_space_chars_2","expr":"'text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009'.trim() == 'text'"},"ast":"_==_(\n \"text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009\"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"text\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009\"~string.trim()~string^string_trim,\n \"text\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_space_chars_3","expr":"'\\u200atext\\u2028\\u2029\\u202F\\u205F\\u3000'.trim() == 'text'"},"ast":"_==_(\n \"\\u200atext\\u2028\\u2029\\u202f\\u205f\\u3000\"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"text\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\\u200atext\\u2028\\u2029\\u202f\\u205f\\u3000\"~string.trim()~string^string_trim,\n \"text\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_no_trim","expr":"'\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'.trim() == '\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'"},"ast":"_==_(\n \"\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff\"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n \"\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff\"~string.trim()~string^string_trim,\n \"\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff\"~string\n)~bool^equals","type":"bool"}]},{"name":"join","tests":[{"original":{"name":"empty_separator","expr":"['x', 'y'].join() == 'xy'"},"ast":"_==_(\n [\n \"x\"^#*expr.Constant_StringValue#,\n \"y\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#.join()^#*expr.Expr_CallExpr#,\n \"xy\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n \"x\"~string,\n \"y\"~string\n ]~list(string).join()~string^list_join,\n \"xy\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"dash_separator","expr":"['x', 'y'].join('-') == 'x-y'"},"ast":"_==_(\n [\n \"x\"^#*expr.Constant_StringValue#,\n \"y\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#.join(\n \"-\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"x-y\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n [\n \"x\"~string,\n \"y\"~string\n ]~list(string).join(\n \"-\"~string\n )~string^list_join_string,\n \"x-y\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"empty_string_empty_separator","expr":"[].join() == ''"},"ast":"_==_(\n []^#*expr.Expr_ListExpr#.join()^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n []~list(string).join()~string^list_join,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"empty_string_dash_separator","expr":"[].join('-') == ''"},"ast":"_==_(\n []^#*expr.Expr_ListExpr#.join(\n \"-\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n []~list(string).join(\n \"-\"~string\n )~string^list_join_string,\n \"\"~string\n)~bool^equals","type":"bool"}]},{"name":"quote","tests":[{"original":{"name":"multiline","expr":"strings.quote(\"first\\nsecond\") == \"\\\"first\\\\nsecond\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"first\\nsecond\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"first\\\\nsecond\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"first\\nsecond\"~string\n )~string^strings_quote,\n \"\\\"first\\\\nsecond\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"escaped","expr":"strings.quote(\"bell\\a\") == \"\\\"bell\\\\a\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"bell\\a\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"bell\\\\a\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"bell\\a\"~string\n )~string^strings_quote,\n \"\\\"bell\\\\a\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"backspace","expr":"strings.quote(\"\\bbackspace\") == \"\\\"\\\\bbackspace\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"\\bbackspace\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"\\\\bbackspace\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"\\bbackspace\"~string\n )~string^strings_quote,\n \"\\\"\\\\bbackspace\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"form_feed","expr":"strings.quote(\"\\fform feed\") == \"\\\"\\\\fform feed\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"\\fform feed\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"\\\\fform feed\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"\\fform feed\"~string\n )~string^strings_quote,\n \"\\\"\\\\fform feed\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"carriage_return","expr":"strings.quote(\"carriage \\r return\") == \"\\\"carriage \\\\r return\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"carriage \\r return\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"carriage \\\\r return\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"carriage \\r return\"~string\n )~string^strings_quote,\n \"\\\"carriage \\\\r return\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"horizontal_tab","expr":"strings.quote(\"horizontal tab\\t\") == \"\\\"horizontal tab\\\\t\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"horizontal tab\\t\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"horizontal tab\\\\t\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"horizontal tab\\t\"~string\n )~string^strings_quote,\n \"\\\"horizontal tab\\\\t\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"vertical_tab","expr":"strings.quote(\"vertical \\v tab\") == \"\\\"vertical \\\\v tab\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"vertical \\v tab\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"vertical \\\\v tab\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"vertical \\v tab\"~string\n )~string^strings_quote,\n \"\\\"vertical \\\\v tab\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"double_slash","expr":"strings.quote(\"double \\\\\\\\ slash\") == \"\\\"double \\\\\\\\\\\\\\\\ slash\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"double \\\\\\\\ slash\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"double \\\\\\\\\\\\\\\\ slash\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"double \\\\\\\\ slash\"~string\n )~string^strings_quote,\n \"\\\"double \\\\\\\\\\\\\\\\ slash\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"two_escape_sequences","expr":"strings.quote(\"two escape sequences \\\\a\\\\n\") == \"\\\"two escape sequences \\\\\\\\a\\\\\\\\n\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"two escape sequences \\\\a\\\\n\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"two escape sequences \\\\\\\\a\\\\\\\\n\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"two escape sequences \\\\a\\\\n\"~string\n )~string^strings_quote,\n \"\\\"two escape sequences \\\\\\\\a\\\\\\\\n\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"verbatim","expr":"strings.quote(\"verbatim\") == \"\\\"verbatim\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"verbatim\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"verbatim\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"verbatim\"~string\n )~string^strings_quote,\n \"\\\"verbatim\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"ends_with","expr":"strings.quote(\"ends with \\\\\") == \"\\\"ends with \\\\\\\\\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"ends with \\\\\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"ends with \\\\\\\\\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"ends with \\\\\"~string\n )~string^strings_quote,\n \"\\\"ends with \\\\\\\\\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"starts_with","expr":"strings.quote(\"\\\\ starts with\") == \"\\\"\\\\\\\\ starts with\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"\\\\ starts with\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"\\\\\\\\ starts with\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"\\\\ starts with\"~string\n )~string^strings_quote,\n \"\\\"\\\\\\\\ starts with\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"printable_unicode","expr":"strings.quote(\"printable unicode😀\") == \"\\\"printable unicode😀\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"printable unicode😀\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"printable unicode😀\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"printable unicode😀\"~string\n )~string^strings_quote,\n \"\\\"printable unicode😀\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"mid_string_quote","expr":"strings.quote(\"mid string \\\" quote\") == \"\\\"mid string \\\\\\\" quote\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"mid string \\\" quote\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"mid string \\\\\\\" quote\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"mid string \\\" quote\"~string\n )~string^strings_quote,\n \"\\\"mid string \\\\\\\" quote\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"single_quote_with_double_quote","expr":"strings.quote('single-quote with \"double quote\"') == \"\\\"single-quote with \\\\\\\"double quote\\\\\\\"\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"single-quote with \\\"double quote\\\"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"single-quote with \\\\\\\"double quote\\\\\\\"\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"single-quote with \\\"double quote\\\"\"~string\n )~string^strings_quote,\n \"\\\"single-quote with \\\\\\\"double quote\\\\\\\"\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"size_unicode_char","expr":"strings.quote(\"size('ÿ')\") == \"\\\"size('ÿ')\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"size('ÿ')\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"size('ÿ')\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"size('ÿ')\"~string\n )~string^strings_quote,\n \"\\\"size('ÿ')\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"size_unicode_string","expr":"strings.quote(\"size('πέντε')\") == \"\\\"size('πέντε')\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"size('πέντε')\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"size('πέντε')\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"size('πέντε')\"~string\n )~string^strings_quote,\n \"\\\"size('πέντε')\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode","expr":"strings.quote(\"завтра\") == \"\\\"завтра\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"завтра\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"завтра\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"завтра\"~string\n )~string^strings_quote,\n \"\\\"завтра\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"unicode_code_points","expr":"strings.quote(\"\\U0001F431\\U0001F600\\U0001F61B\")","value":{"stringValue":"\"🐱😀😛\""}},"ast":"strings^#*expr.Expr_IdentExpr#.quote(\n \"🐱😀😛\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"strings.quote(\n \"🐱😀😛\"~string\n)~string^strings_quote","type":"string"},{"original":{"name":"unicode_2","expr":"strings.quote(\"ta©o©αT\") == \"\\\"ta©o©αT\\\"\""},"ast":"_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n \"ta©o©αT\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"\\\"ta©o©αT\\\"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n strings.quote(\n \"ta©o©αT\"~string\n )~string^strings_quote,\n \"\\\"ta©o©αT\\\"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"empty_quote","expr":"strings.quote(\"\")","value":{"stringValue":"\"\""}},"ast":"strings^#*expr.Expr_IdentExpr#.quote(\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"strings.quote(\n \"\"~string\n)~string^strings_quote","type":"string"}]},{"name":"format","tests":[{"original":{"name":"no-op","expr":"\"no substitution\".format([])","value":{"stringValue":"no substitution"}},"ast":"\"no substitution\"^#*expr.Constant_StringValue#.format(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"no substitution\"~string.format(\n []~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"mid-string substitution","expr":"\"str is %s and some more\".format([\"filler\"])","value":{"stringValue":"str is filler and some more"}},"ast":"\"str is %s and some more\"^#*expr.Constant_StringValue#.format(\n [\n \"filler\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"str is %s and some more\"~string.format(\n [\n \"filler\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"percent escaping","expr":"\"%% and also %%\".format([])","value":{"stringValue":"% and also %"}},"ast":"\"%% and also %%\"^#*expr.Constant_StringValue#.format(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%% and also %%\"~string.format(\n []~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"substitution inside escaped percent signs","expr":"\"%%%s%%\".format([\"text\"])","value":{"stringValue":"%text%"}},"ast":"\"%%%s%%\"^#*expr.Constant_StringValue#.format(\n [\n \"text\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%%%s%%\"~string.format(\n [\n \"text\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"substitution with one escaped percent sign on the right","expr":"\"%s%%\".format([\"percent on the right\"])","value":{"stringValue":"percent on the right%"}},"ast":"\"%s%%\"^#*expr.Constant_StringValue#.format(\n [\n \"percent on the right\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s%%\"~string.format(\n [\n \"percent on the right\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"substitution with one escaped percent sign on the left","expr":"\"%%%s\".format([\"percent on the left\"])","value":{"stringValue":"%percent on the left"}},"ast":"\"%%%s\"^#*expr.Constant_StringValue#.format(\n [\n \"percent on the left\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%%%s\"~string.format(\n [\n \"percent on the left\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"multiple substitutions","expr":"\"%d %d %d, %s %s %s, %d %d %d, %s %s %s\".format([1, 2, 3, \"A\", \"B\", \"C\", 4, 5, 6, \"D\", \"E\", \"F\"])","value":{"stringValue":"1 2 3, A B C, 4 5 6, D E F"}},"ast":"\"%d %d %d, %s %s %s, %d %d %d, %s %s %s\"^#*expr.Constant_StringValue#.format(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n \"A\"^#*expr.Constant_StringValue#,\n \"B\"^#*expr.Constant_StringValue#,\n \"C\"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n \"D\"^#*expr.Constant_StringValue#,\n \"E\"^#*expr.Constant_StringValue#,\n \"F\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d %d %d, %s %s %s, %d %d %d, %s %s %s\"~string.format(\n [\n 1~int,\n 2~int,\n 3~int,\n \"A\"~string,\n \"B\"~string,\n \"C\"~string,\n 4~int,\n 5~int,\n 6~int,\n \"D\"~string,\n \"E\"~string,\n \"F\"~string\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"percent sign escape sequence support","expr":"\"%%escaped %s%%\".format([\"percent\"])","value":{"stringValue":"%escaped percent%"}},"ast":"\"%%escaped %s%%\"^#*expr.Constant_StringValue#.format(\n [\n \"percent\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%%escaped %s%%\"~string.format(\n [\n \"percent\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"fixed point formatting clause","expr":"\"%.3f\".format([1.2345])","value":{"stringValue":"1.234"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n 1.2345^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n 1.2345~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"binary formatting clause","expr":"\"this is 5 in binary: %b\".format([5])","value":{"stringValue":"this is 5 in binary: 101"}},"ast":"\"this is 5 in binary: %b\"^#*expr.Constant_StringValue#.format(\n [\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"this is 5 in binary: %b\"~string.format(\n [\n 5~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"uint support for binary formatting","expr":"\"unsigned 64 in binary: %b\".format([uint(64)])","value":{"stringValue":"unsigned 64 in binary: 1000000"}},"ast":"\"unsigned 64 in binary: %b\"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 64^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"unsigned 64 in binary: %b\"~string.format(\n [\n uint(\n 64~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format","type":"string"},{"original":{"name":"bool support for binary formatting","expr":"\"bit set from bool: %b\".format([true])","value":{"stringValue":"bit set from bool: 1"}},"ast":"\"bit set from bool: %b\"^#*expr.Constant_StringValue#.format(\n [\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"bit set from bool: %b\"~string.format(\n [\n true~bool\n ]~list(bool)\n)~string^string_format","type":"string"},{"original":{"name":"octal formatting clause","expr":"\"%o\".format([11])","value":{"stringValue":"13"}},"ast":"\"%o\"^#*expr.Constant_StringValue#.format(\n [\n 11^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%o\"~string.format(\n [\n 11~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"uint support for octal formatting clause","expr":"\"this is an unsigned octal: %o\".format([uint(65535)])","value":{"stringValue":"this is an unsigned octal: 177777"}},"ast":"\"this is an unsigned octal: %o\"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 65535^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"this is an unsigned octal: %o\"~string.format(\n [\n uint(\n 65535~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format","type":"string"},{"original":{"name":"lowercase hexadecimal formatting clause","expr":"\"%x is 20 in hexadecimal\".format([30])","value":{"stringValue":"1e is 20 in hexadecimal"}},"ast":"\"%x is 20 in hexadecimal\"^#*expr.Constant_StringValue#.format(\n [\n 30^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x is 20 in hexadecimal\"~string.format(\n [\n 30~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"uppercase hexadecimal formatting clause","expr":"\"%X is 20 in hexadecimal\".format([30])","value":{"stringValue":"1E is 20 in hexadecimal"}},"ast":"\"%X is 20 in hexadecimal\"^#*expr.Constant_StringValue#.format(\n [\n 30^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X is 20 in hexadecimal\"~string.format(\n [\n 30~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"unsigned support for hexadecimal formatting clause","expr":"\"%X is 6000 in hexadecimal\".format([uint(6000)])","value":{"stringValue":"1770 is 6000 in hexadecimal"}},"ast":"\"%X is 6000 in hexadecimal\"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 6000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X is 6000 in hexadecimal\"~string.format(\n [\n uint(\n 6000~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format","type":"string"},{"original":{"name":"string support with hexadecimal formatting clause","expr":"\"%x\".format([\"Hello world!\"])","value":{"stringValue":"48656c6c6f20776f726c6421"}},"ast":"\"%x\"^#*expr.Constant_StringValue#.format(\n [\n \"Hello world!\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x\"~string.format(\n [\n \"Hello world!\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"string support with uppercase hexadecimal formatting clause","expr":"\"%X\".format([\"Hello world!\"])","value":{"stringValue":"48656C6C6F20776F726C6421"}},"ast":"\"%X\"^#*expr.Constant_StringValue#.format(\n [\n \"Hello world!\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X\"~string.format(\n [\n \"Hello world!\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"byte support with hexadecimal formatting clause","expr":"\"%x\".format([b\"byte string\"])","value":{"stringValue":"6279746520737472696e67"}},"ast":"\"%x\"^#*expr.Constant_StringValue#.format(\n [\n b\"byte string\"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x\"~string.format(\n [\n b\"byte string\"~bytes\n ]~list(bytes)\n)~string^string_format","type":"string"},{"original":{"name":"byte support with uppercase hexadecimal formatting clause","expr":"\"%X\".format([b\"byte string\"])","value":{"stringValue":"6279746520737472696E67"}},"ast":"\"%X\"^#*expr.Constant_StringValue#.format(\n [\n b\"byte string\"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X\"~string.format(\n [\n b\"byte string\"~bytes\n ]~list(bytes)\n)~string^string_format","type":"string"},{"original":{"name":"scientific notation formatting clause","expr":"\"%.6e\".format([1052.032911275])","value":{"stringValue":"1.052033e+03"}},"ast":"\"%.6e\"^#*expr.Constant_StringValue#.format(\n [\n 1052.032911275^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.6e\"~string.format(\n [\n 1052.032911275~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"default precision for fixed-point clause","expr":"\"%f\".format([2.71828])","value":{"stringValue":"2.718280"}},"ast":"\"%f\"^#*expr.Constant_StringValue#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%f\"~string.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"default precision for scientific notation","expr":"\"%e\".format([2.71828])","value":{"stringValue":"2.718280e+00"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"NaN support for scientific notation","expr":"\"%e\".format([double(\"NaN\")])","value":{"stringValue":"NaN"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n double(\n \"NaN\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"positive infinity support for scientific notation","expr":"\"%e\".format([double(\"Infinity\")])","value":{"stringValue":"Infinity"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n double(\n \"Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"negative infinity support for scientific notation","expr":"\"%e\".format([double(\"-Infinity\")])","value":{"stringValue":"-Infinity"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"-Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n double(\n \"-Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"NaN support for decimal","expr":"\"%d\".format([double(\"NaN\")])","value":{"stringValue":"NaN"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n double(\n \"NaN\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"positive infinity support for decimal","expr":"\"%d\".format([double(\"Infinity\")])","value":{"stringValue":"Infinity"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n double(\n \"Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"negative infinity support for decimal","expr":"\"%d\".format([double(\"-Infinity\")])","value":{"stringValue":"-Infinity"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"-Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n double(\n \"-Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"NaN support for fixed-point","expr":"\"%f\".format([double(\"NaN\")])","value":{"stringValue":"NaN"}},"ast":"\"%f\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%f\"~string.format(\n [\n double(\n \"NaN\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"positive infinity support for fixed-point","expr":"\"%f\".format([double(\"Infinity\")])","value":{"stringValue":"Infinity"}},"ast":"\"%f\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%f\"~string.format(\n [\n double(\n \"Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"negative infinity support for fixed-point","expr":"\"%f\".format([double(\"-Infinity\")])","value":{"stringValue":"-Infinity"}},"ast":"\"%f\"^#*expr.Constant_StringValue#.format(\n [\n double(\n \"-Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%f\"~string.format(\n [\n double(\n \"-Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"uint support for decimal clause","expr":"\"%d\".format([uint(64)])","value":{"stringValue":"64"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 64^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n uint(\n 64~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format","type":"string"},{"original":{"name":"null support for string","expr":"\"%s\".format([null])","value":{"stringValue":"null"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n null~null\n ]~list(null)\n)~string^string_format","type":"string"},{"original":{"name":"int support for string","expr":"\"%s\".format([999999999999])","value":{"stringValue":"999999999999"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n 999999999999^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n 999999999999~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"bytes support for string","expr":"\"%s\".format([b\"xyz\"])","value":{"stringValue":"xyz"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n b\"xyz\"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n b\"xyz\"~bytes\n ]~list(bytes)\n)~string^string_format","type":"string"},{"original":{"name":"type() support for string","expr":"\"%s\".format([type(\"test string\")])","value":{"stringValue":"string"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n type(\n \"test string\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n type(\n \"test string\"~string\n )~type(string)^type\n ]~list(type(string))\n)~string^string_format","type":"string"},{"original":{"name":"timestamp support for string","expr":"\"%s\".format([timestamp(\"2023-02-03T23:31:20+00:00\")])","value":{"stringValue":"2023-02-03T23:31:20Z"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n timestamp(\n \"2023-02-03T23:31:20+00:00\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n timestamp(\n \"2023-02-03T23:31:20+00:00\"~string\n )~timestamp^string_to_timestamp\n ]~list(timestamp)\n)~string^string_format","type":"string"},{"original":{"name":"duration support for string","expr":"\"%s\".format([duration(\"1h45m47s\")])","value":{"stringValue":"6347s"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n duration(\n \"1h45m47s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n duration(\n \"1h45m47s\"~string\n )~duration^string_to_duration\n ]~list(duration)\n)~string^string_format","type":"string"},{"original":{"name":"list support for string","expr":"\"%s\".format([[\"abc\", 3.14, null, [9, 8, 7, 6], timestamp(\"2023-02-03T23:31:20Z\")]])","value":{"stringValue":"[abc, 3.14, null, [9, 8, 7, 6], 2023-02-03T23:31:20Z]"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n [\n \"abc\"^#*expr.Constant_StringValue#,\n 3.14^#*expr.Constant_DoubleValue#,\n null^#*expr.Constant_NullValue#,\n [\n 9^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n timestamp(\n \"2023-02-03T23:31:20Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n [\n \"abc\"~string,\n 3.14~double,\n null~null,\n [\n 9~int,\n 8~int,\n 7~int,\n 6~int\n ]~list(int),\n timestamp(\n \"2023-02-03T23:31:20Z\"~string\n )~timestamp^string_to_timestamp\n ]~list(dyn)\n ]~list(list(dyn))\n)~string^string_format","type":"string"},{"original":{"name":"map support for string","expr":"\"%s\".format([{\"key1\": b\"xyz\", \"key5\": null, \"key2\": duration(\"2h\"), \"key4\": true, \"key3\": 2.71828}])","value":{"stringValue":"{key1: xyz, key2: 7200s, key3: 2.71828, key4: true, key5: null}"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n {\n \"key1\"^#*expr.Constant_StringValue#:b\"xyz\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#,\n \"key5\"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#,\n \"key2\"^#*expr.Constant_StringValue#:duration(\n \"2h\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n \"key4\"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n \"key3\"^#*expr.Constant_StringValue#:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n {\n \"key1\"~string:b\"xyz\"~bytes,\n \"key5\"~string:null~null,\n \"key2\"~string:duration(\n \"2h\"~string\n )~duration^string_to_duration,\n \"key4\"~string:true~bool,\n \"key3\"~string:2.71828~double\n }~map(string, dyn)\n ]~list(map(string, dyn))\n)~string^string_format","type":"string"},{"original":{"name":"map support (all key types)","expr":"\"%s\".format([{1: \"value1\", uint(2): \"value2\", true: double(\"NaN\")}])","value":{"stringValue":"{1: value1, 2: value2, true: NaN}"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n {\n 1^#*expr.Constant_Int64Value#:\"value1\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n uint(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#:\"value2\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n {\n 1~int:\"value1\"~string,\n uint(\n 2~int\n )~uint^int64_to_uint64:\"value2\"~string,\n true~bool:double(\n \"NaN\"~string\n )~double^string_to_double\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn))\n)~string^string_format","type":"string"},{"original":{"name":"boolean support for %s","expr":"\"%s, %s\".format([true, false])","value":{"stringValue":"true, false"}},"ast":"\"%s, %s\"^#*expr.Constant_StringValue#.format(\n [\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s, %s\"~string.format(\n [\n true~bool,\n false~bool\n ]~list(bool)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for string formatting clause","expr":"\"%s\".format([dyn(\"a string\")])","value":{"stringValue":"a string"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n \"a string\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n dyn(\n \"a string\"~string\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for numbers with string formatting clause","expr":"\"%s, %s\".format([dyn(32), dyn(56.8)])","value":{"stringValue":"32, 56.8"}},"ast":"\"%s, %s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 32^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 56.8^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s, %s\"~string.format(\n [\n dyn(\n 32~int\n )~dyn^to_dyn,\n dyn(\n 56.8~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for integer formatting clause","expr":"\"%d\".format([dyn(128)])","value":{"stringValue":"128"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 128^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n dyn(\n 128~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for integer formatting clause (unsigned)","expr":"\"%d\".format([dyn(256u)])","value":{"stringValue":"256"}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 256u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%d\"~string.format(\n [\n dyn(\n 256u~uint\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for hex formatting clause","expr":"\"%x\".format([dyn(22)])","value":{"stringValue":"16"}},"ast":"\"%x\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x\"~string.format(\n [\n dyn(\n 22~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for hex formatting clause (uppercase)","expr":"\"%X\".format([dyn(26)])","value":{"stringValue":"1A"}},"ast":"\"%X\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 26^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%X\"~string.format(\n [\n dyn(\n 26~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for unsigned hex formatting clause","expr":"\"%x\".format([dyn(500u)])","value":{"stringValue":"1f4"}},"ast":"\"%x\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 500u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%x\"~string.format(\n [\n dyn(\n 500u~uint\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for fixed-point formatting clause","expr":"\"%.3f\".format([dyn(4.5)])","value":{"stringValue":"4.500"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 4.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n dyn(\n 4.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for scientific notation","expr":"\"%e\".format([dyn(2.71828)])","value":{"stringValue":"2.718280e+00"}},"ast":"\"%e\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 2.71828^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%e\"~string.format(\n [\n dyn(\n 2.71828~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype NaN/infinity support","expr":"\"%s\".format([[double(\"NaN\"), double(\"Infinity\"), double(\"-Infinity\")]])","value":{"stringValue":"[NaN, Infinity, -Infinity]"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n [\n double(\n \"NaN\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n double(\n \"Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n double(\n \"-Infinity\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n [\n double(\n \"NaN\"~string\n )~double^string_to_double,\n double(\n \"Infinity\"~string\n )~double^string_to_double,\n double(\n \"-Infinity\"~string\n )~double^string_to_double\n ]~list(double)\n ]~list(list(double))\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for timestamp","expr":"\"%s\".format([dyn(timestamp(\"2009-11-10T23:00:00Z\"))])","value":{"stringValue":"2009-11-10T23:00:00Z"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n timestamp(\n \"2009-11-10T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n dyn(\n timestamp(\n \"2009-11-10T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for duration","expr":"\"%s\".format([dyn(duration(\"8747s\"))])","value":{"stringValue":"8747s"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n duration(\n \"8747s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n dyn(\n duration(\n \"8747s\"~string\n )~duration^string_to_duration\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for lists","expr":"\"%s\".format([dyn([6, 4.2, \"a string\"])])","value":{"stringValue":"[6, 4.2, a string]"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n [\n 6^#*expr.Constant_Int64Value#,\n 4.2^#*expr.Constant_DoubleValue#,\n \"a string\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n dyn(\n [\n 6~int,\n 4.2~double,\n \"a string\"~string\n ]~list(dyn)\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"dyntype support for maps","expr":"\"%s\".format([{\"strKey\":\"x\", 6:duration(\"422s\"), true:42}])","value":{"stringValue":"{6: 422s, strKey: x, true: 42}"}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n {\n \"strKey\"^#*expr.Constant_StringValue#:\"x\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 6^#*expr.Constant_Int64Value#:duration(\n \"422s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%s\"~string.format(\n [\n {\n \"strKey\"~string:\"x\"~string,\n 6~int:duration(\n \"422s\"~string\n )~duration^string_to_duration,\n true~bool:42~int\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn))\n)~string^string_format","type":"string"},{"original":{"name":"string substitution in a string variable","expr":"str_var.format([\"filler\"])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%s"}}},"value":{"stringValue":"filler"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n \"filler\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n \"filler\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"multiple substitutions in a string variable","expr":"str_var.format([1, 2, 3, \"A\", \"B\", \"C\", 4, 5, 6, \"D\", \"E\", \"F\"])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%d %d %d, %s %s %s, %d %d %d, %s %s %s"}}},"value":{"stringValue":"1 2 3, A B C, 4 5 6, D E F"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n \"A\"^#*expr.Constant_StringValue#,\n \"B\"^#*expr.Constant_StringValue#,\n \"C\"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n \"D\"^#*expr.Constant_StringValue#,\n \"E\"^#*expr.Constant_StringValue#,\n \"F\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 1~int,\n 2~int,\n 3~int,\n \"A\"~string,\n \"B\"~string,\n \"C\"~string,\n 4~int,\n 5~int,\n 6~int,\n \"D\"~string,\n \"E\"~string,\n \"F\"~string\n ]~list(dyn)\n)~string^string_format","type":"string"},{"original":{"name":"substitution inside escaped percent signs in a string variable","expr":"str_var.format([\"text\"])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%%%s%%"}}},"value":{"stringValue":"%text%"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n \"text\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n \"text\"~string\n ]~list(string)\n)~string^string_format","type":"string"},{"original":{"name":"fixed point formatting clause in a string variable","expr":"str_var.format([1.2345])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%.3f"}}},"value":{"stringValue":"1.234"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1.2345^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 1.2345~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"binary formatting clause in a string variable","expr":"str_var.format([5])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%b"}}},"value":{"stringValue":"101"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 5~int\n ]~list(int)\n)~string^string_format","type":"string"},{"original":{"name":"scientific notation formatting clause in a string variable","expr":"str_var.format([1052.032911275])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%.6e"}}},"value":{"stringValue":"1.052033e+03"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1052.032911275^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 1052.032911275~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"default precision for fixed-point clause in a string variable","expr":"str_var.format([2.71828])","typeEnv":[{"name":"str_var","ident":{"type":{"primitive":"STRING"}}}],"bindings":{"str_var":{"value":{"stringValue":"%f"}}},"value":{"stringValue":"2.718280"}},"ast":"str_var^#*expr.Expr_IdentExpr#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"str_var~string^str_var.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_insignificant_zeroes_removed","expr":"\"%.0f\".format([123.000000])","value":{"stringValue":"123"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 123^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 123~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_positive_round_to_whole_number","expr":"\"%.0f\".format([3.5001])","value":{"stringValue":"4"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 3.5001^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 3.5001~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_negative_truncate_to_whole_number","expr":"\"%.0f\".format([3.4999])","value":{"stringValue":"3"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 3.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 3.4999~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_halfway_round_up_to_nearest_even","expr":"\"%.0f\".format([1.5])","value":{"stringValue":"2"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 1.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 1.5~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_halfway_truncate_to_nearest_even","expr":"\"%.0f\".format([2.5])","value":{"stringValue":"2"}},"ast":"\"%.0f\"^#*expr.Constant_StringValue#.format(\n [\n 2.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.0f\"~string.format(\n [\n 2.5~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_positive_round_up","expr":"\"%.3f\".format([123.4999])","value":{"stringValue":"123.500"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n 123.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n 123.4999~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_positive_round_down","expr":"\"%.3f\".format([123.4994])","value":{"stringValue":"123.499"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n 123.4994^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n 123.4994~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_negative_round_up","expr":"\"%.3f\".format([-123.4999])","value":{"stringValue":"-123.500"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n -123.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n -123.4999~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_negative_round_down","expr":"\"%.3f\".format([-123.4994])","value":{"stringValue":"-123.499"}},"ast":"\"%.3f\"^#*expr.Constant_StringValue#.format(\n [\n -123.4994^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.3f\"~string.format(\n [\n -123.4994~double\n ]~list(double)\n)~string^string_format","type":"string"},{"original":{"name":"format_%f_zero_padding","expr":"\"%.5f\".format([-1.2])","value":{"stringValue":"-1.20000"}},"ast":"\"%.5f\"^#*expr.Constant_StringValue#.format(\n [\n -1.2^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"\"%.5f\"~string.format(\n [\n -1.2~double\n ]~list(double)\n)~string^string_format","type":"string"}]},{"name":"format_errors","tests":[{"original":{"name":"unrecognized formatting clause","expr":"\"%a\".format([1])","disableCheck":true,"evalError":{"errors":[{"message":"could not parse formatting clause: unrecognized formatting clause \"a\""}]}},"ast":"\"%a\"^#*expr.Constant_StringValue#.format(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:12: could not parse formatting clause: unrecognized formatting clause \"a\"\n | \"%a\".format([1])\n | ...........^"},{"original":{"name":"out of bounds arg index","expr":"\"%d %d %d\".format([0, 1])","disableCheck":true,"evalError":{"errors":[{"message":"index 2 out of range"}]}},"ast":"\"%d %d %d\"^#*expr.Constant_StringValue#.format(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: index 2 out of range\n | \"%d %d %d\".format([0, 1])\n | .................^"},{"original":{"name":"string substitution is not allowed with binary clause","expr":"\"string is %b\".format([\"abc\"])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers and bools can be formatted as binary, was given string"}]}},"ast":"\"string is %b\"^#*expr.Constant_StringValue#.format(\n [\n \"abc\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: error during formatting: only ints, uints, and bools can be formatted as binary, was given string\n | \"string is %b\".format([\"abc\"])\n | .......................^"},{"original":{"name":"duration substitution not allowed with decimal clause","expr":"\"%d\".format([duration(\"30m2s\")])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: decimal clause can only be used on integers, was given google.protobuf.Duration"}]}},"ast":"\"%d\"^#*expr.Constant_StringValue#.format(\n [\n duration(\n \"30m2s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:22: error during formatting: decimal clause can only be used on ints, uints, and doubles, was given google.protobuf.Duration\n | \"%d\".format([duration(\"30m2s\")])\n | .....................^"},{"original":{"name":"string substitution not allowed with octal clause","expr":"\"octal: %o\".format([\"a string\"])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: octal clause can only be used on integers, was given string"}]}},"ast":"\"octal: %o\"^#*expr.Constant_StringValue#.format(\n [\n \"a string\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:21: error during formatting: octal clause can only be used on ints and uints, was given string\n | \"octal: %o\".format([\"a string\"])\n | ....................^"},{"original":{"name":"double substitution not allowed with hex clause","expr":"\"double is %x\".format([0.5])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given double"}]}},"ast":"\"double is %x\"^#*expr.Constant_StringValue#.format(\n [\n 0.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:24: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given double\n | \"double is %x\".format([0.5])\n | .......................^"},{"original":{"name":"uppercase not allowed for scientific clause","expr":"\"double is %E\".format([0.5])","disableCheck":true,"evalError":{"errors":[{"message":"could not parse formatting clause: unrecognized formatting clause \"E\""}]}},"ast":"\"double is %E\"^#*expr.Constant_StringValue#.format(\n [\n 0.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:22: could not parse formatting clause: unrecognized formatting clause \"E\"\n | \"double is %E\".format([0.5])\n | .....................^"},{"original":{"name":"object not allowed","expr":"\"object is %s\".format([cel.expr.conformance.proto3.TestAllTypes{}])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes"}]}},"ast":"\"object is %s\"^#*expr.Constant_StringValue#.format(\n [\n cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:64: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | \"object is %s\".format([cel.expr.conformance.proto3.TestAllTypes{}])\n | ...............................................................^"},{"original":{"name":"object inside list","expr":"\"%s\".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes"}]}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:61: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | \"%s\".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])\n | ............................................................^"},{"original":{"name":"object inside map","expr":"\"%s\".format([{1: \"a\", 2: cel.expr.conformance.proto3.TestAllTypes{}}])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes"}]}},"ast":"\"%s\"^#*expr.Constant_StringValue#.format(\n [\n {\n 1^#*expr.Constant_Int64Value#:\"a\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:66: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | \"%s\".format([{1: \"a\", 2: cel.expr.conformance.proto3.TestAllTypes{}}])\n | .................................................................^"},{"original":{"name":"null not allowed for %d","expr":"\"null: %d\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: decimal clause can only be used on integers, was given null_type"}]}},"ast":"\"null: %d\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: decimal clause can only be used on ints, uints, and doubles, was given null_type\n | \"null: %d\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %e","expr":"\"null: %e\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: scientific clause can only be used on doubles, was given null_type"}]}},"ast":"\"null: %e\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: scientific clause can only be used on ints, uints, and doubles, was given null_type\n | \"null: %e\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %f","expr":"\"null: %f\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: fixed-point clause can only be used on doubles, was given null_type"}]}},"ast":"\"null: %f\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: fixed-point clause can only be used on ints, uints, and doubles, was given null_type\n | \"null: %f\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %x","expr":"\"null: %x\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type"}]}},"ast":"\"null: %x\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given null_type\n | \"null: %x\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %X","expr":"\"null: %X\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type"}]}},"ast":"\"null: %X\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given null_type\n | \"null: %X\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %b","expr":"\"null: %b\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: only integers and bools can be formatted as binary, was given null_type"}]}},"ast":"\"null: %b\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, and bools can be formatted as binary, was given null_type\n | \"null: %b\".format([null])\n | ...................^"},{"original":{"name":"null not allowed for %o","expr":"\"null: %o\".format([null])","disableCheck":true,"evalError":{"errors":[{"message":"error during formatting: octal clause can only be used on integers, was given null_type"}]}},"ast":"\"null: %o\"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: error during formatting: octal clause can only be used on ints and uints, was given null_type\n | \"null: %o\".format([null])\n | ...................^"}]},{"name":"value_errors","tests":[{"original":{"name":"charat_out_of_range","expr":"'tacocat'.charAt(30) == ''","evalError":{"errors":[{"message":"index out of range: 30"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.charAt(\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.charAt(\n 30~int\n )~string^string_char_at_int,\n \"\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"indexof_out_of_range","expr":"'tacocat'.indexOf('a', 30) == -1","evalError":{"errors":[{"message":"index out of range: 30"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.indexOf(\n \"a\"^#*expr.Constant_StringValue#,\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.indexOf(\n \"a\"~string,\n 30~int\n )~int^string_index_of_string_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"lastindexof_negative_index","expr":"'tacocat'.lastIndexOf('a', -1) == -1","evalError":{"errors":[{"message":"index out of range: -1"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"a\"^#*expr.Constant_StringValue#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"a\"~string,\n -1~int\n )~int^string_last_index_of_string_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"lastindexof_out_of_range","expr":"'tacocat'.lastIndexOf('a', 30) == -1","evalError":{"errors":[{"message":"index out of range: 30"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.lastIndexOf(\n \"a\"^#*expr.Constant_StringValue#,\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.lastIndexOf(\n \"a\"~string,\n 30~int\n )~int^string_last_index_of_string_int,\n -1~int\n)~bool^equals","type":"bool"},{"original":{"name":"substring_out_of_range","expr":"'tacocat'.substring(40) == 'cat'","evalError":{"errors":[{"message":"index out of range: 40"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 40^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 40~int\n )~string^string_substring_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"substring_negative_index","expr":"'tacocat'.substring(-1) == 'cat'","evalError":{"errors":[{"message":"index out of range: -1"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n -1~int\n )~string^string_substring_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"substring_end_index_out_of_range","expr":"'tacocat'.substring(1, 50) == 'cat'","evalError":{"errors":[{"message":"index out of range: 50"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 1^#*expr.Constant_Int64Value#,\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 1~int,\n 50~int\n )~string^string_substring_int_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"substring_begin_index_out_of_range","expr":"'tacocat'.substring(49, 50) == 'cat'","evalError":{"errors":[{"message":"index out of range: 49"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 49^#*expr.Constant_Int64Value#,\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"cat\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 49~int,\n 50~int\n )~string^string_substring_int_int,\n \"cat\"~string\n)~bool^equals","type":"bool"},{"original":{"name":"substring_end_index_greater_than_begin_index","expr":"'tacocat'.substring(4, 3) == ''","evalError":{"errors":[{"message":"invalid substring range. start: 4, end: 3"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n \"tacocat\"~string.substring(\n 4~int,\n 3~int\n )~string^string_substring_int_int,\n \"\"~string\n)~bool^equals","type":"bool"}]},{"name":"type_errors","tests":[{"original":{"name":"charat_invalid_type","expr":"42.charAt(2) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.charAt(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:10: found no matching overload for 'charAt' applied to 'int.(int)'\n | 42.charAt(2) == ''\n | .........^"},{"original":{"name":"charat_invalid_argument","expr":"'hello'.charAt(true) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"hello\"^#*expr.Constant_StringValue#.charAt(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:15: found no matching overload for 'charAt' applied to 'string.(bool)'\n | 'hello'.charAt(true) == ''\n | ..............^"},{"original":{"name":"indexof_unary_invalid_type","expr":"24.indexOf('2') == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 24^#*expr.Constant_Int64Value#.indexOf(\n \"2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'indexOf' applied to 'int.(string)'\n | 24.indexOf('2') == 0\n | ..........^"},{"original":{"name":"indexof_unary_invalid_argument","expr":"'hello'.indexOf(true) == 1","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"hello\"^#*expr.Constant_StringValue#.indexOf(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:16: found no matching overload for 'indexOf' applied to 'string.(bool)'\n | 'hello'.indexOf(true) == 1\n | ...............^"},{"original":{"name":"indexof_binary_invalid_argument","expr":"42.indexOf('4', 0) == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.indexOf(\n \"4\"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'indexOf' applied to 'int.(string, int)'\n | 42.indexOf('4', 0) == 0\n | ..........^"},{"original":{"name":"indexof_binary_invalid_argument_2","expr":"'42'.indexOf(4, 0) == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.indexOf(\n 4^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(int, int)'\n | '42'.indexOf(4, 0) == 0\n | ............^"},{"original":{"name":"indexof_binary_both_invalid_arguments","expr":"'42'.indexOf('4', '0') == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.indexOf(\n \"4\"^#*expr.Constant_StringValue#,\n \"0\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(string, string)'\n | '42'.indexOf('4', '0') == 0\n | ............^"},{"original":{"name":"indexof_ternary_invalid_arguments","expr":"'42'.indexOf('4', 0, 1) == 0","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.indexOf(\n \"4\"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(string, int, int)'\n | '42'.indexOf('4', 0, 1) == 0\n | ............^"},{"original":{"name":"split_invalid_type","expr":"42.split('2') == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.split(\n \"2\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string)'\n | 42.split('2') == ['4']\n | ........^"},{"original":{"name":"replace_invalid_type","expr":"42.replace(2, 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.replace(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'replace' applied to 'int.(int, int)'\n | 42.replace(2, 1) == '41'\n | ..........^"},{"original":{"name":"replace_binary_invalid_argument","expr":"'42'.replace(2, 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(int, int)'\n | '42'.replace(2, 1) == '41'\n | ............^"},{"original":{"name":"replace_binary_invalid_argument_2","expr":"'42'.replace('2', 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, int)'\n | '42'.replace('2', 1) == '41'\n | ............^"},{"original":{"name":"replace_ternary_invalid_argument","expr":"42.replace('2', '1', 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'replace' applied to 'int.(string, string, int)'\n | 42.replace('2', '1', 1) == '41'\n | ..........^"},{"original":{"name":"replace_ternary_invalid_argument_2","expr":"'42'.replace(2, '1', 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n 2^#*expr.Constant_Int64Value#,\n \"1\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(int, string, int)'\n | '42'.replace(2, '1', 1) == '41'\n | ............^"},{"original":{"name":"replace_ternary_invalid_argument_3","expr":"'42'.replace('2', 1, 1) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, int, int)'\n | '42'.replace('2', 1, 1) == '41'\n | ............^"},{"original":{"name":"replace_ternary_invalid_argument_4","expr":"'42'.replace('2', '1', '1') == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, string, string)'\n | '42'.replace('2', '1', '1') == '41'\n | ............^"},{"original":{"name":"replace_quaternary_invalid_argument","expr":"'42'.replace('2', '1', 1, false) == '41'","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.replace(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n \"41\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, string, int, bool)'\n | '42'.replace('2', '1', 1, false) == '41'\n | ............^"},{"original":{"name":"split_invalid_type_empty_arg","expr":"42.split('') == ['4', '2']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.split(\n \"\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#,\n \"2\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string)'\n | 42.split('') == ['4', '2']\n | ........^"},{"original":{"name":"split_invalid_argument","expr":"'42'.split(2) == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.split(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(int)'\n | '42'.split(2) == ['4']\n | ..........^"},{"original":{"name":"split_binary_invalid_type","expr":"42.split('2', '1') == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 42^#*expr.Constant_Int64Value#.split(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string, string)'\n | 42.split('2', '1') == ['4']\n | ........^"},{"original":{"name":"split_binary_invalid_argument","expr":"'42'.split(2, 1) == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.split(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(int, int)'\n | '42'.split(2, 1) == ['4']\n | ..........^"},{"original":{"name":"split_binary_invalid_argument_2","expr":"'42'.split('2', '1') == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.split(\n \"2\"^#*expr.Constant_StringValue#,\n \"1\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(string, string)'\n | '42'.split('2', '1') == ['4']\n | ..........^"},{"original":{"name":"split_ternary_invalid_argument","expr":"'42'.split('2', 1, 1) == ['4']","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"42\"^#*expr.Constant_StringValue#.split(\n \"2\"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n \"4\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(string, int, int)'\n | '42'.split('2', 1, 1) == ['4']\n | ..........^"},{"original":{"name":"substring_ternary_invalid_argument","expr":"'hello'.substring(1, 2, 3) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"hello\"^#*expr.Constant_StringValue#.substring(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:18: found no matching overload for 'substring' applied to 'string.(int, int, int)'\n | 'hello'.substring(1, 2, 3) == ''\n | .................^"},{"original":{"name":"substring_binary_invalid_type","expr":"30.substring(true, 3) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n 30^#*expr.Constant_Int64Value#.substring(\n true^#*expr.Constant_BoolValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:13: found no matching overload for 'substring' applied to 'int.(bool, int)'\n | 30.substring(true, 3) == ''\n | ............^"},{"original":{"name":"substring_binary_invalid_argument","expr":"'tacocat'.substring(true, 3) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n true^#*expr.Constant_BoolValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: found no matching overload for 'substring' applied to 'string.(bool, int)'\n | 'tacocat'.substring(true, 3) == ''\n | ...................^"},{"original":{"name":"substring_binary_invalid_argument_2","expr":"'tacocat'.substring(0, false) == ''","disableCheck":true,"evalError":{"errors":[{"message":"no such overload"}]}},"ast":"_==_(\n \"tacocat\"^#*expr.Constant_StringValue#.substring(\n 0^#*expr.Constant_Int64Value#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n \"\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","error":"ERROR: \u003cinput\u003e:1:20: found no matching overload for 'substring' applied to 'string.(int, bool)'\n | 'tacocat'.substring(0, false) == ''\n | ...................^"}]}]},{"name":"timestamps","suites":[{"name":"timestamp_conversions","tests":[{"original":{"name":"toInt_timestamp","expr":"int(timestamp('2009-02-13T23:31:30Z'))","value":{"int64Value":"1234567890"}},"ast":"int(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"int(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~int^timestamp_to_int64","type":"int"},{"original":{"name":"toString_timestamp","expr":"string(timestamp('2009-02-13T23:31:30Z'))","value":{"stringValue":"2009-02-13T23:31:30Z"}},"ast":"string(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~string^timestamp_to_string","type":"string"},{"original":{"name":"toString_timestamp_nanos","expr":"string(timestamp('9999-12-31T23:59:59.999999999Z'))","value":{"stringValue":"9999-12-31T23:59:59.999999999Z"}},"ast":"string(\n timestamp(\n \"9999-12-31T23:59:59.999999999Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n timestamp(\n \"9999-12-31T23:59:59.999999999Z\"~string\n )~timestamp^string_to_timestamp\n)~string^timestamp_to_string","type":"string"},{"original":{"name":"toType_timestamp","expr":"type(timestamp('2009-02-13T23:31:30Z'))","value":{"typeValue":"google.protobuf.Timestamp"}},"ast":"type(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~type(timestamp)^type","type":"type(timestamp)"},{"original":{"name":"type_comparison","expr":"google.protobuf.Timestamp == type(timestamp('2009-02-13T23:31:30Z'))","value":{"boolValue":true}},"ast":"_==_(\n google^#*expr.Expr_IdentExpr#.protobuf^#*expr.Expr_SelectExpr#.Timestamp^#*expr.Expr_SelectExpr#,\n type(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Timestamp~type(timestamp)^google.protobuf.Timestamp,\n type(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n )~type(timestamp)^type\n)~bool^equals","type":"bool"}]},{"name":"duration_conversions","tests":[{"original":{"name":"toString_duration","expr":"string(duration('1000000s'))","value":{"stringValue":"1000000s"}},"ast":"string(\n duration(\n \"1000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"string(\n duration(\n \"1000000s\"~string\n )~duration^string_to_duration\n)~string^duration_to_string","type":"string"},{"original":{"name":"toType_duration","expr":"type(duration('1000000s'))","value":{"typeValue":"google.protobuf.Duration"}},"ast":"type(\n duration(\n \"1000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"type(\n duration(\n \"1000000s\"~string\n )~duration^string_to_duration\n)~type(duration)^type","type":"type(duration)"},{"original":{"name":"type_comparison","expr":"google.protobuf.Duration == type(duration('1000000s'))","value":{"boolValue":true}},"ast":"_==_(\n google^#*expr.Expr_IdentExpr#.protobuf^#*expr.Expr_SelectExpr#.Duration^#*expr.Expr_SelectExpr#,\n type(\n duration(\n \"1000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n google.protobuf.Duration~type(duration)^google.protobuf.Duration,\n type(\n duration(\n \"1000000s\"~string\n )~duration^string_to_duration\n )~type(duration)^type\n)~bool^equals","type":"bool"}]},{"name":"timestamp_selectors","tests":[{"original":{"name":"getDate","expr":"timestamp('2009-02-13T23:31:30Z').getDate()","value":{"int64Value":"13"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDate()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDate()~int^timestamp_to_day_of_month_1_based","type":"int"},{"original":{"name":"getDayOfMonth","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfMonth()","value":{"int64Value":"12"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth()~int^timestamp_to_day_of_month","type":"int"},{"original":{"name":"getDayOfWeek","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfWeek()","value":{"int64Value":"5"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfWeek()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfWeek()~int^timestamp_to_day_of_week","type":"int"},{"original":{"name":"getDayOfYear","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfYear()","value":{"int64Value":"43"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfYear()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfYear()~int^timestamp_to_day_of_year","type":"int"},{"original":{"name":"getFullYear","expr":"timestamp('2009-02-13T23:31:30Z').getFullYear()","value":{"int64Value":"2009"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getFullYear()~int^timestamp_to_year","type":"int"},{"original":{"name":"getHours","expr":"timestamp('2009-02-13T23:31:30Z').getHours()","value":{"int64Value":"23"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getHours()~int^timestamp_to_hours","type":"int"},{"original":{"name":"getMilliseconds","expr":"timestamp('2009-02-13T23:31:20.123456789Z').getMilliseconds()","value":{"int64Value":"123"}},"ast":"timestamp(\n \"2009-02-13T23:31:20.123456789Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMilliseconds()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:20.123456789Z\"~string\n)~timestamp^string_to_timestamp.getMilliseconds()~int^timestamp_to_milliseconds","type":"int"},{"original":{"name":"getMinutes","expr":"timestamp('2009-02-13T23:31:30Z').getMinutes()","value":{"int64Value":"31"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getMinutes()~int^timestamp_to_minutes","type":"int"},{"original":{"name":"getMonth","expr":"timestamp('2009-02-13T23:31:30Z').getMonth()","value":{"int64Value":"1"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMonth()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getMonth()~int^timestamp_to_month","type":"int"},{"original":{"name":"getSeconds","expr":"timestamp('2009-02-13T23:31:30Z').getSeconds()","value":{"int64Value":"30"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getSeconds()~int^timestamp_to_seconds","type":"int"}]},{"name":"timestamp_selectors_tz","tests":[{"original":{"name":"getDate","expr":"timestamp('2009-02-13T23:31:30Z').getDate('Australia/Sydney')","value":{"int64Value":"14"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDate(\n \"Australia/Sydney\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDate(\n \"Australia/Sydney\"~string\n)~int^timestamp_to_day_of_month_1_based_with_tz","type":"int"},{"original":{"name":"getDayOfMonth_name_pos","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfMonth('US/Central')","value":{"int64Value":"12"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n \"US/Central\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n \"US/Central\"~string\n)~int^timestamp_to_day_of_month_with_tz","type":"int"},{"original":{"name":"getDayOfMonth_numerical_pos","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfMonth('+11:00')","value":{"int64Value":"13"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n \"+11:00\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n \"+11:00\"~string\n)~int^timestamp_to_day_of_month_with_tz","type":"int"},{"original":{"name":"getDayOfMonth_numerical_neg","expr":"timestamp('2009-02-13T02:00:00Z').getDayOfMonth('-02:30')","value":{"int64Value":"11"}},"ast":"timestamp(\n \"2009-02-13T02:00:00Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n \"-02:30\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T02:00:00Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n \"-02:30\"~string\n)~int^timestamp_to_day_of_month_with_tz","type":"int"},{"original":{"name":"getDayOfMonth_name_neg","expr":"timestamp('2009-02-13T02:00:00Z').getDayOfMonth('America/St_Johns')","value":{"int64Value":"11"}},"ast":"timestamp(\n \"2009-02-13T02:00:00Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n \"America/St_Johns\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T02:00:00Z\"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n \"America/St_Johns\"~string\n)~int^timestamp_to_day_of_month_with_tz","type":"int"},{"original":{"name":"getDayOfWeek","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfWeek('UTC')","value":{"int64Value":"5"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfWeek(\n \"UTC\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfWeek(\n \"UTC\"~string\n)~int^timestamp_to_day_of_week_with_tz","type":"int"},{"original":{"name":"getDayOfYear","expr":"timestamp('2009-02-13T23:31:30Z').getDayOfYear('US/Central')","value":{"int64Value":"43"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfYear(\n \"US/Central\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getDayOfYear(\n \"US/Central\"~string\n)~int^timestamp_to_day_of_year_with_tz","type":"int"},{"original":{"name":"getFullYear","expr":"timestamp('2009-02-13T23:31:30Z').getFullYear('-09:30')","value":{"int64Value":"2009"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getFullYear(\n \"-09:30\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getFullYear(\n \"-09:30\"~string\n)~int^timestamp_to_year_with_tz","type":"int"},{"original":{"name":"getHours","expr":"timestamp('2009-02-13T23:31:30Z').getHours('02:00')","value":{"int64Value":"1"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours(\n \"02:00\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getHours(\n \"02:00\"~string\n)~int^timestamp_to_hours_with_tz","type":"int"},{"original":{"name":"getMinutes","expr":"timestamp('2009-02-13T23:31:30Z').getMinutes('Asia/Kathmandu')","value":{"int64Value":"16"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes(\n \"Asia/Kathmandu\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getMinutes(\n \"Asia/Kathmandu\"~string\n)~int^timestamp_to_minutes_with_tz","type":"int"},{"original":{"name":"getMonth","expr":"timestamp('2009-02-13T23:31:30Z').getMonth('UTC')","value":{"int64Value":"1"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMonth(\n \"UTC\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getMonth(\n \"UTC\"~string\n)~int^timestamp_to_month_with_tz","type":"int"},{"original":{"name":"getSeconds","expr":"timestamp('2009-02-13T23:31:30Z').getSeconds('-00:00')","value":{"int64Value":"30"}},"ast":"timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds(\n \"-00:00\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"2009-02-13T23:31:30Z\"~string\n)~timestamp^string_to_timestamp.getSeconds(\n \"-00:00\"~string\n)~int^timestamp_to_seconds_tz","type":"int"}]},{"name":"timestamp_equality","tests":[{"original":{"name":"eq_same","expr":"timestamp('2009-02-13T23:31:30Z') == timestamp('2009-02-13T23:31:30Z')","value":{"boolValue":true}},"ast":"_==_(\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"eq_diff","expr":"timestamp('2009-02-13T23:31:29Z') == timestamp('2009-02-13T23:31:30Z')","value":{"boolValue":false}},"ast":"_==_(\n timestamp(\n \"2009-02-13T23:31:29Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:31:30Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n timestamp(\n \"2009-02-13T23:31:29Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:31:30Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"neq_same","expr":"timestamp('1945-05-07T02:41:00Z') != timestamp('1945-05-07T02:41:00Z')","value":{"boolValue":false}},"ast":"_!=_(\n timestamp(\n \"1945-05-07T02:41:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"1945-05-07T02:41:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n timestamp(\n \"1945-05-07T02:41:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"1945-05-07T02:41:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^not_equals","type":"bool"},{"original":{"name":"neq_diff","expr":"timestamp('2000-01-01T00:00:00Z') != timestamp('2001-01-01T00:00:00Z')","value":{"boolValue":true}},"ast":"_!=_(\n timestamp(\n \"2000-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n timestamp(\n \"2000-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^not_equals","type":"bool"}]},{"name":"duration_equality","tests":[{"original":{"name":"eq_same","expr":"duration('123s') == duration('123s')","value":{"boolValue":true}},"ast":"_==_(\n duration(\n \"123s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"123s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n duration(\n \"123s\"~string\n )~duration^string_to_duration,\n duration(\n \"123s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"eq_diff","expr":"duration('60s') == duration('3600s')","value":{"boolValue":false}},"ast":"_==_(\n duration(\n \"60s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"3600s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n duration(\n \"60s\"~string\n )~duration^string_to_duration,\n duration(\n \"3600s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"neq_same","expr":"duration('604800s') != duration('604800s')","value":{"boolValue":false}},"ast":"_!=_(\n duration(\n \"604800s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"604800s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n duration(\n \"604800s\"~string\n )~duration^string_to_duration,\n duration(\n \"604800s\"~string\n )~duration^string_to_duration\n)~bool^not_equals","type":"bool"},{"original":{"name":"neq_diff","expr":"duration('86400s') != duration('86164s')","value":{"boolValue":true}},"ast":"_!=_(\n duration(\n \"86400s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"86164s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_!=_(\n duration(\n \"86400s\"~string\n )~duration^string_to_duration,\n duration(\n \"86164s\"~string\n )~duration^string_to_duration\n)~bool^not_equals","type":"bool"}]},{"name":"timestamp_arithmetic","tests":[{"original":{"name":"add_duration_to_time","expr":"timestamp('2009-02-13T23:00:00Z') + duration('240s') == timestamp('2009-02-13T23:04:00Z')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"240s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:04:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"240s\"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n \"2009-02-13T23:04:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"add_time_to_duration","expr":"duration('120s') + timestamp('2009-02-13T23:01:00Z') == timestamp('2009-02-13T23:03:00Z')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n duration(\n \"120s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:01:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:03:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n duration(\n \"120s\"~string\n )~duration^string_to_duration,\n timestamp(\n \"2009-02-13T23:01:00Z\"~string\n )~timestamp^string_to_timestamp\n )~timestamp^add_duration_timestamp,\n timestamp(\n \"2009-02-13T23:03:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"add_duration_to_duration","expr":"duration('600s') + duration('50s') == duration('650s')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n duration(\n \"600s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"50s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"650s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n duration(\n \"600s\"~string\n )~duration^string_to_duration,\n duration(\n \"50s\"~string\n )~duration^string_to_duration\n )~duration^add_duration_duration,\n duration(\n \"650s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"add_time_to_duration_nanos_negative","expr":"timestamp('0001-01-01T00:00:01.000000001Z') + duration('-999999999ns') == timestamp('0001-01-01T00:00:00.000000002Z')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n timestamp(\n \"0001-01-01T00:00:01.000000001Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-999999999ns\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"0001-01-01T00:00:00.000000002Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n timestamp(\n \"0001-01-01T00:00:01.000000001Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"-999999999ns\"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n \"0001-01-01T00:00:00.000000002Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"add_time_to_duration_nanos_positive","expr":"timestamp('0001-01-01T00:00:01.999999999Z') + duration('999999999ns') == timestamp('0001-01-01T00:00:02.999999998Z')","value":{"boolValue":true}},"ast":"_==_(\n _+_(\n timestamp(\n \"0001-01-01T00:00:01.999999999Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"999999999ns\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"0001-01-01T00:00:02.999999998Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _+_(\n timestamp(\n \"0001-01-01T00:00:01.999999999Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"999999999ns\"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n \"0001-01-01T00:00:02.999999998Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"subtract_duration_from_time","expr":"timestamp('2009-02-13T23:10:00Z') - duration('600s') == timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_==_(\n _-_(\n timestamp(\n \"2009-02-13T23:10:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"600s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _-_(\n timestamp(\n \"2009-02-13T23:10:00Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"600s\"~string\n )~duration^string_to_duration\n )~timestamp^subtract_timestamp_duration,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^equals","type":"bool"},{"original":{"name":"subtract_time_from_time","expr":"timestamp('2009-02-13T23:31:00Z') - timestamp('2009-02-13T23:29:00Z') == duration('120s')","value":{"boolValue":true}},"ast":"_==_(\n _-_(\n timestamp(\n \"2009-02-13T23:31:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:29:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"120s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _-_(\n timestamp(\n \"2009-02-13T23:31:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:29:00Z\"~string\n )~timestamp^string_to_timestamp\n )~duration^subtract_timestamp_timestamp,\n duration(\n \"120s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"},{"original":{"name":"subtract_duration_from_duration","expr":"duration('900s') - duration('42s') == duration('858s')","value":{"boolValue":true}},"ast":"_==_(\n _-_(\n duration(\n \"900s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"42s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"858s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n _-_(\n duration(\n \"900s\"~string\n )~duration^string_to_duration,\n duration(\n \"42s\"~string\n )~duration^string_to_duration\n )~duration^subtract_duration_duration,\n duration(\n \"858s\"~string\n )~duration^string_to_duration\n)~bool^equals","type":"bool"}]},{"name":"comparisons","tests":[{"original":{"name":"leq_timestamp_true","expr":"timestamp('2009-02-13T23:00:00Z') \u003c= timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_\u003c=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^less_equals_timestamp","type":"bool"},{"original":{"name":"leq_timestamp_false","expr":"timestamp('2009-02-13T23:00:00Z') \u003c= timestamp('2009-02-13T22:59:59Z')","value":{"boolValue":false}},"ast":"_\u003c=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T22:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T22:59:59Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^less_equals_timestamp","type":"bool"},{"original":{"name":"leq_duration_true","expr":"duration('200s') \u003c= duration('200s')","value":{"boolValue":true}},"ast":"_\u003c=_(\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n duration(\n \"200s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^less_equals_duration","type":"bool"},{"original":{"name":"leq_duration_false","expr":"duration('300s') \u003c= duration('200s')","value":{"boolValue":false}},"ast":"_\u003c=_(\n duration(\n \"300s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c=_(\n duration(\n \"300s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^less_equals_duration","type":"bool"},{"original":{"name":"less_timestamp_true","expr":"timestamp('2009-02-13T23:00:00Z') \u003c timestamp('2009-03-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_\u003c_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-03-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-03-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^less_timestamp","type":"bool"},{"original":{"name":"less_duration_true","expr":"duration('200s') \u003c duration('300s')","value":{"boolValue":true}},"ast":"_\u003c_(\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"300s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003c_(\n duration(\n \"200s\"~string\n )~duration^string_to_duration,\n duration(\n \"300s\"~string\n )~duration^string_to_duration\n)~bool^less_duration","type":"bool"},{"original":{"name":"geq_timestamp_true","expr":"timestamp('2009-02-13T23:00:00Z') \u003e= timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_\u003e=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_equals_timestamp","type":"bool"},{"original":{"name":"geq_timestamp_false","expr":"timestamp('2009-02-13T22:58:00Z') \u003e= timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":false}},"ast":"_\u003e=_(\n timestamp(\n \"2009-02-13T22:58:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n timestamp(\n \"2009-02-13T22:58:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_equals_timestamp","type":"bool"},{"original":{"name":"geq_duration_true","expr":"duration('200s') \u003e= duration('200s')","value":{"boolValue":true}},"ast":"_\u003e=_(\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n duration(\n \"200s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^greater_equals_duration","type":"bool"},{"original":{"name":"geq_duration_false","expr":"duration('120s') \u003e= duration('200s')","value":{"boolValue":false}},"ast":"_\u003e=_(\n duration(\n \"120s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e=_(\n duration(\n \"120s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^greater_equals_duration","type":"bool"},{"original":{"name":"greater_timestamp_true","expr":"timestamp('2009-02-13T23:59:00Z') \u003e timestamp('2009-02-13T23:00:00Z')","value":{"boolValue":true}},"ast":"_\u003e_(\n timestamp(\n \"2009-02-13T23:59:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"2009-02-13T23:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n timestamp(\n \"2009-02-13T23:59:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"2009-02-13T23:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_timestamp","type":"bool"},{"original":{"name":"greater_duration_true","expr":"duration('300s') \u003e duration('200s')","value":{"boolValue":true}},"ast":"_\u003e_(\n duration(\n \"300s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_\u003e_(\n duration(\n \"300s\"~string\n )~duration^string_to_duration,\n duration(\n \"200s\"~string\n )~duration^string_to_duration\n)~bool^greater_duration","type":"bool"}]},{"name":"duration_converters","tests":[{"original":{"name":"get_hours","expr":"duration('10000s').getHours()","value":{"int64Value":"2"}},"ast":"duration(\n \"10000s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours()^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"10000s\"~string\n)~duration^string_to_duration.getHours()~int^duration_to_hours","type":"int"},{"original":{"name":"get_milliseconds","description":"Obtain the milliseconds component of the duration. Note, this is not the same as converting the duration to milliseconds. This behavior will be deprecated.","expr":"x.getMilliseconds()","typeEnv":[{"name":"x","ident":{"type":{"messageType":"google.protobuf.Duration"}}}],"bindings":{"x":{"value":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Duration","value":"123.321456789s"}}}},"value":{"int64Value":"321"}},"ast":"x^#*expr.Expr_IdentExpr#.getMilliseconds()^#*expr.Expr_CallExpr#","checkedAst":"x~duration^x.getMilliseconds()~int^duration_to_milliseconds","type":"int"},{"original":{"name":"get_minutes","expr":"duration('3730s').getMinutes()","value":{"int64Value":"62"}},"ast":"duration(\n \"3730s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"3730s\"~string\n)~duration^string_to_duration.getMinutes()~int^duration_to_minutes","type":"int"},{"original":{"name":"get_seconds","expr":"duration('3730s').getSeconds()","value":{"int64Value":"3730"}},"ast":"duration(\n \"3730s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"3730s\"~string\n)~duration^string_to_duration.getSeconds()~int^duration_to_seconds","type":"int"}]},{"name":"timestamp_range","tests":[{"original":{"name":"from_string_under","expr":"timestamp('0000-01-01T00:00:00Z')","evalError":{"errors":[{"message":"range"}]}},"ast":"timestamp(\n \"0000-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"0000-01-01T00:00:00Z\"~string\n)~timestamp^string_to_timestamp","type":"timestamp"},{"original":{"name":"from_string_over","expr":"timestamp('10000-01-01T00:00:00Z')","evalError":{"errors":[{"message":"range"}]}},"ast":"timestamp(\n \"10000-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"timestamp(\n \"10000-01-01T00:00:00Z\"~string\n)~timestamp^string_to_timestamp","type":"timestamp"},{"original":{"name":"add_duration_under","expr":"timestamp('0001-01-01T00:00:00Z') + duration('-1s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n timestamp(\n \"0001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-1s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n timestamp(\n \"0001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"-1s\"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration","type":"timestamp"},{"original":{"name":"add_duration_over","expr":"timestamp('9999-12-31T23:59:59Z') + duration('1s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n timestamp(\n \"9999-12-31T23:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"1s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n timestamp(\n \"9999-12-31T23:59:59Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"1s\"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration","type":"timestamp"},{"original":{"name":"add_duration_nanos_over","expr":"timestamp('9999-12-31T23:59:59.999999999Z') + duration('1ns')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n timestamp(\n \"9999-12-31T23:59:59.999999999Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"1ns\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n timestamp(\n \"9999-12-31T23:59:59.999999999Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"1ns\"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration","type":"timestamp"},{"original":{"name":"add_duration_nanos_under","expr":"timestamp('0001-01-01T00:00:00Z') + duration('-1ns')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n timestamp(\n \"0001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-1ns\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n timestamp(\n \"0001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n duration(\n \"-1ns\"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration","type":"timestamp"},{"original":{"name":"sub_time_duration_over","expr":"timestamp('9999-12-31T23:59:59Z') - timestamp('0001-01-01T00:00:00Z')","evalError":{"errors":[{"message":"range"}]}},"ast":"_-_(\n timestamp(\n \"9999-12-31T23:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"0001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n timestamp(\n \"9999-12-31T23:59:59Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"0001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp\n)~duration^subtract_timestamp_timestamp","type":"duration"},{"original":{"name":"sub_time_duration_under","expr":"timestamp('0001-01-01T00:00:00Z') - timestamp('9999-12-31T23:59:59Z')","evalError":{"errors":[{"message":"range"}]}},"ast":"_-_(\n timestamp(\n \"0001-01-01T00:00:00Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n \"9999-12-31T23:59:59Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n timestamp(\n \"0001-01-01T00:00:00Z\"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n \"9999-12-31T23:59:59Z\"~string\n )~timestamp^string_to_timestamp\n)~duration^subtract_timestamp_timestamp","type":"duration"}]},{"name":"duration_range","tests":[{"original":{"name":"from_string_under","expr":"duration('-320000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"duration(\n \"-320000000000s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"-320000000000s\"~string\n)~duration^string_to_duration","type":"duration"},{"original":{"name":"from_string_over","expr":"duration('320000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"duration(\n \"320000000000s\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"duration(\n \"320000000000s\"~string\n)~duration^string_to_duration","type":"duration"},{"original":{"name":"add_under","expr":"duration('-200000000000s') + duration('-200000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n duration(\n \"-200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n duration(\n \"-200000000000s\"~string\n )~duration^string_to_duration,\n duration(\n \"-200000000000s\"~string\n )~duration^string_to_duration\n)~duration^add_duration_duration","type":"duration"},{"original":{"name":"add_over","expr":"duration('200000000000s') + duration('200000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_+_(\n duration(\n \"200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n duration(\n \"200000000000s\"~string\n )~duration^string_to_duration,\n duration(\n \"200000000000s\"~string\n )~duration^string_to_duration\n)~duration^add_duration_duration","type":"duration"},{"original":{"name":"sub_under","expr":"duration('-200000000000s') - duration('200000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_-_(\n duration(\n \"-200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n duration(\n \"-200000000000s\"~string\n )~duration^string_to_duration,\n duration(\n \"200000000000s\"~string\n )~duration^string_to_duration\n)~duration^subtract_duration_duration","type":"duration"},{"original":{"name":"sub_over","expr":"duration('200000000000s') - duration('-200000000000s')","evalError":{"errors":[{"message":"range"}]}},"ast":"_-_(\n duration(\n \"200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n \"-200000000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_-_(\n duration(\n \"200000000000s\"~string\n )~duration^string_to_duration,\n duration(\n \"-200000000000s\"~string\n )~duration^string_to_duration\n)~duration^subtract_duration_duration","type":"duration"}]}]},{"name":"type_deductions","suites":[{"name":"constant_literals","tests":[{"original":{"name":"bool","expr":"true","typedResult":{"result":{"boolValue":true},"deducedType":{"primitive":"BOOL"}}},"ast":"true^#*expr.Constant_BoolValue#","checkedAst":"true~bool","type":"bool"},{"original":{"name":"int","expr":"42","typedResult":{"result":{"int64Value":"42"},"deducedType":{"primitive":"INT64"}}},"ast":"42^#*expr.Constant_Int64Value#","checkedAst":"42~int","type":"int"},{"original":{"name":"uint","expr":"42u","typedResult":{"result":{"uint64Value":"42"},"deducedType":{"primitive":"UINT64"}}},"ast":"42u^#*expr.Constant_Uint64Value#","checkedAst":"42u~uint","type":"uint"},{"original":{"name":"double","expr":"0.1","typedResult":{"result":{"doubleValue":0.1},"deducedType":{"primitive":"DOUBLE"}}},"ast":"0.1^#*expr.Constant_DoubleValue#","checkedAst":"0.1~double","type":"double"},{"original":{"name":"string","expr":"\"test\"","typedResult":{"result":{"stringValue":"test"},"deducedType":{"primitive":"STRING"}}},"ast":"\"test\"^#*expr.Constant_StringValue#","checkedAst":"\"test\"~string","type":"string"},{"original":{"name":"bytes","expr":"b\"test\"","typedResult":{"result":{"bytesValue":"dGVzdA=="},"deducedType":{"primitive":"BYTES"}}},"ast":"b\"test\"^#*expr.Constant_BytesValue#","checkedAst":"b\"test\"~bytes","type":"bytes"},{"original":{"name":"null","expr":"null","typedResult":{"result":{"nullValue":null},"deducedType":{"null":null}}},"ast":"null^#*expr.Constant_NullValue#","checkedAst":"null~null","type":"null"}]},{"name":"complex_initializers","tests":[{"original":{"name":"list","expr":"[1]","typedResult":{"result":{"listValue":{"values":[{"int64Value":"1"}]}},"deducedType":{"listType":{"elemType":{"primitive":"INT64"}}}}},"ast":"[\n 1^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n 1~int\n]~list(int)","type":"list(int)"},{"original":{"name":"map","expr":"{'abc': 123}","typedResult":{"result":{"mapValue":{"entries":[{"key":{"stringValue":"abc"},"value":{"int64Value":"123"}}]}},"deducedType":{"mapType":{"keyType":{"primitive":"STRING"},"valueType":{"primitive":"INT64"}}}}},"ast":"{\n \"abc\"^#*expr.Constant_StringValue#:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"{\n \"abc\"~string:123~int\n}~map(string, int)","type":"map(string, int)"},{"original":{"name":"struct","expr":"TestAllTypes{single_int64: 1}","container":"cel.expr.conformance.proto3","typedResult":{"result":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes","singleInt64":"1"}},"deducedType":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}},"ast":"TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes","type":"cel.expr.conformance.proto3.TestAllTypes"}]},{"name":"field_access","tests":[{"original":{"name":"int_field","expr":"TestAllTypes{single_int64: 1}.single_int64","container":"cel.expr.conformance.proto3","typedResult":{"result":{"int64Value":"1"},"deducedType":{"primitive":"INT64"}}},"ast":"TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int","type":"int"},{"original":{"name":"repeated_int_field","expr":"TestAllTypes{}.repeated_int64","container":"cel.expr.conformance.proto3","typedResult":{"result":{"listValue":{}},"deducedType":{"listType":{"elemType":{"primitive":"INT64"}}}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int64~list(int)","type":"list(int)"},{"original":{"name":"map_bool_int","expr":"TestAllTypes{}.map_bool_int64","container":"cel.expr.conformance.proto3","typedResult":{"result":{"mapValue":{}},"deducedType":{"mapType":{"keyType":{"primitive":"BOOL"},"valueType":{"primitive":"INT64"}}}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_bool_int64^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_bool_int64~map(bool, int)","type":"map(bool, int)"},{"original":{"name":"enum_field","expr":"TestAllTypes{}.standalone_enum","container":"cel.expr.conformance.proto3","typedResult":{"result":{"int64Value":"0"},"deducedType":{"primitive":"INT64"}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int","type":"int"},{"original":{"name":"repeated_enum_field","expr":"TestAllTypes{}.repeated_nested_enum","container":"cel.expr.conformance.proto3","typedResult":{"result":{"listValue":{}},"deducedType":{"listType":{"elemType":{"primitive":"INT64"}}}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)","type":"list(int)"},{"original":{"name":"enum_map_field","expr":"TestAllTypes{}.map_int32_enum","container":"cel.expr.conformance.proto3","typedResult":{"result":{"mapValue":{}},"deducedType":{"mapType":{"keyType":{"primitive":"INT64"},"valueType":{"primitive":"INT64"}}}}},"ast":"TestAllTypes{}^#*expr.Expr_StructExpr#.map_int32_enum^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_int32_enum~map(int, int)","type":"map(int, int)"}]},{"name":"indexing","tests":[{"original":{"name":"list","expr":"['foo'][0]","typedResult":{"result":{"stringValue":"foo"},"deducedType":{"primitive":"STRING"}}},"ast":"_[_](\n [\n \"foo\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n \"foo\"~string\n ]~list(string),\n 0~int\n)~string^index_list","type":"string"},{"original":{"name":"map","expr":"{'abc': 123}['abc']","typedResult":{"result":{"int64Value":"123"},"deducedType":{"primitive":"INT64"}}},"ast":"_[_](\n {\n \"abc\"^#*expr.Constant_StringValue#:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n \"abc\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n {\n \"abc\"~string:123~int\n }~map(string, int),\n \"abc\"~string\n)~int^index_map","type":"int"}]},{"name":"functions","tests":[{"original":{"name":"nested_calls","expr":"('foo' + 'bar').startsWith('foo')","typedResult":{"result":{"boolValue":true},"deducedType":{"primitive":"BOOL"}}},"ast":"_+_(\n \"foo\"^#*expr.Constant_StringValue#,\n \"bar\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.startsWith(\n \"foo\"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n \"foo\"~string,\n \"bar\"~string\n)~string^add_string.startsWith(\n \"foo\"~string\n)~bool^starts_with_string","type":"bool"},{"original":{"name":"function_result_type","expr":"fn('abc', 123)","checkOnly":true,"typeEnv":[{"name":"fn","function":{"overloads":[{"overloadId":"fn_string_int","params":[{"primitive":"STRING"},{"primitive":"INT64"}],"resultType":{"primitive":"STRING"}}]}}],"typedResult":{"deducedType":{"primitive":"STRING"}}},"ast":"fn(\n \"abc\"^#*expr.Constant_StringValue#,\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"fn(\n \"abc\"~string,\n 123~int\n)~string^fn_string_int","type":"string"}]},{"name":"flexible_type_parameter_assignment","tests":[{"original":{"name":"list_parameter","expr":"[[], [[]], [[[]]], [[[[]]]]]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"dyn":{}}}}}}}}}}}}}},"ast":"[\n []^#*expr.Expr_ListExpr#,\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n []~list(list(list(list(dyn)))),\n [\n []~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n [\n [\n []~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n [\n [\n [\n []~list(dyn)\n ]~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn))))\n]~list(list(list(list(list(dyn)))))","type":"list(list(list(list(list(dyn)))))"},{"original":{"name":"list_parameter_order_independent","expr":"[[[[[]]]], [], [[[]]]]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"listType":{"elemType":{"dyn":{}}}}}}}}}}}}}},"ast":"[\n [\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#,\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n [\n [\n [\n []~list(dyn)\n ]~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n []~list(list(list(list(dyn)))),\n [\n [\n []~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn))))\n]~list(list(list(list(list(dyn)))))","type":"list(list(list(list(list(dyn)))))"},{"original":{"name":"comprehension_type_var_aliasing","expr":"msg.repeated_nested_message.map(x, x).map(y, y.bb)","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"primitive":"INT64"}}}}},"ast":"__comprehension__(\n // Variable\n y,\n // Target\n __comprehension__(\n // Variable\n x,\n // Target\n msg^#*expr.Expr_IdentExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n y^#*expr.Expr_IdentExpr#.bb^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#","checkedAst":"__comprehension__(\n // Variable\n y,\n // Target\n __comprehension__(\n // Variable\n x,\n // Target\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // Accumulator\n @result,\n // Init\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^@result,\n [\n x~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^x\n ]~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n // Result\n @result~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^@result)~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n y~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^y.bb~int\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)","type":"list(int)"},{"original":{"name":"overload_type_var_aliasing","expr":"([] + msg.repeated_nested_message + [])[0].bb","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"primitive":"INT64"}}},"ast":"_[_](\n _+_(\n _+_(\n []^#*expr.Expr_ListExpr#,\n msg^#*expr.Expr_IdentExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.bb^#*expr.Expr_SelectExpr#","checkedAst":"_[_](\n _+_(\n _+_(\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n 0~int\n)~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^index_list.bb~int","type":"int"},{"original":{"name":"unconstrained_type_var_as_dyn","expr":"([].map(x,x))[0].foo","checkOnly":true,"typedResult":{"deducedType":{"dyn":{}}}},"ast":"_[_](\n __comprehension__(\n // Variable\n x,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.foo^#*expr.Expr_SelectExpr#","checkedAst":"_[_](\n __comprehension__(\n // Variable\n x,\n // Target\n []~list(dyn),\n // Accumulator\n @result,\n // Init\n []~list(dyn),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(dyn)^@result,\n [\n x~dyn^x\n ]~list(dyn)\n )~list(dyn)^add_list,\n // Result\n @result~list(dyn)^@result)~list(dyn),\n 0~int\n)~dyn^index_list.foo~dyn","type":"dyn"},{"original":{"name":"list_parameters_do_not_unify","expr":"[msg.single_int64_wrapper, msg.single_string_wrapper]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"dyn":{}}}}}},"ast":"[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_string_wrapper~wrapper(string)\n]~list(dyn)","type":"list(dyn)"},{"original":{"name":"optional_none","expr":"[optional.none(), optional.of(1)]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"abstractType":{"name":"optional_type","parameterTypes":[{"primitive":"INT64"}]}}}}}},"ast":"[\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n]~list(optional_type(int))","type":"list(optional_type(int))"},{"original":{"name":"optional_none_2","expr":"[optional.of(1), optional.none()]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"abstractType":{"name":"optional_type","parameterTypes":[{"primitive":"INT64"}]}}}}}},"ast":"[\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n]~list(optional_type(int))","type":"list(optional_type(int))"},{"original":{"name":"optional_dyn_promotion","expr":"[optional.of(1), optional.of(dyn(1))]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"abstractType":{"name":"optional_type","parameterTypes":[{"dyn":{}}]}}}}}},"ast":"[\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of\n]~list(optional_type(dyn))","type":"list(optional_type(dyn))"},{"original":{"name":"optional_dyn_promotion_2","expr":"[optional.of(dyn(1)), optional.of(1)]","checkOnly":true,"typedResult":{"deducedType":{"listType":{"elemType":{"abstractType":{"name":"optional_type","parameterTypes":[{"dyn":{}}]}}}}}},"ast":"[\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n]~list(optional_type(dyn))","type":"list(optional_type(dyn))"},{"original":{"name":"optional_in_ternary","expr":"true ? optional.of(dyn(1)) : optional.of(1)","checkOnly":true,"typedResult":{"deducedType":{"abstractType":{"name":"optional_type","parameterTypes":[{"dyn":{}}]}}}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n true~bool,\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~optional_type(dyn)^conditional","type":"optional_type(dyn)"}]},{"name":"wrappers","tests":[{"original":{"name":"wrapper_promotion","expr":"[msg.single_int64_wrapper, msg.single_int64]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"wrapper":"INT64"}}}}},"ast":"[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int\n]~list(wrapper(int))","type":"list(wrapper(int))"},{"original":{"name":"wrapper_promotion_2","expr":"[msg.single_int64, msg.single_int64_wrapper]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"wrapper":"INT64"}}}}},"ast":"[\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int)\n]~list(int)","type":"list(int)"},{"original":{"name":"wrapper_dyn_promotion","expr":"[msg.single_int64_wrapper, msg.single_int64, dyn(1)]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"dyn":{}}}}}},"ast":"[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n dyn(\n 1~int\n )~dyn^to_dyn\n]~list(dyn)","type":"list(dyn)"},{"original":{"name":"wrapper_dyn_promotion_2","expr":"[dyn(1), msg.single_int64_wrapper, msg.single_int64]","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"listType":{"elemType":{"dyn":{}}}}}},"ast":"[\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#","checkedAst":"[\n dyn(\n 1~int\n )~dyn^to_dyn,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int\n]~list(dyn)","type":"list(dyn)"},{"original":{"name":"wrapper_primitive_assignable","expr":"msg.single_int64_wrapper + 1","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"primitive":"INT64"}}},"ast":"_+_(\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_+_(\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n 1~int\n)~int^add_int64","type":"int"},{"original":{"name":"wrapper_null_assignable","expr":"msg.single_int64_wrapper == null","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"primitive":"BOOL"}}},"ast":"_==_(\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals","type":"bool"},{"original":{"name":"wrapper_ternary_parameter_assignment","expr":"false ? msg.single_int64_wrapper : null","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"wrapper":"INT64"}}},"ast":"_?_:_(\n false^#*expr.Constant_BoolValue#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n false~bool,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n null~null\n)~wrapper(int)^conditional","type":"wrapper(int)"},{"original":{"name":"wrapper_ternary_parameter_assignment_2","expr":"true ? msg.single_int64_wrapper : 42","checkOnly":true,"typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"typedResult":{"deducedType":{"wrapper":"INT64"}}},"ast":"_?_:_(\n true^#*expr.Constant_BoolValue#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_?_:_(\n true~bool,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n 42~int\n)~wrapper(int)^conditional","type":"wrapper(int)"}]},{"name":"type_parameters","tests":[{"original":{"name":"multiple_parameters_generality","expr":"[tuple(1, 2u, 3.0), tuple(dyn(1), dyn(2u), dyn(3.0))][0]","checkOnly":true,"typeEnv":[{"name":"tuple","function":{"overloads":[{"overloadId":"tuple_T_U_V","params":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}]}}}]}}],"typedResult":{"deducedType":{"abstractType":{"name":"tuple","parameterTypes":[{"dyn":{}},{"dyn":{}},{"dyn":{}}]}}}},"ast":"_[_](\n [\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V,\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n dyn(\n 3~double\n )~dyn^to_dyn\n )~tuple(dyn, dyn, dyn)^tuple_T_U_V\n ]~list(tuple(dyn, dyn, dyn)),\n 0~int\n)~tuple(dyn, dyn, dyn)^index_list","type":"tuple(dyn, dyn, dyn)"},{"original":{"name":"multiple_parameters_generality_2","expr":"sort(tuple(dyn(1), 2u, 3.0))","checkOnly":true,"typeEnv":[{"name":"tuple","function":{"overloads":[{"overloadId":"tuple_T_U_V","params":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}]}}}]}},{"name":"sort","function":{"overloads":[{"overloadId":"sort_tuple_T_T_T","params":[{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"T"},{"typeParam":"T"}]}}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"T"},{"typeParam":"T"}]}}}]}}],"typedResult":{"deducedType":{"abstractType":{"name":"tuple","parameterTypes":[{"dyn":{}},{"dyn":{}},{"dyn":{}}]}}}},"ast":"sort(\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"sort(\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint,\n 3~double\n )~tuple(dyn, uint, double)^tuple_T_U_V\n)~tuple(dyn, dyn, dyn)^sort_tuple_T_T_T","type":"tuple(dyn, dyn, dyn)"},{"original":{"name":"multiple_parameters_parameterized_ovl","expr":"tuple(1, 2u, 3.0) == tuple(1, dyn(2u), dyn(3.0))","checkOnly":true,"typeEnv":[{"name":"tuple","function":{"overloads":[{"overloadId":"tuple_T_U_V","params":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}]}}}]}}],"typedResult":{"deducedType":{"primitive":"BOOL"}}},"ast":"_==_(\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n 1^#*expr.Constant_Int64Value#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V,\n tuple(\n 1~int,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n dyn(\n 3~double\n )~dyn^to_dyn\n )~tuple(int, dyn, dyn)^tuple_T_U_V\n)~bool^equals","type":"bool"},{"original":{"name":"multiple_parameters_parameterized_ovl_2","expr":"tuple(dyn(1), dyn(2u), 3.0) == tuple(1, 2u, 3.0)","checkOnly":true,"typeEnv":[{"name":"tuple","function":{"overloads":[{"overloadId":"tuple_T_U_V","params":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}],"resultType":{"abstractType":{"name":"tuple","parameterTypes":[{"typeParam":"T"},{"typeParam":"U"},{"typeParam":"V"}]}}}]}}],"typedResult":{"deducedType":{"primitive":"BOOL"}}},"ast":"_==_(\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 3~double\n )~tuple(dyn, dyn, double)^tuple_T_U_V,\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V\n)~bool^equals","type":"bool"}]},{"name":"legacy_nullable_types","tests":[{"original":{"name":"null_assignable_to_message_parameter_candidate","expr":"[msg, null][0]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes"}}}},"typedResult":{"result":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes"}},"deducedType":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}},"ast":"_[_](\n [\n msg^#*expr.Expr_IdentExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list","type":"null"},{"original":{"name":"null_assignable_to_duration_parameter_candidate","expr":"[msg.single_duration, null][0]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes"}}}},"typedResult":{"result":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Duration","value":"0s"}},"deducedType":{"wellKnown":"DURATION"}}},"ast":"_[_](\n [\n msg^#*expr.Expr_IdentExpr#.single_duration^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_duration~duration,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list","type":"null"},{"original":{"name":"null_assignable_to_timestamp_parameter_candidate","expr":"[msg.single_timestamp, null][0]","typeEnv":[{"name":"msg","ident":{"type":{"messageType":"cel.expr.conformance.proto3.TestAllTypes"}}}],"bindings":{"msg":{"value":{"objectValue":{"@type":"type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes"}}}},"typedResult":{"result":{"objectValue":{"@type":"type.googleapis.com/google.protobuf.Timestamp","value":"1970-01-01T00:00:00Z"}},"deducedType":{"wellKnown":"TIMESTAMP"}}},"ast":"_[_](\n [\n msg^#*expr.Expr_IdentExpr#.single_timestamp^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_timestamp~timestamp,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list","type":"null"},{"original":{"name":"null_assignable_to_abstract_parameter_candidate","expr":"[optional.of(1), null][0]","checkOnly":true,"typedResult":{"deducedType":{"abstractType":{"name":"optional_type","parameterTypes":[{"primitive":"INT64"}]}}}},"ast":"_[_](\n [\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#","checkedAst":"_[_](\n [\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list","type":"null"}]}]},{"name":"unknowns"},{"name":"wrappers","suites":[{"name":"bool","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.BoolValue{value: true}}.single_any","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_any:google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.BoolValue{value: true}}.single_value","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"TestAllTypes{\n single_value:google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_bool_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_bool_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"int32","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.Int32Value{value: 1}}.single_any","container":"cel.expr.conformance.proto3","value":{"int64Value":"1"}},"ast":"TestAllTypes{\n single_any:google.protobuf.Int32Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Int32Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.Int32Value{value: 1}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.Int32Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int32Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_int32_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_int32_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"int64","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.Int64Value{value: 1}}.single_any","container":"cel.expr.conformance.proto3","value":{"int64Value":"1"}},"ast":"TestAllTypes{\n single_any:google.protobuf.Int64Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Int64Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json_number","expr":"TestAllTypes{single_value: google.protobuf.Int64Value{value: 1}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_json_string","expr":"TestAllTypes{single_value: google.protobuf.Int64Value{value: 9223372036854775807}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"9223372036854775807"}},"ast":"TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:9223372036854775807^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:9223372036854775807~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_int64_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_int64_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"uint32","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.UInt32Value{value: 1u}}.single_any","container":"cel.expr.conformance.proto3","value":{"uint64Value":"1"}},"ast":"TestAllTypes{\n single_any:google.protobuf.UInt32Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.UInt32Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.UInt32Value{value: 1u}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.UInt32Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt32Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_uint32_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_uint32_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"uint64","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.UInt64Value{value: 1u}}.single_any","container":"cel.expr.conformance.proto3","value":{"uint64Value":"1"}},"ast":"TestAllTypes{\n single_any:google.protobuf.UInt64Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.UInt64Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json_number","expr":"TestAllTypes{single_value: google.protobuf.UInt64Value{value: 1u}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_json_string","expr":"TestAllTypes{single_value: google.protobuf.UInt64Value{value: 18446744073709551615u}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"18446744073709551615"}},"ast":"TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_uint64_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_uint64_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"float","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.FloatValue{value: 1.0}}.single_any","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_any:google.protobuf.FloatValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.FloatValue{\n value:1~double\n }~wrapper(double)^google.protobuf.FloatValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.FloatValue{value: 1.0}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.FloatValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.FloatValue{\n value:1~double\n }~wrapper(double)^google.protobuf.FloatValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_float_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_float_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"double","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.DoubleValue{value: 1.0}}.single_any","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_any:google.protobuf.DoubleValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.DoubleValue{\n value:1~double\n }~wrapper(double)^google.protobuf.DoubleValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.DoubleValue{value: 1.0}}.single_value","container":"cel.expr.conformance.proto3","value":{"doubleValue":1}},"ast":"TestAllTypes{\n single_value:google.protobuf.DoubleValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.DoubleValue{\n value:1~double\n }~wrapper(double)^google.protobuf.DoubleValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_double_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_double_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"bytes","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.BytesValue{value: b'foo'}}.single_any","container":"cel.expr.conformance.proto3","value":{"bytesValue":"Zm9v"}},"ast":"TestAllTypes{\n single_any:google.protobuf.BytesValue{\n value:b\"foo\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.BytesValue{\n value:b\"foo\"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.BytesValue{value: b'foo'}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"Zm9v"}},"ast":"TestAllTypes{\n single_value:google.protobuf.BytesValue{\n value:b\"foo\"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.BytesValue{\n value:b\"foo\"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_bytes_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_bytes_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"string","tests":[{"original":{"name":"to_any","expr":"TestAllTypes{single_any: google.protobuf.StringValue{value: 'foo'}}.single_any","container":"cel.expr.conformance.proto3","value":{"stringValue":"foo"}},"ast":"TestAllTypes{\n single_any:google.protobuf.StringValue{\n value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.StringValue{\n value:\"foo\"~string\n }~wrapper(string)^google.protobuf.StringValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"},{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.StringValue{value: 'foo'}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"foo"}},"ast":"TestAllTypes{\n single_value:google.protobuf.StringValue{\n value:\"foo\"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.StringValue{\n value:\"foo\"~string\n }~wrapper(string)^google.protobuf.StringValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"},{"original":{"name":"to_null","expr":"TestAllTypes{single_string_wrapper: null} == TestAllTypes{}","container":"cel.expr.conformance.proto3","value":{"boolValue":true}},"ast":"_==_(\n TestAllTypes{\n single_string_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#","checkedAst":"_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals","type":"bool"}]},{"name":"value","tests":[{"original":{"name":"default_to_json","expr":"TestAllTypes{single_any: TestAllTypes{}.single_value}.single_any","container":"cel.expr.conformance.proto3","value":{"nullValue":null}},"ast":"TestAllTypes{\n single_any:TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]},{"name":"list_value","tests":[{"original":{"name":"literal_to_any","expr":"TestAllTypes{single_any: []}.single_any","container":"cel.expr.conformance.proto3","value":{"listValue":{}}},"ast":"TestAllTypes{\n single_any:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]},{"name":"struct","tests":[{"original":{"name":"literal_to_any","expr":"TestAllTypes{single_any: {}}.single_any","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_any:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_any:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any","type":"any"}]},{"name":"field_mask","tests":[{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.FieldMask{paths: ['foo', 'bar']}}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"foo,bar"}},"ast":"TestAllTypes{\n single_value:google.protobuf.FieldMask{\n paths:[\n \"foo\"^#*expr.Constant_StringValue#,\n \"bar\"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.FieldMask{\n paths:[\n \"foo\"~string,\n \"bar\"~string\n ]~list(string)\n }~google.protobuf.FieldMask^google.protobuf.FieldMask\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"duration","tests":[{"original":{"name":"to_json","expr":"TestAllTypes{single_value: duration('1000000s')}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"1000000s"}},"ast":"TestAllTypes{\n single_value:duration(\n \"1000000s\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:duration(\n \"1000000s\"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"timestamp","tests":[{"original":{"name":"to_json","expr":"TestAllTypes{single_value: timestamp('9999-12-31T23:59:59.999999999Z')}.single_value","container":"cel.expr.conformance.proto3","value":{"stringValue":"9999-12-31T23:59:59.999999999Z"}},"ast":"TestAllTypes{\n single_value:timestamp(\n \"9999-12-31T23:59:59.999999999Z\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:timestamp(\n \"9999-12-31T23:59:59.999999999Z\"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]},{"name":"empty","tests":[{"original":{"name":"to_json","expr":"TestAllTypes{single_value: google.protobuf.Empty{}}.single_value","container":"cel.expr.conformance.proto3","value":{"mapValue":{}}},"ast":"TestAllTypes{\n single_value:google.protobuf.Empty{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#","checkedAst":"cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Empty{}~google.protobuf.Empty^google.protobuf.Empty\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn","type":"dyn"}]}]}]} as const; +import type { SerializedIncrementalTestSuite } from "./tests.js"; +export const tests: SerializedIncrementalTestSuite = { + name: "conformance", + suites: [ + { + name: "basic", + suites: [ + { + name: "self_eval_zeroish", + tests: [ + { + original: { + name: "self_eval_int_zero", + expr: "0", + value: { int64Value: "0" }, + }, + ast: "0^#*expr.Constant_Int64Value#", + checkedAst: "0~int", + type: "int", + }, + { + original: { + name: "self_eval_uint_zero", + expr: "0u", + value: { uint64Value: "0" }, + }, + ast: "0u^#*expr.Constant_Uint64Value#", + checkedAst: "0u~uint", + type: "uint", + }, + { + original: { + name: "self_eval_uint_alias_zero", + expr: "0U", + value: { uint64Value: "0" }, + }, + ast: "0u^#*expr.Constant_Uint64Value#", + checkedAst: "0u~uint", + type: "uint", + }, + { + original: { + name: "self_eval_float_zero", + expr: "0.0", + value: { doubleValue: 0 }, + }, + ast: "0^#*expr.Constant_DoubleValue#", + checkedAst: "0~double", + type: "double", + }, + { + original: { + name: "self_eval_float_zerowithexp", + expr: "0e+0", + value: { doubleValue: 0 }, + }, + ast: "0^#*expr.Constant_DoubleValue#", + checkedAst: "0~double", + type: "double", + }, + { + original: { + name: "self_eval_string_empty", + expr: "''", + value: { stringValue: "" }, + }, + ast: '""^#*expr.Constant_StringValue#', + checkedAst: '""~string', + type: "string", + }, + { + original: { + name: "self_eval_string_empty_quotes", + expr: '""', + value: { stringValue: "" }, + }, + ast: '""^#*expr.Constant_StringValue#', + checkedAst: '""~string', + type: "string", + }, + { + original: { + name: "self_eval_string_raw_prefix", + expr: 'r""', + value: { stringValue: "" }, + }, + ast: '""^#*expr.Constant_StringValue#', + checkedAst: '""~string', + type: "string", + }, + { + original: { + name: "self_eval_bytes_empty", + expr: 'b""', + value: { bytesValue: "" }, + }, + ast: 'b""^#*expr.Constant_BytesValue#', + checkedAst: 'b""~bytes', + type: "bytes", + }, + { + original: { + name: "self_eval_bool_false", + expr: "false", + value: { boolValue: false }, + }, + ast: "false^#*expr.Constant_BoolValue#", + checkedAst: "false~bool", + type: "bool", + }, + { + original: { + name: "self_eval_null", + expr: "null", + value: { nullValue: null }, + }, + ast: "null^#*expr.Constant_NullValue#", + checkedAst: "null~null", + type: "null", + }, + { + original: { + name: "self_eval_empty_list", + expr: "[]", + value: { listValue: {} }, + }, + ast: "[]^#*expr.Expr_ListExpr#", + checkedAst: "[]~list(dyn)", + type: "list(dyn)", + }, + { + original: { + name: "self_eval_empty_map", + expr: "{}", + value: { mapValue: {} }, + }, + ast: "{}^#*expr.Expr_StructExpr#", + checkedAst: "{}~map(dyn, dyn)", + type: "map(dyn, dyn)", + }, + { + original: { + name: "self_eval_string_raw_prefix_triple_double", + expr: 'r""""""', + value: { stringValue: "" }, + }, + ast: '""^#*expr.Constant_StringValue#', + checkedAst: '""~string', + type: "string", + }, + { + original: { + name: "self_eval_string_raw_prefix_triple_single", + expr: "r''''''", + value: { stringValue: "" }, + }, + ast: '""^#*expr.Constant_StringValue#', + checkedAst: '""~string', + type: "string", + }, + ], + }, + { + name: "self_eval_nonzeroish", + tests: [ + { + original: { + name: "self_eval_int_nonzero", + expr: "42", + value: { int64Value: "42" }, + }, + ast: "42^#*expr.Constant_Int64Value#", + checkedAst: "42~int", + type: "int", + }, + { + original: { + name: "self_eval_uint_nonzero", + expr: "123456789u", + value: { uint64Value: "123456789" }, + }, + ast: "123456789u^#*expr.Constant_Uint64Value#", + checkedAst: "123456789u~uint", + type: "uint", + }, + { + original: { + name: "self_eval_uint_alias_nonzero", + expr: "123456789U", + value: { uint64Value: "123456789" }, + }, + ast: "123456789u^#*expr.Constant_Uint64Value#", + checkedAst: "123456789u~uint", + type: "uint", + }, + { + original: { + name: "self_eval_int_negative_min", + expr: "-9223372036854775808", + value: { int64Value: "-9223372036854775808" }, + }, + ast: "-9223372036854775808^#*expr.Constant_Int64Value#", + checkedAst: "-9223372036854775808~int", + type: "int", + }, + { + original: { + name: "self_eval_float_negative_exp", + expr: "-2.3e+1", + value: { doubleValue: -23 }, + }, + ast: "-23^#*expr.Constant_DoubleValue#", + checkedAst: "-23~double", + type: "double", + }, + { + original: { + name: "self_eval_string_excl", + expr: '"!"', + value: { stringValue: "!" }, + }, + ast: '"!"^#*expr.Constant_StringValue#', + checkedAst: '"!"~string', + type: "string", + }, + { + original: { + name: "self_eval_string_escape", + expr: "'\\''", + value: { stringValue: "'" }, + }, + ast: '"\'"^#*expr.Constant_StringValue#', + checkedAst: '"\'"~string', + type: "string", + }, + { + original: { + name: "self_eval_bytes_escape", + expr: "b'ÿ'", + value: { bytesValue: "w78=" }, + }, + ast: 'b"ÿ"^#*expr.Constant_BytesValue#', + checkedAst: 'b"ÿ"~bytes', + type: "bytes", + }, + { + original: { + name: "self_eval_bytes_invalid_utf8", + expr: "b'\\000\\xff'", + value: { bytesValue: "AP8=" }, + }, + ast: 'b"\\x00\\xff"^#*expr.Constant_BytesValue#', + checkedAst: 'b"\\x00\\xff"~bytes', + type: "bytes", + }, + { + original: { + name: "self_eval_list_singleitem", + expr: "[-1]", + value: { listValue: { values: [{ int64Value: "-1" }] } }, + }, + ast: "[\n -1^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#", + checkedAst: "[\n -1~int\n]~list(int)", + type: "list(int)", + }, + { + original: { + name: "self_eval_map_singleitem", + expr: '{"k":"v"}', + value: { + mapValue: { + entries: [ + { + key: { stringValue: "k" }, + value: { stringValue: "v" }, + }, + ], + }, + }, + }, + ast: '{\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: '{\n "k"~string:"v"~string\n}~map(string, string)', + type: "map(string, string)", + }, + { + original: { + name: "self_eval_bool_true", + expr: "true", + value: { boolValue: true }, + }, + ast: "true^#*expr.Constant_BoolValue#", + checkedAst: "true~bool", + type: "bool", + }, + { + original: { + name: "self_eval_int_hex", + expr: "0x55555555", + value: { int64Value: "1431655765" }, + }, + ast: "1431655765^#*expr.Constant_Int64Value#", + checkedAst: "1431655765~int", + type: "int", + }, + { + original: { + name: "self_eval_int_hex_negative", + expr: "-0x55555555", + value: { int64Value: "-1431655765" }, + }, + ast: "-1431655765^#*expr.Constant_Int64Value#", + checkedAst: "-1431655765~int", + type: "int", + }, + { + original: { + name: "self_eval_uint_hex", + expr: "0x55555555u", + value: { uint64Value: "1431655765" }, + }, + ast: "1431655765u^#*expr.Constant_Uint64Value#", + checkedAst: "1431655765u~uint", + type: "uint", + }, + { + original: { + name: "self_eval_uint_alias_hex", + expr: "0x55555555U", + value: { uint64Value: "1431655765" }, + }, + ast: "1431655765u^#*expr.Constant_Uint64Value#", + checkedAst: "1431655765u~uint", + type: "uint", + }, + { + original: { + name: "self_eval_unicode_escape_four", + expr: '"\\u270c"', + value: { stringValue: "✌" }, + }, + ast: '"✌"^#*expr.Constant_StringValue#', + checkedAst: '"✌"~string', + type: "string", + }, + { + original: { + name: "self_eval_unicode_escape_eight", + expr: '"\\U0001f431"', + value: { stringValue: "🐱" }, + }, + ast: '"🐱"^#*expr.Constant_StringValue#', + checkedAst: '"🐱"~string', + type: "string", + }, + { + original: { + name: "self_eval_ascii_escape_seq", + expr: '"\\a\\b\\f\\n\\r\\t\\v\\"\\\'\\\\"', + value: { stringValue: "\u0007\b\f\n\r\t\u000b\"'\\" }, + }, + ast: '"\\a\\b\\f\\n\\r\\t\\v\\"\'\\\\"^#*expr.Constant_StringValue#', + checkedAst: '"\\a\\b\\f\\n\\r\\t\\v\\"\'\\\\"~string', + type: "string", + }, + ], + }, + { + name: "variables", + tests: [ + { + original: { + name: "self_eval_bound_lookup", + expr: "x", + typeEnv: [ + { name: "x", ident: { type: { primitive: "INT64" } } }, + ], + bindings: { x: { value: { int64Value: "123" } } }, + value: { int64Value: "123" }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~int^x", + type: "int", + }, + { + original: { + name: "self_eval_unbound_lookup", + description: + "An unbound variable should be marked as an error during execution. See google/cel-go#154", + expr: "x", + disableCheck: true, + evalError: { + errors: [ + { + message: "undeclared reference to 'x' (in container '')", + }, + ], + }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'x' (in container '')\n | x\n | ^", + }, + { + original: { + name: "unbound_is_runtime_error", + description: + "Make sure we can short-circuit around an unbound variable.", + expr: "x || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n x^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'x' (in container '')\n | x || true\n | ^", + }, + ], + }, + { + name: "functions", + tests: [ + { + original: { + name: "binop", + expr: "1 + 1", + value: { int64Value: "2" }, + }, + ast: "_+_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n 1~int,\n 1~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "unbound", + expr: "f_unknown(17)", + disableCheck: true, + evalError: { errors: [{ message: "unbound function" }] }, + }, + ast: "f_unknown(\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:10: undeclared reference to 'f_unknown' (in container '')\n | f_unknown(17)\n | .........^", + }, + { + original: { + name: "unbound_is_runtime_error", + expr: "f_unknown(17) || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n f_unknown(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:10: undeclared reference to 'f_unknown' (in container '')\n | f_unknown(17) || true\n | .........^", + }, + ], + }, + { + name: "reserved_const", + tests: [ + { + original: { + name: "false", + expr: "false", + typeEnv: [ + { name: "false", ident: { type: { primitive: "BOOL" } } }, + ], + bindings: { false: { value: { boolValue: true } } }, + value: { boolValue: false }, + }, + ast: "false^#*expr.Constant_BoolValue#", + checkedAst: "false~bool", + type: "bool", + }, + { + original: { + name: "true", + expr: "true", + typeEnv: [ + { name: "true", ident: { type: { primitive: "BOOL" } } }, + ], + bindings: { true: { value: { boolValue: false } } }, + value: { boolValue: true }, + }, + ast: "true^#*expr.Constant_BoolValue#", + checkedAst: "true~bool", + type: "bool", + }, + { + original: { + name: "null", + expr: "null", + typeEnv: [ + { name: "null", ident: { type: { primitive: "BOOL" } } }, + ], + bindings: { null: { value: { boolValue: true } } }, + value: { nullValue: null }, + }, + ast: "null^#*expr.Constant_NullValue#", + checkedAst: "null~null", + type: "null", + }, + ], + }, + ], + }, + { + name: "bindings_ext", + suites: [ + { + name: "bind", + tests: [ + { + original: { + name: "boolean_literal", + expr: "cel.bind(t, true, t)", + value: { boolValue: true }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.bind(\n t^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n t^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t~bool^t,\n // Result\n t~bool^t)~bool", + type: "bool", + }, + { + original: { + name: "string_concat", + expr: 'cel.bind(msg, "hello", msg + msg + msg)', + value: { stringValue: "hellohellohello" }, + }, + ast: 'cel^#*expr.Expr_IdentExpr#.bind(\n msg^#*expr.Expr_IdentExpr#,\n "hello"^#*expr.Constant_StringValue#,\n _+_(\n _+_(\n msg^#*expr.Expr_IdentExpr#,\n msg^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n msg,\n // Init\n "hello"~string,\n // LoopCondition\n false~bool,\n // LoopStep\n msg~string^msg,\n // Result\n _+_(\n _+_(\n msg~string^msg,\n msg~string^msg\n )~string^add_string,\n msg~string^msg\n )~string^add_string)~string', + type: "string", + }, + { + original: { + name: "bind_nested", + expr: "cel.bind(t1, true, cel.bind(t2, true, t1 \u0026\u0026 t2))", + value: { boolValue: true }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.bind(\n t1^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n cel^#*expr.Expr_IdentExpr#.bind(\n t2^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#,\n _\u0026\u0026_(\n t1^#*expr.Expr_IdentExpr#,\n t2^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t1,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t1~bool^t1,\n // Result\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n t2,\n // Init\n true~bool,\n // LoopCondition\n false~bool,\n // LoopStep\n t2~bool^t2,\n // Result\n _\u0026\u0026_(\n t1~bool^t1,\n t2~bool^t2\n )~bool^logical_and)~bool)~bool", + type: "bool", + }, + { + original: { + name: "macro_exists", + expr: "cel.bind(valid_elems, [1, 2, 3], [3, 4, 5].exists(e, e in valid_elems))", + value: { boolValue: true }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.bind(\n valid_elems^#*expr.Expr_IdentExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n @in(\n e^#*expr.Expr_IdentExpr#,\n valid_elems^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n valid_elems,\n // Init\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // LoopCondition\n false~bool,\n // LoopStep\n valid_elems~list(int)^valid_elems,\n // Result\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n @in(\n e~int^e,\n valid_elems~list(int)^valid_elems\n )~bool^in_list\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool)~bool", + type: "bool", + }, + { + original: { + name: "macro_not_exists", + expr: "cel.bind(valid_elems, [1, 2, 3], ![4, 5].exists(e, e in valid_elems))", + value: { boolValue: true }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.bind(\n valid_elems^#*expr.Expr_IdentExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n !_(\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n @in(\n e^#*expr.Expr_IdentExpr#,\n valid_elems^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "__comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n valid_elems,\n // Init\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // LoopCondition\n false~bool,\n // LoopStep\n valid_elems~list(int)^valid_elems,\n // Result\n !_(\n __comprehension__(\n // Variable\n e,\n // Target\n [\n 4~int,\n 5~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n @in(\n e~int^e,\n valid_elems~list(int)^valid_elems\n )~bool^in_list\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n )~bool^logical_not)~bool", + type: "bool", + }, + ], + }, + ], + }, + { + name: "block_ext", + suites: [ + { + name: "basic", + tests: [ + { + original: { + name: "int_add", + expr: "cel.block([1, cel.index(0) + 1, cel.index(1) + 1, cel.index(2) + 1], cel.index(3))", + value: { int64Value: "4" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n 1^#*expr.Constant_Int64Value#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n 1~int,\n _+_(\n @index0~dyn^@index0,\n 1~int\n )~int^add_int64,\n _+_(\n @index1~dyn^@index1,\n 1~int\n )~int^add_int64,\n _+_(\n @index2~dyn^@index2,\n 1~int\n )~int^add_int64\n ]~list(int),\n @index3~dyn^@index3\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "size_1", + expr: "cel.block([[1, 2], size(cel.index(0)), cel.index(1) + cel.index(1), cel.index(2) + 1], cel.index(3))", + value: { int64Value: "5" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index2~dyn^@index2,\n 1~int\n )~int^add_int64\n ]~list(dyn),\n @index3~dyn^@index3\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "size_2", + expr: "cel.block([[1, 2], size(cel.index(0)), 2 + cel.index(1), cel.index(2) + cel.index(1), cel.index(3) + 1], cel.index(4))", + value: { int64Value: "7" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n 2~int,\n @index1~dyn^@index1\n )~int^add_int64,\n _+_(\n @index2~dyn^@index2,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index3~dyn^@index3,\n 1~int\n )~int^add_int64\n ]~list(dyn),\n @index4~dyn^@index4\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "size_3", + expr: "cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), cel.index(1) + cel.index(1), cel.index(4) + cel.index(3), cel.index(5) + cel.index(3)], cel.index(6))", + value: { int64Value: "6" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n [\n 0~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index2~dyn^@index2\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index5~dyn^@index5,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index6~dyn^@index6\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "size_4", + expr: "cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), [1, 2, 3], size(cel.index(4)), 5 + cel.index(1), cel.index(6) + cel.index(1), cel.index(7) + cel.index(3), cel.index(8) + cel.index(3), cel.index(9) + cel.index(5), cel.index(10) + cel.index(5)], cel.index(11))", + value: { int64Value: "17" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n size(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 5^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n [\n 0~int\n ]~list(int),\n size(\n @index0~dyn^@index0\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int\n ]~list(int),\n size(\n @index2~dyn^@index2\n )~int^size_bytes|size_list|size_map|size_string,\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n size(\n @index4~dyn^@index4\n )~int^size_bytes|size_list|size_map|size_string,\n _+_(\n 5~int,\n @index1~dyn^@index1\n )~int^add_int64,\n _+_(\n @index6~dyn^@index6,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index7~dyn^@index7,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index8~dyn^@index8,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index9~dyn^@index9,\n @index5~dyn^@index5\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index10~dyn^@index10,\n @index5~dyn^@index5\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index11~dyn^@index11\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "timestamp", + expr: "cel.block([timestamp(1000000000), int(cel.index(0)), timestamp(cel.index(1)), cel.index(2).getFullYear(), timestamp(50), int(cel.index(4)), timestamp(cel.index(5)), timestamp(200), int(cel.index(7)), timestamp(cel.index(8)), cel.index(9).getFullYear(), timestamp(75), int(cel.index(11)), timestamp(cel.index(12)), cel.index(13).getFullYear(), cel.index(3) + cel.index(14), cel.index(6).getFullYear(), cel.index(15) + cel.index(16), cel.index(17) + cel.index(3), cel.index(6).getSeconds(), cel.index(18) + cel.index(19), cel.index(20) + cel.index(10), cel.index(21) + cel.index(10), cel.index(13).getMinutes(), cel.index(22) + cel.index(23), cel.index(24) + cel.index(3)], cel.index(25))", + value: { int64Value: "13934" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n timestamp(\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n 200^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n timestamp(\n 75^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n int(\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 14^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 16^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 18^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 19^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 21^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 23^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp,\n int(\n @index0~dyn^@index0\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index1~dyn^@index1\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index2~dyn^@index2.getFullYear()~int^timestamp_to_year,\n timestamp(\n 50~int\n )~timestamp^int64_to_timestamp,\n int(\n @index4~dyn^@index4\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index5~dyn^@index5\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n timestamp(\n 200~int\n )~timestamp^int64_to_timestamp,\n int(\n @index7~dyn^@index7\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index8~dyn^@index8\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index9~dyn^@index9.getFullYear()~int^timestamp_to_year,\n timestamp(\n 75~int\n )~timestamp^int64_to_timestamp,\n int(\n @index11~dyn^@index11\n )~int^double_to_int64|duration_to_int64|int64_to_int64|string_to_int64|timestamp_to_int64|uint64_to_int64,\n timestamp(\n @index12~dyn^@index12\n )~timestamp^int64_to_timestamp|string_to_timestamp|timestamp_to_timestamp,\n @index13~dyn^@index13.getFullYear()~int^timestamp_to_year,\n _+_(\n @index3~dyn^@index3,\n @index14~dyn^@index14\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index6~dyn^@index6.getFullYear()~int^timestamp_to_year,\n _+_(\n @index15~dyn^@index15,\n @index16~dyn^@index16\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index17~dyn^@index17,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index6~dyn^@index6.getSeconds()~int^duration_to_seconds|timestamp_to_seconds,\n _+_(\n @index18~dyn^@index18,\n @index19~dyn^@index19\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index20~dyn^@index20,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index21~dyn^@index21,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index13~dyn^@index13.getMinutes()~int^duration_to_minutes|timestamp_to_minutes,\n _+_(\n @index22~dyn^@index22,\n @index23~dyn^@index23\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index24~dyn^@index24,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index25~dyn^@index25\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "map_index", + expr: 'cel.block([{"a": 2}, cel.index(0)["a"], cel.index(1) * cel.index(1), cel.index(1) + cel.index(2)], cel.index(3))', + value: { int64Value: "6" }, + }, + ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n "a"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "a"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'cel.@block(\n [\n {\n "a"~string:2~int\n }~map(string, int),\n _[_](\n @index0~dyn^@index0,\n "a"~string\n )~dyn^index_map|optional_map_index_value,\n _*_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~dyn^multiply_double|multiply_int64|multiply_uint64,\n _+_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index3~dyn^@index3\n)~dyn^cel_block_list', + type: "dyn", + }, + { + original: { + name: "nested_map_construction", + expr: 'cel.block([{"b": 1}, {"e": cel.index(0)}], {"a": cel.index(0), "c": cel.index(0), "d": cel.index(1), "e": cel.index(1)})', + value: { + mapValue: { + entries: [ + { + key: { stringValue: "a" }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "b" }, + value: { int64Value: "1" }, + }, + ], + }, + }, + }, + { + key: { stringValue: "c" }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "b" }, + value: { int64Value: "1" }, + }, + ], + }, + }, + }, + { + key: { stringValue: "d" }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "e" }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "b" }, + value: { int64Value: "1" }, + }, + ], + }, + }, + }, + ], + }, + }, + }, + { + key: { stringValue: "e" }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "e" }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "b" }, + value: { int64Value: "1" }, + }, + ], + }, + }, + }, + ], + }, + }, + }, + ], + }, + }, + }, + ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n "b"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "e"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#,\n {\n "a"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n "c"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n "d"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n "e"^#*expr.Constant_StringValue#:cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'cel.@block(\n [\n {\n "b"~string:1~int\n }~map(string, int),\n {\n "e"~string:@index0~dyn^@index0\n }~map(string, dyn)\n ]~list(map(string, dyn)),\n {\n "a"~string:@index0~dyn^@index0,\n "c"~string:@index0~dyn^@index0,\n "d"~string:@index1~dyn^@index1,\n "e"~string:@index1~dyn^@index1\n }~map(string, dyn)\n)~map(string, dyn)^cel_block_list', + type: "map(string, dyn)", + }, + { + original: { + name: "nested_list_construction", + expr: "cel.block([[1, 2, 3, 4], [1, 2], [cel.index(1), cel.index(0)]], [1, cel.index(0), 2, cel.index(0), 5, cel.index(0), 7, cel.index(2), cel.index(1)])", + value: { + listValue: { + values: [ + { int64Value: "1" }, + { + listValue: { + values: [ + { int64Value: "1" }, + { int64Value: "2" }, + { int64Value: "3" }, + { int64Value: "4" }, + ], + }, + }, + { int64Value: "2" }, + { + listValue: { + values: [ + { int64Value: "1" }, + { int64Value: "2" }, + { int64Value: "3" }, + { int64Value: "4" }, + ], + }, + }, + { int64Value: "5" }, + { + listValue: { + values: [ + { int64Value: "1" }, + { int64Value: "2" }, + { int64Value: "3" }, + { int64Value: "4" }, + ], + }, + }, + { int64Value: "7" }, + { + listValue: { + values: [ + { + listValue: { + values: [ + { int64Value: "1" }, + { int64Value: "2" }, + ], + }, + }, + { + listValue: { + values: [ + { int64Value: "1" }, + { int64Value: "2" }, + { int64Value: "3" }, + { int64Value: "4" }, + ], + }, + }, + ], + }, + }, + { + listValue: { + values: [{ int64Value: "1" }, { int64Value: "2" }], + }, + }, + ], + }, + }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n [\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n [\n 1~int,\n 2~int\n ]~list(int),\n [\n @index1~dyn^@index1,\n @index0~dyn^@index0\n ]~list(dyn)\n ]~list(list(dyn)),\n [\n 1~int,\n @index0~dyn^@index0,\n 2~int,\n @index0~dyn^@index0,\n 5~int,\n @index0~dyn^@index0,\n 7~int,\n @index2~dyn^@index2,\n @index1~dyn^@index1\n ]~list(dyn)\n)~list(dyn)^cel_block_list", + type: "list(dyn)", + }, + { + original: { + name: "select", + expr: "cel.block([msg.single_int64, cel.index(0) + cel.index(0)], cel.index(1))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "6" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _+_(\n @index0~dyn^@index0,\n @index0~dyn^@index0\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index1~dyn^@index1\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "select_nested_1", + expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, cel.index(1).single_int32, cel.index(2) + cel.index(3), cel.index(4) + cel.index(2), msg.single_int64, cel.index(5) + cel.index(6), cel.index(1).oneof_type, cel.index(8).payload, cel.index(9).single_int64, cel.index(7) + cel.index(10)], cel.index(11))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "31" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int32^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index1~dyn^@index1.single_int32~dyn,\n _+_(\n @index2~dyn^@index2,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index2~dyn^@index2\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _+_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n @index1~dyn^@index1.oneof_type~dyn,\n @index8~dyn^@index8.payload~dyn,\n @index9~dyn^@index9.single_int64~dyn,\n _+_(\n @index7~dyn^@index7,\n @index10~dyn^@index10\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index11~dyn^@index11\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "select_nested_2", + expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).oneof_type, cel.index(2).payload, cel.index(3).oneof_type, cel.index(4).payload, cel.index(5).oneof_type, cel.index(6).payload, cel.index(7).single_bool, true || cel.index(8), cel.index(4).child, cel.index(10).child, cel.index(11).payload, cel.index(12).single_bool], cel.index(9) || cel.index(13))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { boolValue: true }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_bool^#*expr.Expr_SelectExpr#,\n _||_(\n true^#*expr.Constant_BoolValue#,\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.child^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.child^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_bool^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n _||_(\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.oneof_type~dyn,\n @index2~dyn^@index2.payload~dyn,\n @index3~dyn^@index3.oneof_type~dyn,\n @index4~dyn^@index4.payload~dyn,\n @index5~dyn^@index5.oneof_type~dyn,\n @index6~dyn^@index6.payload~dyn,\n @index7~dyn^@index7.single_bool~dyn,\n _||_(\n true~bool,\n @index8~dyn^@index8\n )~bool^logical_or,\n @index4~dyn^@index4.child~dyn,\n @index10~dyn^@index10.child~dyn,\n @index11~dyn^@index11.payload~dyn,\n @index12~dyn^@index12.single_bool~dyn\n ]~list(dyn),\n _||_(\n @index9~dyn^@index9,\n @index13~dyn^@index13\n )~bool^logical_or\n)~bool^cel_block_list", + type: "bool", + }, + { + original: { + name: "select_nested_message_map_index_1", + expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[1], cel.index(3) + cel.index(3), cel.index(4) + cel.index(3)], cel.index(5))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "15" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_int32_int64^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_int32_int64~dyn,\n _[_](\n @index2~dyn^@index2,\n 1~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index3~dyn^@index3,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _+_(\n @index4~dyn^@index4,\n @index3~dyn^@index3\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "select_nested_message_map_index_2", + expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[0], cel.index(2)[1], cel.index(3) + cel.index(4), cel.index(2)[2], cel.index(5) + cel.index(6)], cel.index(7))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "8" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_int32_int64^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_int32_int64~dyn,\n _[_](\n @index2~dyn^@index2,\n 0~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _[_](\n @index2~dyn^@index2,\n 1~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index3~dyn^@index3,\n @index4~dyn^@index4\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _[_](\n @index2~dyn^@index2,\n 2~int\n )~dyn^index_list|index_map|optional_list_index_int|optional_map_index_value,\n _+_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64\n ]~list(dyn),\n @index7~dyn^@index7\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "ternary", + expr: "cel.block([msg.single_int64, cel.index(0) \u003e 0, cel.index(1) ? cel.index(0) : 0], cel.index(2))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "3" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n _\u003e_(\n @index0~dyn^@index0,\n 0~int\n )~bool^greater_int64,\n _?_:_(\n @index1~dyn^@index1,\n @index0~dyn^@index0,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index2~dyn^@index2\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "nested_ternary", + expr: "cel.block([msg.single_int64, msg.single_int32, cel.index(0) \u003e 0, cel.index(1) \u003e 0, cel.index(0) + cel.index(1), cel.index(3) ? cel.index(4) : 0, cel.index(2) ? cel.index(5) : 0], cel.index(6))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "8" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int32~int,\n _\u003e_(\n @index0~dyn^@index0,\n 0~int\n )~bool^greater_int64,\n _\u003e_(\n @index1~dyn^@index1,\n 0~int\n )~bool^greater_int64,\n _+_(\n @index0~dyn^@index0,\n @index1~dyn^@index1\n )~dyn^add_bytes|add_double|add_duration_duration|add_duration_timestamp|add_int64|add_list|add_string|add_timestamp_duration|add_uint64,\n _?_:_(\n @index3~dyn^@index3,\n @index4~dyn^@index4,\n 0~int\n )~dyn^conditional,\n _?_:_(\n @index2~dyn^@index2,\n @index5~dyn^@index5,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index6~dyn^@index6\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "multiple_macros_1", + expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))", + value: { int64Value: "4" }, + }, + error: + "ERROR: multiple_macros_1:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .................................^\nERROR: multiple_macros_1:1:110: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .............................................................................................................^", + }, + { + original: { + name: "multiple_macros_2", + expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))", + value: { + listValue: { + values: [ + { boolValue: true }, + { boolValue: true }, + { boolValue: true }, + { boolValue: true }, + ], + }, + }, + }, + error: + "ERROR: multiple_macros_2:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .................................^\nERROR: multiple_macros_2:1:106: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))\n | .........................................................................................................^", + }, + { + original: { + name: "multiple_macros_3", + expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))", + value: { boolValue: false }, + }, + error: + "ERROR: multiple_macros_3:1:34: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | .................................^\nERROR: multiple_macros_3:1:121: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | ........................................................................................................................^\nERROR: multiple_macros_3:1:177: argument must be a simple name\n | cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 0)], cel.index(0) \u0026\u0026 cel.index(0) \u0026\u0026 [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1) \u0026\u0026 [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) \u003e 1))\n | ................................................................................................................................................................................^", + }, + { + original: { + name: "nested_macros_1", + expr: "cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))", + value: { + listValue: { + values: [ + { + listValue: { + values: [ + { int64Value: "2" }, + { int64Value: "3" }, + { int64Value: "4" }, + ], + }, + }, + { + listValue: { + values: [ + { int64Value: "2" }, + { int64Value: "3" }, + { int64Value: "4" }, + ], + }, + }, + { + listValue: { + values: [ + { int64Value: "2" }, + { int64Value: "3" }, + { int64Value: "4" }, + ], + }, + }, + ], + }, + }, + }, + error: + "ERROR: nested_macros_1:1:52: argument is not an identifier\n | cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))\n | ...................................................^\nERROR: nested_macros_1:1:88: argument is not an identifier\n | cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))\n | .......................................................................................^", + }, + { + original: { + name: "nested_macros_2", + expr: "[1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))", + value: { + listValue: { + values: [ + { listValue: { values: [{ int64Value: "1" }] } }, + { listValue: { values: [{ int64Value: "2" }] } }, + ], + }, + }, + }, + error: + "ERROR: nested_macros_2:1:23: argument is not an identifier\n | [1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))\n | ......................^\nERROR: nested_macros_2:1:59: argument is not an identifier\n | [1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))\n | ..........................................................^", + }, + { + original: { + name: "adjacent_macros", + expr: "cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))", + value: { boolValue: true }, + }, + error: + "ERROR: adjacent_macros:1:51: argument is not an identifier\n | cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))\n | ..................................................^\nERROR: adjacent_macros:1:87: argument is not an identifier\n | cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))\n | ......................................................................................^", + }, + { + original: { + name: "macro_shadowed_variable_1", + expr: "cel.block([x - 1, cel.index(0) \u003e 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 \u003e 3) || cel.index(1))", + typeEnv: [ + { name: "x", ident: { type: { primitive: "INT64" } } }, + ], + bindings: { x: { value: { int64Value: "5" } } }, + value: { boolValue: true }, + }, + error: + "ERROR: macro_shadowed_variable_1:1:90: argument must be a simple name\n | cel.block([x - 1, cel.index(0) \u003e 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 \u003e 3) || cel.index(1))\n | .........................................................................................^", + }, + { + original: { + name: "macro_shadowed_variable_2", + expr: "['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])", + typeEnv: [ + { name: "x", ident: { type: { primitive: "INT64" } } }, + ], + bindings: { x: { value: { int64Value: "5" } } }, + value: { + listValue: { + values: [ + { + listValue: { + values: [ + { + listValue: { + values: [ + { stringValue: "foofoo" }, + { stringValue: "foofoo" }, + { stringValue: "foofoo" }, + { stringValue: "foofoo" }, + ], + }, + }, + { + listValue: { + values: [ + { stringValue: "foofoo" }, + { stringValue: "foofoo" }, + { stringValue: "foofoo" }, + { stringValue: "foofoo" }, + ], + }, + }, + ], + }, + }, + { + listValue: { + values: [ + { + listValue: { + values: [ + { stringValue: "barbar" }, + { stringValue: "barbar" }, + { stringValue: "barbar" }, + { stringValue: "barbar" }, + ], + }, + }, + { + listValue: { + values: [ + { stringValue: "barbar" }, + { stringValue: "barbar" }, + { stringValue: "barbar" }, + { stringValue: "barbar" }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + }, + error: + "ERROR: macro_shadowed_variable_2:1:31: argument is not an identifier\n | ['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])\n | ..............................^\nERROR: macro_shadowed_variable_2:1:134: argument is not an identifier\n | ['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])\n | .....................................................................................................................................^", + }, + { + original: { + name: "inclusion_list", + expr: "cel.block([[1, 2, 3], 1 in cel.index(0), 2 in cel.index(0), cel.index(1) \u0026\u0026 cel.index(2), [3, cel.index(0)], 3 in cel.index(4), cel.index(5) \u0026\u0026 cel.index(1)], cel.index(3) \u0026\u0026 cel.index(6))", + value: { boolValue: true }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 1^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 3^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n @in(\n 1~int,\n @index0~dyn^@index0\n )~bool^in_list|in_map,\n @in(\n 2~int,\n @index0~dyn^@index0\n )~bool^in_list|in_map,\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~bool^logical_and,\n [\n 3~int,\n @index0~dyn^@index0\n ]~list(dyn),\n @in(\n 3~int,\n @index4~dyn^@index4\n )~bool^in_list|in_map,\n _\u0026\u0026_(\n @index5~dyn^@index5,\n @index1~dyn^@index1\n )~bool^logical_and\n ]~list(dyn),\n _\u0026\u0026_(\n @index3~dyn^@index3,\n @index6~dyn^@index6\n )~bool^logical_and\n)~bool^cel_block_list", + type: "bool", + }, + { + original: { + name: "inclusion_map", + expr: 'cel.block([{true: false}, {"a": 1, 2: cel.index(0), 3: cel.index(0)}], 2 in cel.index(1))', + value: { boolValue: true }, + }, + ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n true^#*expr.Constant_BoolValue#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#,\n @in(\n 2^#*expr.Constant_Int64Value#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'cel.@block(\n [\n {\n true~bool:false~bool\n }~map(bool, bool),\n {\n "a"~string:1~int,\n 2~int:@index0~dyn^@index0,\n 3~int:@index0~dyn^@index0\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn)),\n @in(\n 2~int,\n @index1~dyn^@index1\n )~bool^in_list|in_map\n)~bool^cel_block_list', + type: "bool", + }, + { + original: { + name: "presence_test", + expr: 'cel.block([{"a": true}, has(cel.index(0).a), cel.index(0)["a"]], cel.index(1) \u0026\u0026 cel.index(2))', + value: { boolValue: true }, + }, + ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n "a"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.a~test-only~^#*expr.Expr_SelectExpr#,\n _[_](\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "a"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'cel.@block(\n [\n {\n "a"~string:true~bool\n }~map(string, bool),\n @index0~dyn^@index0.a~test-only~~bool,\n _[_](\n @index0~dyn^@index0,\n "a"~string\n )~dyn^index_map|optional_map_index_value\n ]~list(dyn),\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index2~dyn^@index2\n )~bool^logical_and\n)~bool^cel_block_list', + type: "bool", + }, + { + original: { + name: "presence_test_2", + expr: 'cel.block([{"a": true}, has(cel.index(0).a)], cel.index(1) \u0026\u0026 cel.index(1))', + value: { boolValue: true }, + }, + ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n {\n "a"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.a~test-only~^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'cel.@block(\n [\n {\n "a"~string:true~bool\n }~map(string, bool),\n @index0~dyn^@index0.a~test-only~~bool\n ]~list(dyn),\n _\u0026\u0026_(\n @index1~dyn^@index1,\n @index1~dyn^@index1\n )~bool^logical_and\n)~bool^cel_block_list', + type: "bool", + }, + { + original: { + name: "presence_test_with_ternary", + expr: "cel.block([msg.oneof_type, has(cel.index(0).payload), cel.index(0).payload, cel.index(2).single_int64, cel.index(1) ? cel.index(3) : 0], cel.index(4))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "10" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~test-only~~bool,\n @index0~dyn^@index0.payload~dyn,\n @index2~dyn^@index2.single_int64~dyn,\n _?_:_(\n @index1~dyn^@index1,\n @index3~dyn^@index3,\n 0~int\n )~dyn^conditional\n ]~list(dyn),\n @index4~dyn^@index4\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "presence_test_with_ternary_2", + expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(0).payload), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "10" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index0~dyn^@index0.payload~test-only~~bool,\n _*_(\n @index2~dyn^@index2,\n 0~int\n )~int^multiply_int64,\n _?_:_(\n @index3~dyn^@index3,\n @index2~dyn^@index2,\n @index4~dyn^@index4\n )~dyn^conditional\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "presence_test_with_ternary_3", + expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(1).single_int64), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { int64Value: "10" }, + }, + ast: "cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64~test-only~^#*expr.Expr_SelectExpr#,\n _*_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.single_int64~dyn,\n @index1~dyn^@index1.single_int64~test-only~~bool,\n _*_(\n @index2~dyn^@index2,\n 0~int\n )~int^multiply_int64,\n _?_:_(\n @index3~dyn^@index3,\n @index2~dyn^@index2,\n @index4~dyn^@index4\n )~dyn^conditional\n ]~list(dyn),\n @index5~dyn^@index5\n)~dyn^cel_block_list", + type: "dyn", + }, + { + original: { + name: "presence_test_with_ternary_nested", + expr: 'cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_string_string, has(msg.oneof_type), has(cel.index(0).payload), cel.index(3) \u0026\u0026 cel.index(4), has(cel.index(1).single_int64), cel.index(5) \u0026\u0026 cel.index(6), has(cel.index(1).map_string_string), has(cel.index(2).key), cel.index(8) \u0026\u0026 cel.index(9), cel.index(2).key, cel.index(11) == "A", cel.index(10) ? cel.index(12) : false], cel.index(7) ? cel.index(13) : false)', + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 5, + singleInt64: "3", + oneofType: { + payload: { + singleInt32: 8, + singleInt64: "10", + mapInt32Int64: { "0": "1", "1": "5", "2": "2" }, + mapStringString: { key: "A" }, + }, + }, + }, + }, + }, + }, + value: { boolValue: true }, + }, + ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n msg^#*expr.Expr_IdentExpr#.oneof_type^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_string_string^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.oneof_type~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.payload~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.single_int64~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.key~test-only~^#*expr.Expr_SelectExpr#,\n _\u0026\u0026_(\n cel^#*expr.Expr_IdentExpr#.index(\n 8^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 9^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.key^#*expr.Expr_SelectExpr#,\n _==_(\n cel^#*expr.Expr_IdentExpr#.index(\n 11^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "A"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 12^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n _?_:_(\n cel^#*expr.Expr_IdentExpr#.index(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 13^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'cel.@block(\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~cel.expr.conformance.proto3.NestedTestAllTypes,\n @index0~dyn^@index0.payload~dyn,\n @index1~dyn^@index1.map_string_string~dyn,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.oneof_type~test-only~~bool,\n @index0~dyn^@index0.payload~test-only~~bool,\n _\u0026\u0026_(\n @index3~dyn^@index3,\n @index4~dyn^@index4\n )~bool^logical_and,\n @index1~dyn^@index1.single_int64~test-only~~bool,\n _\u0026\u0026_(\n @index5~dyn^@index5,\n @index6~dyn^@index6\n )~bool^logical_and,\n @index1~dyn^@index1.map_string_string~test-only~~bool,\n @index2~dyn^@index2.key~test-only~~bool,\n _\u0026\u0026_(\n @index8~dyn^@index8,\n @index9~dyn^@index9\n )~bool^logical_and,\n @index2~dyn^@index2.key~dyn,\n _==_(\n @index11~dyn^@index11,\n "A"~string\n )~bool^equals,\n _?_:_(\n @index10~dyn^@index10,\n @index12~dyn^@index12,\n false~bool\n )~dyn^conditional\n ]~list(dyn),\n _?_:_(\n @index7~dyn^@index7,\n @index13~dyn^@index13,\n false~bool\n )~dyn^conditional\n)~dyn^cel_block_list', + type: "dyn", + }, + { + original: { + name: "optional_list", + expr: "cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))", + typeEnv: [ + { name: "opt_x", ident: { type: { primitive: "INT64" } } }, + ], + bindings: { opt_x: { value: { int64Value: "5" } } }, + value: { boolValue: true }, + }, + error: + "ERROR: optional_list:1:30: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | .............................^\nERROR: optional_list:1:45: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | ............................................^\nERROR: optional_list:1:77: unsupported syntax '?'\n | cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))\n | ............................................................................^", + }, + { + original: { + name: "optional_map", + expr: 'cel.block([optional.of("hello"), {?"hello": cel.index(0)}, cel.index(1)["hello"], cel.index(2) + cel.index(2)], cel.index(3) == "hellohello")', + value: { boolValue: true }, + }, + error: + 'ERROR: optional_map:1:35: unsupported syntax \'?\'\n | cel.block([optional.of("hello"), {?"hello": cel.index(0)}, cel.index(1)["hello"], cel.index(2) + cel.index(2)], cel.index(3) == "hellohello")\n | ..................................^', + }, + { + original: { + name: "optional_map_chained", + expr: 'cel.block([{"key": "test"}, optional.of("test"), {?"key": cel.index(1)}, cel.index(2)[?"bogus"], cel.index(0)[?"bogus"], cel.index(3).or(cel.index(4)), cel.index(0)["key"], cel.index(5).orValue(cel.index(6))], cel.index(7))', + value: { stringValue: "test" }, + }, + error: + 'ERROR: optional_map_chained:1:51: unsupported syntax \'?\'\n | cel.block([{"key": "test"}, optional.of("test"), {?"key": cel.index(1)}, cel.index(2)[?"bogus"], cel.index(0)[?"bogus"], cel.index(3).or(cel.index(4)), cel.index(0)["key"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | ..................................................^\nERROR: optional_map_chained:1:86: unsupported syntax \'[?\'\n | cel.block([{"key": "test"}, optional.of("test"), {?"key": cel.index(1)}, cel.index(2)[?"bogus"], cel.index(0)[?"bogus"], cel.index(3).or(cel.index(4)), cel.index(0)["key"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | .....................................................................................^\nERROR: optional_map_chained:1:110: unsupported syntax \'[?\'\n | cel.block([{"key": "test"}, optional.of("test"), {?"key": cel.index(1)}, cel.index(2)[?"bogus"], cel.index(0)[?"bogus"], cel.index(3).or(cel.index(4)), cel.index(0)["key"], cel.index(5).orValue(cel.index(6))], cel.index(7))\n | .............................................................................................................^', + }, + { + original: { + name: "optional_message", + expr: "cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))", + container: "cel.expr.conformance.proto3", + value: { int64Value: "5" }, + }, + error: + "ERROR: optional_message:1:69: unsupported syntax '?'\n | cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))\n | ....................................................................^\nERROR: optional_message:1:98: unsupported syntax '?'\n | cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))\n | .................................................................................................^", + }, + { + original: { + name: "call", + expr: 'cel.block(["h" + "e", cel.index(0) + "l", cel.index(1) + "l", cel.index(2) + "o", cel.index(3) + " world"], cel.index(4).matches(cel.index(3)))', + value: { boolValue: true }, + }, + ast: 'cel^#*expr.Expr_IdentExpr#.block(\n [\n _+_(\n "h"^#*expr.Constant_StringValue#,\n "e"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "l"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "l"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "o"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n " world"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n cel^#*expr.Expr_IdentExpr#.index(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.matches(\n cel^#*expr.Expr_IdentExpr#.index(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'cel.@block(\n [\n _+_(\n "h"~string,\n "e"~string\n )~string^add_string,\n _+_(\n @index0~dyn^@index0,\n "l"~string\n )~string^add_string,\n _+_(\n @index1~dyn^@index1,\n "l"~string\n )~string^add_string,\n _+_(\n @index2~dyn^@index2,\n "o"~string\n )~string^add_string,\n _+_(\n @index3~dyn^@index3,\n " world"~string\n )~string^add_string\n ]~list(string),\n @index4~dyn^@index4.matches(\n @index3~dyn^@index3\n )~bool^matches_string\n)~bool^cel_block_list', + type: "bool", + }, + ], + }, + ], + }, + { + name: "comparisons", + suites: [ + { + name: "eq_literal", + tests: [ + { + original: { + name: "eq_int", + expr: "1 == 1", + value: { boolValue: true }, + }, + ast: "_==_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n 1~int,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_int", + expr: "-1 == 1", + value: { boolValue: false }, + }, + ast: "_==_(\n -1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n -1~int,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int_uint", + expr: "dyn(1) == 1u", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_int_uint", + expr: "dyn(2) == 1u", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int_double", + expr: "dyn(1) == 1.0", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_int_double", + expr: "dyn(2) == 1.0", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint", + expr: "2u == 2u", + value: { boolValue: true }, + }, + ast: "_==_(\n 2u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n 2u~uint,\n 2u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_uint", + expr: "1u == 2u", + value: { boolValue: false }, + }, + ast: "_==_(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n 1u~uint,\n 2u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint_int", + expr: "dyn(1u) == 1", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_uint_int", + expr: "dyn(2u) == 1", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint_double", + expr: "dyn(1u) == 1.0", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_uint_double", + expr: "dyn(2u) == 1.0", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_double", + expr: "1.0 == 1.0e+0", + value: { boolValue: true }, + }, + ast: "_==_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n 1~double,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_double", + expr: "-1.0 == 1.0", + value: { boolValue: false }, + }, + ast: "_==_(\n -1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n -1~double,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_double_nan", + expr: "0.0/0.0 == 0.0/0.0", + value: { boolValue: false }, + }, + ast: "_==_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_int_double_nan", + expr: "dyn(1) == 0.0/0.0", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_uint_double_nan", + expr: "dyn(1u) == 0.0/0.0", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_double_int", + expr: "dyn(1.0) == 1", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_double_int", + expr: "dyn(2.0) == 1", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_double_uint", + expr: "dyn(1.0) == 1u", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_double_uint", + expr: "dyn(2.0) == 1u", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_string", + expr: "'' == \"\"", + value: { boolValue: true }, + }, + ast: '_==_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: '_==_(\n ""~string,\n ""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_string", + expr: "'a' == 'b'", + value: { boolValue: false }, + }, + ast: '_==_(\n "a"^#*expr.Constant_StringValue#,\n "b"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: '_==_(\n "a"~string,\n "b"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_raw_string", + expr: "'abc' == r'abc'", + value: { boolValue: true }, + }, + ast: '_==_(\n "abc"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "abc"~string,\n "abc"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_string_case", + expr: "'abc' == 'ABC'", + value: { boolValue: false }, + }, + ast: '_==_(\n "abc"^#*expr.Constant_StringValue#,\n "ABC"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "abc"~string,\n "ABC"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_string_unicode", + expr: "'ίσος' == 'ίσος'", + value: { boolValue: true }, + }, + ast: '_==_(\n "ίσος"^#*expr.Constant_StringValue#,\n "ίσος"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ίσος"~string,\n "ίσος"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_string_unicode_ascii", + expr: "'a' == 'à'", + value: { boolValue: false }, + }, + ast: '_==_(\n "a"^#*expr.Constant_StringValue#,\n "à"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: '_==_(\n "a"~string,\n "à"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "no_string_normalization", + description: "Should not normalize Unicode.", + expr: "'Am\\u00E9lie' == 'Ame\\u0301lie'", + value: { boolValue: false }, + }, + ast: '_==_(\n "Amélie"^#*expr.Constant_StringValue#,\n "Amélie"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "Amélie"~string,\n "Amélie"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_null", + expr: "null == null", + value: { boolValue: true }, + }, + ast: "_==_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n null~null,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_bool", + expr: "true == true", + value: { boolValue: true }, + }, + ast: "_==_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n true~bool,\n true~bool\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_bool", + expr: "false == true", + value: { boolValue: false }, + }, + ast: "_==_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n false~bool,\n true~bool\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_bytes", + description: "Test bytes literal equality with encoding", + expr: "b'ÿ' == b'\\303\\277'", + value: { boolValue: true }, + }, + ast: '_==_(\n b"ÿ"^#*expr.Constant_BytesValue#,\n b"ÿ"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: '_==_(\n b"ÿ"~bytes,\n b"ÿ"~bytes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_bytes", + expr: "b'abc' == b'abcd'", + value: { boolValue: false }, + }, + ast: '_==_(\n b"abc"^#*expr.Constant_BytesValue#,\n b"abcd"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n b"abc"~bytes,\n b"abcd"~bytes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_list_empty", + expr: "[] == []", + value: { boolValue: true }, + }, + ast: "_==_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n []~list(dyn),\n []~list(dyn)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_list_null", + expr: "[null] == [null]", + value: { boolValue: true }, + }, + ast: "_==_(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n [\n null~null\n ]~list(null),\n [\n null~null\n ]~list(null)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_list_null", + expr: "['1', '2', null] == ['1', '2', '3']", + value: { boolValue: false }, + }, + ast: '_==_(\n [\n "1"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n "1"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#,\n "3"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n [\n "1"~string,\n "2"~string,\n null~null\n ]~list(dyn),\n [\n "1"~string,\n "2"~string,\n "3"~string\n ]~list(string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_list_numbers", + expr: "[1, 2, 3] == [1, 2, 3]", + value: { boolValue: true }, + }, + ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_list_mixed_type_numbers", + expr: "[1.0, 2.0, 3] == [1u, 2, 3u]", + value: { boolValue: true }, + }, + ast: "_==_(\n [\n 1^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n [\n 1~double,\n 2~double,\n 3~int\n ]~list(dyn),\n [\n 1u~uint,\n 2~int,\n 3u~uint\n ]~list(dyn)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_list_mixed_type_numbers", + expr: "[1.0, 2.1] == [1u, 2]", + value: { boolValue: false }, + }, + ast: "_==_(\n [\n 1^#*expr.Constant_DoubleValue#,\n 2.1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n [\n 1~double,\n 2.1~double\n ]~list(double),\n [\n 1u~uint,\n 2~int\n ]~list(dyn)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_list_order", + expr: "[1, 2, 3] == [1, 3, 2]", + value: { boolValue: false }, + }, + ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n [\n 1~int,\n 3~int,\n 2~int\n ]~list(int)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_list_string_case", + expr: "['case'] == ['cAse']", + value: { boolValue: false }, + }, + ast: '_==_(\n [\n "case"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n "cAse"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n [\n "case"~string\n ]~list(string),\n [\n "cAse"~string\n ]~list(string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_list_length", + expr: "['one'] == [2, 3]", + disableCheck: true, + value: { boolValue: false }, + }, + ast: '_==_(\n [\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_==_' applied to '(list(string), list(int))'\n | ['one'] == [2, 3]\n | ........^", + }, + { + original: { + name: "not_eq_list_false_vs_types", + expr: "[1, 'dos', 3] == [1, 2, 4]", + value: { boolValue: false }, + }, + ast: '_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n "dos"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n [\n 1~int,\n "dos"~string,\n 3~int\n ]~list(dyn),\n [\n 1~int,\n 2~int,\n 4~int\n ]~list(int)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_map_empty", + expr: "{} == {}", + value: { boolValue: true }, + }, + ast: "_==_(\n {}^#*expr.Expr_StructExpr#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n {}~map(dyn, dyn),\n {}~map(dyn, dyn)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_map_null", + expr: "{'k': null} == {'k': null}", + value: { boolValue: true }, + }, + ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k"~string:null~null\n }~map(string, null),\n {\n "k"~string:null~null\n }~map(string, null)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_map_null", + expr: "{'k': 1, 'j': 2} == {'k': 1, 'j': null}", + value: { boolValue: false }, + }, + ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "j"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "j"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k"~string:1~int,\n "j"~string:2~int\n }~map(string, int),\n {\n "k"~string:1~int,\n "j"~string:null~null\n }~map(string, dyn)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_map_onekey", + expr: "{'k':'v'} == {\"k\":\"v\"}", + value: { boolValue: true }, + }, + ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k"~string:"v"~string\n }~map(string, string),\n {\n "k"~string:"v"~string\n }~map(string, string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_map_double_value", + expr: "{'k':1.0} == {'k':1e+0}", + value: { boolValue: true }, + }, + ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k"~string:1~double\n }~map(string, double),\n {\n "k"~string:1~double\n }~map(string, double)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_map_mixed_type_numbers", + expr: "{1: 1.0, 2u: 3u} == {1u: 1, 2: 3.0}", + value: { boolValue: true }, + }, + ast: "_==_(\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n {\n 1~int:1~double,\n 2u~uint:3u~uint\n }~map(dyn, dyn),\n {\n 1u~uint:1~int,\n 2~int:3~double\n }~map(dyn, dyn)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_map_value", + expr: "{'k':'v'} == {'k':'v1'}", + value: { boolValue: false }, + }, + ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k"~string:"v"~string\n }~map(string, string),\n {\n "k"~string:"v1"~string\n }~map(string, string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_map_extra_key", + expr: "{'k':'v','k1':'v1'} == {'k':'v'}", + value: { boolValue: false }, + }, + ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k1"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k"~string:"v"~string,\n "k1"~string:"v1"~string\n }~map(string, string),\n {\n "k"~string:"v"~string\n }~map(string, string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_map_key_order", + expr: "{'k1':'v1','k2':'v2'} == {'k2':'v2','k1':'v1'}", + value: { boolValue: true }, + }, + ast: '_==_(\n {\n "k1"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k2"^#*expr.Constant_StringValue#:"v2"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k2"^#*expr.Constant_StringValue#:"v2"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k1"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k1"~string:"v1"~string,\n "k2"~string:"v2"~string\n }~map(string, string),\n {\n "k2"~string:"v2"~string,\n "k1"~string:"v1"~string\n }~map(string, string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_map_key_casing", + expr: "{'key':'value'} == {'Key':'value'}", + value: { boolValue: false }, + }, + ast: '_==_(\n {\n "key"^#*expr.Constant_StringValue#:"value"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "Key"^#*expr.Constant_StringValue#:"value"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "key"~string:"value"~string\n }~map(string, string),\n {\n "Key"~string:"value"~string\n }~map(string, string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_map_false_vs_types", + expr: "{'k1': 1, 'k2': 'dos', 'k3': 3} == {'k1': 1, 'k2': 2, 'k3': 4}", + value: { boolValue: false }, + }, + ast: '_==_(\n {\n "k1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "k2"^#*expr.Constant_StringValue#:"dos"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k3"^#*expr.Constant_StringValue#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "k2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "k3"^#*expr.Constant_StringValue#:4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k1"~string:1~int,\n "k2"~string:"dos"~string,\n "k3"~string:3~int\n }~map(string, dyn),\n {\n "k1"~string:1~int,\n "k2"~string:2~int,\n "k3"~string:4~int\n }~map(string, int)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_mixed_types", + expr: "1.0 == 1", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_==_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_==_' applied to '(double, int)'\n | 1.0 == 1\n | ....^", + }, + { + original: { + name: "eq_list_elem_mixed_types", + expr: "[1] == [1.0]", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_==_' applied to '(list(int), list(double))'\n | [1] == [1.0]\n | ....^", + }, + { + original: { + name: "eq_map_value_mixed_types", + expr: "{'k':'v', 1:1} == {'k':'v', 1:'v1'}", + value: { boolValue: false }, + }, + ast: '_==_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n "k"~string:"v"~string,\n 1~int:1~int\n }~map(dyn, dyn),\n {\n "k"~string:"v"~string,\n 1~int:"v1"~string\n }~map(dyn, string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_dyn_json_null", + expr: "dyn(google.protobuf.Value{}) == null", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n google.protobuf.Value{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n google.protobuf.Value{}~dyn^google.protobuf.Value\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_bool_null", + expr: "dyn(false) == null", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n false~bool\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_bytes_null", + expr: "dyn(b'') == null", + value: { boolValue: false }, + }, + ast: '_==_(\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n dyn(\n b""~bytes\n )~dyn^to_dyn,\n null~null\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_dyn_double_null", + expr: "dyn(2.1) == null", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 2.1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 2.1~double\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_duration_null", + expr: "dyn(duration('0s')) == null", + value: { boolValue: false }, + }, + ast: '_==_(\n dyn(\n duration(\n "0s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n dyn(\n duration(\n "0s"~string\n )~duration^string_to_duration\n )~dyn^to_dyn,\n null~null\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_dyn_int_null", + expr: "dyn(1) == null", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_list_null", + expr: "dyn([]) == null", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n []~list(dyn)\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_map_null", + expr: "dyn({}) == null", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n {}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n {}~map(dyn, dyn)\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_proto2_msg_null", + expr: "dyn(TestAllTypes{}) == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_proto3_msg_null", + expr: "dyn(TestAllTypes{}) == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_string_null", + expr: "dyn('') == null", + value: { boolValue: false }, + }, + ast: '_==_(\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n dyn(\n ""~string\n )~dyn^to_dyn,\n null~null\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "not_eq_dyn_timestamp_null", + expr: "dyn(timestamp(0)) == null", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n timestamp(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n timestamp(\n 0~int\n )~timestamp^int64_to_timestamp\n )~dyn^to_dyn,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_list_elem_null", + expr: "[1, 2, null] == [1, null, 3]", + value: { boolValue: false }, + }, + ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#,\n null^#*expr.Constant_NullValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n [\n 1~int,\n 2~int,\n null~null\n ]~list(dyn),\n [\n 1~int,\n null~null,\n 3~int\n ]~list(dyn)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_map_value_null", + expr: "{1:'hello', 2:'world'} == {1:'goodbye', 2:null}", + value: { boolValue: false }, + }, + ast: '_==_(\n {\n 1^#*expr.Constant_Int64Value#:"hello"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:"world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n {\n 1~int:"hello"~string,\n 2~int:"world"~string\n }~map(int, string),\n {\n 1~int:"goodbye"~string,\n 2~int:null~null\n }~map(int, dyn)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_dyn_int_uint", + expr: "dyn(1) == 1u", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_dyn_int_double", + expr: "dyn(1) == 1.0", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_dyn_uint_int", + expr: "dyn(1u) == 1", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_dyn_uint_double", + expr: "dyn(1u) == 1.0", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_dyn_double_int", + expr: "dyn(1.0) == 1", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_dyn_double_uint", + expr: "dyn(1.0) == 1u", + value: { boolValue: true }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_int_uint", + expr: "dyn(1) == 2u", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_int_double", + expr: "dyn(1) == 2.0", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_uint_int", + expr: "dyn(1u) == 2", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_uint_double", + expr: "dyn(1u) == 120", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 120^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 120~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_double_int", + expr: "dyn(1.0) == 2", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_eq_dyn_double_uint", + expr: "dyn(1.0) == 2u", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "eq_wrapper", + tests: [ + { + original: { + name: "eq_bool", + expr: "google.protobuf.BoolValue{value: true} == true", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue,\n true~bool\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_bool_empty", + expr: "google.protobuf.BoolValue{} == false", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue,\n false~bool\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_bool_not_null", + expr: "google.protobuf.BoolValue{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_bool_proto2_null", + expr: "TestAllTypes{}.single_bool_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bool_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_bool_wrapper~wrapper(bool),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_bool_proto3_null", + expr: "TestAllTypes{}.single_bool_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bool_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_bool_wrapper~wrapper(bool),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_bytes", + expr: "google.protobuf.BytesValue{value: b'set'} == b'set'", + value: { boolValue: true }, + }, + ast: '_==_(\n google.protobuf.BytesValue{\n value:b"set"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n b"set"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n google.protobuf.BytesValue{\n value:b"set"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue,\n b"set"~bytes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_bytes_empty", + expr: "google.protobuf.BytesValue{} == b''", + value: { boolValue: true }, + }, + ast: '_==_(\n google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue,\n b""~bytes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_bytes_not_null", + expr: "google.protobuf.BytesValue{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_bytes_proto2_null", + expr: "TestAllTypes{}.single_bytes_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bytes_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_bytes_wrapper~wrapper(bytes),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_bytes_proto3_null", + expr: "TestAllTypes{}.single_bytes_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_bytes_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_bytes_wrapper~wrapper(bytes),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_double", + expr: "google.protobuf.DoubleValue{value: -1.175494e-40} == -1.175494e-40", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.DoubleValue{\n value:-1.175494e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n -1.175494e-40^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.DoubleValue{\n value:-1.175494e-40~double\n }~wrapper(double)^google.protobuf.DoubleValue,\n -1.175494e-40~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_double_empty", + expr: "google.protobuf.DoubleValue{} == 0.0", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue,\n 0~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_double_not_null", + expr: "google.protobuf.DoubleValue{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_double_proto2_null", + expr: "TestAllTypes{}.single_double_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_double_proto3_null", + expr: "TestAllTypes{}.single_double_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_float", + expr: "google.protobuf.FloatValue{value: -1.5} == -1.5", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.FloatValue{\n value:-1.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.FloatValue{\n value:-1.5~double\n }~wrapper(double)^google.protobuf.FloatValue,\n -1.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_float_empty", + expr: "google.protobuf.FloatValue{} == 0.0", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue,\n 0~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_float_not_null", + expr: "google.protobuf.FloatValue{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_float_proto2_null", + expr: "TestAllTypes{}.single_float_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_float_proto3_null", + expr: "TestAllTypes{}.single_float_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int32", + expr: "google.protobuf.Int32Value{value: 123} == 123", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.Int32Value{\n value:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.Int32Value{\n value:123~int\n }~wrapper(int)^google.protobuf.Int32Value,\n 123~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int32_empty", + expr: "google.protobuf.Int32Value{} == 0", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value,\n 0~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int32_not_null", + expr: "google.protobuf.Int32Value{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_int32_proto2_null", + expr: "TestAllTypes{}.single_int32_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int32_proto3_null", + expr: "TestAllTypes{}.single_int32_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int64", + expr: "google.protobuf.Int64Value{value: 2147483650} == 2147483650", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.Int64Value{\n value:2147483650^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2147483650^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.Int64Value{\n value:2147483650~int\n }~wrapper(int)^google.protobuf.Int64Value,\n 2147483650~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int64_empty", + expr: "google.protobuf.Int64Value{} == 0", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value,\n 0~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int64_not_null", + expr: "google.protobuf.Int64Value{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_int64_proto2_null", + expr: "TestAllTypes{}.single_int64_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_int64_proto3_null", + expr: "TestAllTypes{}.single_int64_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_string", + expr: "google.protobuf.StringValue{value: 'set'} == 'set'", + value: { boolValue: true }, + }, + ast: '_==_(\n google.protobuf.StringValue{\n value:"set"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "set"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n google.protobuf.StringValue{\n value:"set"~string\n }~wrapper(string)^google.protobuf.StringValue,\n "set"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_string_empty", + expr: "google.protobuf.StringValue{} == ''", + value: { boolValue: true }, + }, + ast: '_==_(\n google.protobuf.StringValue{}^#*expr.Expr_StructExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue,\n ""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_string_not_null", + expr: "google.protobuf.StringValue{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.StringValue{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_string_proto2_null", + expr: "TestAllTypes{}.single_string_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_string_wrapper~wrapper(string),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_string_proto3_null", + expr: "TestAllTypes{}.single_string_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_string_wrapper~wrapper(string),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint32", + expr: "google.protobuf.UInt32Value{value: 42u} == 42u", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.UInt32Value{\n value:42u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.UInt32Value{\n value:42u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n 42u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint32_empty", + expr: "google.protobuf.UInt32Value{} == 0u", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value,\n 0u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint32_not_null", + expr: "google.protobuf.UInt32Value{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_uint32_proto2_null", + expr: "TestAllTypes{}.single_uint32_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint32_proto3_null", + expr: "TestAllTypes{}.single_uint32_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_uint32_wrapper~wrapper(uint),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint64", + expr: "google.protobuf.UInt64Value{value: 4294967296u} == 4294967296u", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.UInt64Value{\n value:4294967296u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 4294967296u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.UInt64Value{\n value:4294967296u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value,\n 4294967296u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint64_empty", + expr: "google.protobuf.UInt64Value{} == 0u", + value: { boolValue: true }, + }, + ast: "_==_(\n google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value,\n 0u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint64_not_null", + expr: "google.protobuf.UInt64Value{} != null", + value: { boolValue: true }, + }, + ast: "_!=_(\n google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "eq_uint64_proto2_null", + expr: "TestAllTypes{}.single_uint64_wrapper == null", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_uint64_proto3_null", + expr: "TestAllTypes{}.single_uint64_wrapper == null", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_uint64_wrapper~wrapper(uint),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_proto2", + expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: '_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto3", + expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: '_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto2_missing_fields_neq", + expr: "TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: '_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto3_missing_fields_neq", + expr: "TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: '_==_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto_nan_equal", + description: + "For proto equality, fields with NaN value are treated as not equal.", + expr: "TestAllTypes{single_double: double('NaN')} == TestAllTypes{single_double: double('NaN')}", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: '_==_(\n TestAllTypes{\n single_double:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_double:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n "NaN"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n "NaN"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto_different_types", + description: + "At runtime, differently typed messages are treated as not equal.", + expr: "dyn(TestAllTypes{}) == dyn(NestedTestAllTypes{})", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "_==_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n NestedTestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n dyn(\n cel.expr.conformance.proto2.NestedTestAllTypes{}~cel.expr.conformance.proto2.NestedTestAllTypes^cel.expr.conformance.proto2.NestedTestAllTypes\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "eq_proto2_any_unpack_equal", + description: "Any values should be unpacked and compared.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto2_any_unpack_not_equal", + description: "Any values should be unpacked and compared.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto2_any_unpack_bytewise_fallback_not_equal", + description: + "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto2_any_unpack_bytewise_fallback_equal", + description: + "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto3_any_unpack_equal", + description: "Any values should be unpacked and compared.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto3_any_unpack_not_equal", + description: "Any values should be unpacked and compared.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"a\\x00\\x00\\x00\\x00\\x00H\\x93\\xc0r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto3_any_unpack_bytewise_fallback_not_equal", + description: + "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_proto3_any_unpack_bytewise_fallback_equal", + description: + "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} == TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: '_==_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "ne_literal", + tests: [ + { + original: { + name: "ne_int", + expr: "24 != 42", + value: { boolValue: true }, + }, + ast: "_!=_(\n 24^#*expr.Constant_Int64Value#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_!=_(\n 24~int,\n 42~int\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_int", + expr: "1 != 1", + value: { boolValue: false }, + }, + ast: "_!=_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_!=_(\n 1~int,\n 1~int\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_int_double", + expr: "dyn(24) != 24.1", + value: { boolValue: true }, + }, + ast: "_!=_(\n dyn(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 24.1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 24~int\n )~dyn^to_dyn,\n 24.1~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_int_double", + expr: "dyn(1) != 1.0", + value: { boolValue: false }, + }, + ast: "_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_int_uint", + expr: "dyn(24) != 42u", + value: { boolValue: true }, + }, + ast: "_!=_(\n dyn(\n 24^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 24~int\n )~dyn^to_dyn,\n 42u~uint\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_int_uint", + expr: "dyn(1) != 1u", + value: { boolValue: false }, + }, + ast: "_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_uint", + expr: "1u != 2u", + value: { boolValue: true }, + }, + ast: "_!=_(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_!=_(\n 1u~uint,\n 2u~uint\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_uint", + expr: "99u != 99u", + value: { boolValue: false }, + }, + ast: "_!=_(\n 99u^#*expr.Constant_Uint64Value#,\n 99u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_!=_(\n 99u~uint,\n 99u~uint\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_uint_double", + expr: "dyn(1u) != 2.0", + value: { boolValue: true }, + }, + ast: "_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_uint_double", + expr: "dyn(99u) != 99.0", + value: { boolValue: false }, + }, + ast: "_!=_(\n dyn(\n 99u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 99u~uint\n )~dyn^to_dyn,\n 99~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_double", + expr: "9.0e+3 != 9001.0", + value: { boolValue: true }, + }, + ast: "_!=_(\n 9000^#*expr.Constant_DoubleValue#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n 9000~double,\n 9001~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_double_nan", + expr: "0.0/0.0 != 0.0/0.0", + value: { boolValue: true }, + }, + ast: "_!=_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_int_double_nan", + expr: "dyn(1) != 0.0/0.0", + value: { boolValue: true }, + }, + ast: "_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_uint_double_nan", + expr: "dyn(1u) != 0.0/0.0", + value: { boolValue: true }, + }, + ast: "_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_double", + expr: "1.0 != 1e+0", + value: { boolValue: false }, + }, + ast: "_!=_(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_!=_(\n 1~double,\n 1~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_double_int", + expr: "dyn(9000) != 9001.0", + value: { boolValue: true }, + }, + ast: "_!=_(\n dyn(\n 9000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 9000~int\n )~dyn^to_dyn,\n 9001~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_double_int", + expr: "dyn(1) != 1e+0", + value: { boolValue: false }, + }, + ast: "_!=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_double_uint", + expr: "dyn(9000u) != 9001.0", + value: { boolValue: true }, + }, + ast: "_!=_(\n dyn(\n 9000u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 9001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 9000u~uint\n )~dyn^to_dyn,\n 9001~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_double_uint", + expr: "dyn(1u) != 1e+0", + value: { boolValue: false }, + }, + ast: "_!=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_double_nan", + expr: "0.0/0.0 != 0.0/0.0", + value: { boolValue: true }, + }, + ast: "_!=_(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double,\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_string", + expr: "'abc' != ''", + value: { boolValue: true }, + }, + ast: '_!=_(\n "abc"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n "abc"~string,\n ""~string\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "not_ne_string", + expr: "'abc' != 'abc'", + value: { boolValue: false }, + }, + ast: '_!=_(\n "abc"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n "abc"~string,\n "abc"~string\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_string_unicode", + expr: "'résumé' != 'resume'", + value: { boolValue: true }, + }, + ast: '_!=_(\n "résumé"^#*expr.Constant_StringValue#,\n "resume"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n "résumé"~string,\n "resume"~string\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "not_ne_string_unicode", + expr: "'ίδιο' != 'ίδιο'", + value: { boolValue: false }, + }, + ast: '_!=_(\n "ίδιο"^#*expr.Constant_StringValue#,\n "ίδιο"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n "ίδιο"~string,\n "ίδιο"~string\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_bytes", + expr: "b'\\x00\\xFF' != b'ÿ'", + value: { boolValue: true }, + }, + ast: '_!=_(\n b"\\x00\\xff"^#*expr.Constant_BytesValue#,\n b"ÿ"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n b"\\x00\\xff"~bytes,\n b"ÿ"~bytes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "not_ne_bytes", + expr: "b'\\303\\277' != b'ÿ'", + value: { boolValue: false }, + }, + ast: '_!=_(\n b"ÿ"^#*expr.Constant_BytesValue#,\n b"ÿ"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n b"ÿ"~bytes,\n b"ÿ"~bytes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_bool", + expr: "false != true", + value: { boolValue: true }, + }, + ast: "_!=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n false~bool,\n true~bool\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_bool", + expr: "true != true", + value: { boolValue: false }, + }, + ast: "_!=_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_!=_(\n true~bool,\n true~bool\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_null", + description: + "null can only be equal to null, or else it won't match", + expr: "null != null", + value: { boolValue: false }, + }, + ast: "_!=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_!=_(\n null~null,\n null~null\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_list_empty", + expr: "[] != [1]", + value: { boolValue: true }, + }, + ast: "_!=_(\n []^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n []~list(int),\n [\n 1~int\n ]~list(int)\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_list_empty", + expr: "[] != []", + value: { boolValue: false }, + }, + ast: "_!=_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n []~list(dyn),\n []~list(dyn)\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_list_bool", + expr: "[true, false, true] != [true, true, false]", + value: { boolValue: true }, + }, + ast: "_!=_(\n [\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#,\n [\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n [\n true~bool,\n false~bool,\n true~bool\n ]~list(bool),\n [\n true~bool,\n true~bool,\n false~bool\n ]~list(bool)\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_list_bool", + expr: "[false, true] != [false, true]", + value: { boolValue: false }, + }, + ast: "_!=_(\n [\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#,\n [\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n [\n false~bool,\n true~bool\n ]~list(bool),\n [\n false~bool,\n true~bool\n ]~list(bool)\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_list_of_list", + expr: "[[]] != [[]]", + value: { boolValue: false }, + }, + ast: "_!=_(\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n [\n []~list(dyn)\n ]~list(list(dyn)),\n [\n []~list(dyn)\n ]~list(list(dyn))\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_map_by_value", + expr: "{'k':'v'} != {'k':'v1'}", + value: { boolValue: true }, + }, + ast: '_!=_(\n {\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n {\n "k"~string:"v"~string\n }~map(string, string),\n {\n "k"~string:"v1"~string\n }~map(string, string)\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_map_by_key", + expr: "{'k':true} != {'k1':true}", + value: { boolValue: true }, + }, + ast: '_!=_(\n {\n "k"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "k1"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n {\n "k"~string:true~bool\n }~map(string, bool),\n {\n "k1"~string:true~bool\n }~map(string, bool)\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "not_ne_map_int_to_float", + expr: "{1:1.0} != {1:1.0}", + value: { boolValue: false }, + }, + ast: "_!=_(\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n {\n 1~int:1~double\n }~map(int, double),\n {\n 1~int:1~double\n }~map(int, double)\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "not_ne_map_key_order", + expr: "{'a':'b','c':'d'} != {'c':'d','a':'b'}", + value: { boolValue: false }, + }, + ast: '_!=_(\n {\n "a"^#*expr.Constant_StringValue#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "c"^#*expr.Constant_StringValue#:"d"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n "c"^#*expr.Constant_StringValue#:"d"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "a"^#*expr.Constant_StringValue#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n {\n "a"~string:"b"~string,\n "c"~string:"d"~string\n }~map(string, string),\n {\n "c"~string:"d"~string,\n "a"~string:"b"~string\n }~map(string, string)\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_mixed_types", + expr: "2u != 2", + disableCheck: true, + value: { boolValue: false }, + }, + ast: "_!=_(\n 2u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:4: found no matching overload for '_!=_' applied to '(uint, int)'\n | 2u != 2\n | ...^", + }, + { + original: { + name: "ne_proto2", + expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: '_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_proto3", + expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: '_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int,\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_proto2_missing_fields_neq", + expr: "TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: '_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_string:"1234"~string\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_proto3_missing_fields_neq", + expr: "TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: '_!=_(\n TestAllTypes{\n single_int64:1234^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_string:"1234"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1234~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_string:"1234"~string\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_proto_nan_not_equal", + description: + "For proto equality, NaN field values are not considered equal.", + expr: "TestAllTypes{single_double: double('NaN')} != TestAllTypes{single_double: double('NaN')}", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: '_!=_(\n TestAllTypes{\n single_double:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_double:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n "NaN"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_double:double(\n "NaN"~string\n )~double^string_to_double\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_proto_different_types", + description: + "At runtime, comparing differently typed messages is false.", + expr: "dyn(TestAllTypes{}) != dyn(NestedTestAllTypes{})", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_!=_(\n dyn(\n TestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n NestedTestAllTypes{}^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n dyn(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n )~dyn^to_dyn,\n dyn(\n cel.expr.conformance.proto2.NestedTestAllTypes{}~cel.expr.conformance.proto2.NestedTestAllTypes^cel.expr.conformance.proto2.NestedTestAllTypes\n )~dyn^to_dyn\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "ne_proto2_any_unpack", + description: "Any values should be unpacked and compared.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: '_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_proto2_any_unpack_bytewise_fallback", + description: + "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: '_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_proto3_any_unpack", + description: "Any values should be unpacked and compared.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: '_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "ne_proto3_any_unpack_bytewise_fallback", + description: + "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto.", + expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} != TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: '_!=_(\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01r\\x041234"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\xa2\\x06\\x13\\x12\\x11r\\x041234\\x10\\xae\\xf6\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x01"~bytes\n }~any^google.protobuf.Any\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^not_equals', + type: "bool", + }, + ], + }, + { + name: "lt_literal", + tests: [ + { + original: { + name: "lt_int", + expr: "-1 \u003c 0", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n -1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_\u003c_(\n -1~int,\n 0~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "not_lt_int", + expr: "0 \u003c 0", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n 0^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_\u003c_(\n 0~int,\n 0~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "lt_uint", + expr: "0u \u003c 1u", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n 0u~uint,\n 1u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "not_lt_uint", + expr: "2u \u003c 2u", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n 2u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n 2u~uint,\n 2u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "lt_double", + expr: "1.0 \u003c 1.0000001", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n 1^#*expr.Constant_DoubleValue#,\n 1.0000001^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n 1~double,\n 1.0000001~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "not_lt_double", + description: + "Following IEEE 754, negative zero compares equal to zero", + expr: "-0.0 \u003c 0.0", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n -0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n -0~double,\n 0~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "lt_string", + expr: "'a' \u003c 'b'", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n "a"^#*expr.Constant_StringValue#,\n "b"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n "a"~string,\n "b"~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "lt_string_empty_to_nonempty", + expr: "'' \u003c 'a'", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n ""^#*expr.Constant_StringValue#,\n "a"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n ""~string,\n "a"~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "lt_string_case", + expr: "'Abc' \u003c 'aBC'", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n "Abc"^#*expr.Constant_StringValue#,\n "aBC"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n "Abc"~string,\n "aBC"~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "lt_string_length", + expr: "'abc' \u003c 'abcd'", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n "abc"^#*expr.Constant_StringValue#,\n "abcd"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n "abc"~string,\n "abcd"~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "lt_string_diacritical_mark_sensitive", + description: + "Verifies that the we're not using a string comparison function that strips diacritical marks (á)", + expr: "'a' \u003c '\\u00E1'", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n "a"^#*expr.Constant_StringValue#,\n "á"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n "a"~string,\n "á"~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "not_lt_string_empty", + expr: "'' \u003c ''", + value: { boolValue: false }, + }, + ast: '_\u003c_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n ""~string,\n ""~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "not_lt_string_same", + expr: "'abc' \u003c 'abc'", + value: { boolValue: false }, + }, + ast: '_\u003c_(\n "abc"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n "abc"~string,\n "abc"~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "not_lt_string_case_length", + expr: "'a' \u003c 'AB'", + value: { boolValue: false }, + }, + ast: '_\u003c_(\n "a"^#*expr.Constant_StringValue#,\n "AB"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n "a"~string,\n "AB"~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "unicode_order_lexical", + description: + "Compare the actual code points of the string, instead of decomposing ế into 'e' plus accent modifiers.", + expr: "'f' \u003c '\\u1EBF'", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n "f"^#*expr.Constant_StringValue#,\n "ế"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n "f"~string,\n "ế"~string\n)~bool^less_string', + type: "bool", + }, + { + original: { + name: "lt_bytes", + expr: "b'a' \u003c b'b'", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n b"a"^#*expr.Constant_BytesValue#,\n b"b"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n b"a"~bytes,\n b"b"~bytes\n)~bool^less_bytes', + type: "bool", + }, + { + original: { + name: "not_lt_bytes_same", + expr: "b'abc' \u003c b'abc'", + value: { boolValue: false }, + }, + ast: '_\u003c_(\n b"abc"^#*expr.Constant_BytesValue#,\n b"abc"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n b"abc"~bytes,\n b"abc"~bytes\n)~bool^less_bytes', + type: "bool", + }, + { + original: { + name: "not_lt_bytes_width", + expr: "b'á' \u003c b'b'", + value: { boolValue: false }, + }, + ast: '_\u003c_(\n b"á"^#*expr.Constant_BytesValue#,\n b"b"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n b"á"~bytes,\n b"b"~bytes\n)~bool^less_bytes', + type: "bool", + }, + { + original: { + name: "lt_bool_false_first", + expr: "false \u003c true", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n false~bool,\n true~bool\n)~bool^less_bool", + type: "bool", + }, + { + original: { + name: "not_lt_bool_same", + expr: "true \u003c true", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n true~bool,\n true~bool\n)~bool^less_bool", + type: "bool", + }, + { + original: { + name: "not_lt_bool_true_first", + expr: "true \u003c false", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n true~bool,\n false~bool\n)~bool^less_bool", + type: "bool", + }, + { + original: { + name: "lt_list_unsupported", + expr: "[0] \u003c [1]", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "_\u003c_(\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003c_' applied to '(list(int), list(int))'\n | [0] \u003c [1]\n | ....^", + }, + { + original: { + name: "lt_map_unsupported", + expr: "{0:'a'} \u003c {1:'b'}", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003c_(\n {\n 0^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003c_' applied to '(map(int, string), map(int, string))'\n | {0:'a'} \u003c {1:'b'}\n | ........^", + }, + { + original: { + name: "lt_null_unsupported", + description: "Ensure _\u003c_ doesn't have a binding for null", + expr: "null \u003c null", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "_\u003c_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n null~null,\n null~null\n)~bool^less_duration|less_timestamp", + type: "bool", + }, + { + original: { + name: "lt_mixed_types_error", + expr: "'foo' \u003c 1024", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003c_(\n "foo"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003c_' applied to '(string, int)'\n | 'foo' \u003c 1024\n | ......^", + }, + { + original: { + name: "lt_dyn_int_uint", + expr: "dyn(1) \u003c 2u", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "lt_dyn_int_double", + expr: "dyn(1) \u003c 2.0", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "lt_dyn_uint_int", + expr: "dyn(1u) \u003c 2", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "lt_dyn_uint_double", + expr: "dyn(1u) \u003c 2.0", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "lt_dyn_double_int", + expr: "dyn(1.0) \u003c 2", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "lt_dyn_double_uint", + expr: "dyn(1.0) \u003c 2u", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_int_uint", + expr: "dyn(1) \u003c 1u", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_int_double", + expr: "dyn(1) \u003c 1.0", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_uint_int", + expr: "dyn(1u) \u003c 1", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_uint_double", + expr: "dyn(1u) \u003c 1.0", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_double_int", + expr: "dyn(1.0) \u003c 1", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_double_uint", + expr: "dyn(1.0) \u003c 1u", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "lt_dyn_int_big_uint", + expr: "dyn(1) \u003c 9223372036854775808u", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "lt_dyn_small_int_uint", + expr: "dyn(-1) \u003c 0u", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_int_big_lossy_double", + expr: "dyn(9223372036854775807) \u003c 9223372036854775808.0", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "lt_dyn_int_big_lossy_double", + expr: "dyn(9223372036854775807) \u003c 9223372036854777857.0", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854778e+18~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_int_small_double", + expr: "dyn(9223372036854775807) \u003c -9223372036854777857.0", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_int_small_lossy_double", + expr: "dyn(-9223372036854775808) \u003c -9223372036854775809.0", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_uint_small_int", + expr: "dyn(1u) \u003c -9223372036854775808", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_big_uint_int", + expr: "dyn(9223372036854775808u) \u003c 1", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_uint_small_double", + expr: "dyn(18446744073709551615u) \u003c -1.0", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "lt_dyn_uint_big_double", + expr: "dyn(18446744073709551615u) \u003c 18446744073709590000.0", + value: { boolValue: true }, + }, + ast: "_\u003c_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^less_double", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_big_double_uint", + expr: "dyn(18446744073709553665.0) \u003c 18446744073709551615u", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^less_uint64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_big_double_int", + expr: "dyn(9223372036854775808.0) \u003c 9223372036854775807", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^less_int64", + type: "bool", + }, + { + original: { + name: "not_lt_dyn_small_double_int", + expr: "dyn(-9223372036854775809.0) \u003c -9223372036854775808", + value: { boolValue: false }, + }, + ast: "_\u003c_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_int64", + type: "bool", + }, + ], + }, + { + name: "gt_literal", + tests: [ + { + original: { + name: "gt_int", + expr: "42 \u003e -42", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n 42^#*expr.Constant_Int64Value#,\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n 42~int,\n -42~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "not_gt_int", + expr: "0 \u003e 0", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n 0^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_\u003e_(\n 0~int,\n 0~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "gt_uint", + expr: "48u \u003e 46u", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n 48u^#*expr.Constant_Uint64Value#,\n 46u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n 48u~uint,\n 46u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "not_gt_uint", + expr: "0u \u003e 999u", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n 0u^#*expr.Constant_Uint64Value#,\n 999u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n 0u~uint,\n 999u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "gt_double", + expr: "1e+1 \u003e 1e+0", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n 10^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n 10~double,\n 1~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "not_gt_double", + expr: ".99 \u003e 9.9e-1", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n 0.99^#*expr.Constant_DoubleValue#,\n 0.99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n 0.99~double,\n 0.99~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "gt_string_case", + expr: "'abc' \u003e 'aBc'", + value: { boolValue: true }, + }, + ast: '_\u003e_(\n "abc"^#*expr.Constant_StringValue#,\n "aBc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n "abc"~string,\n "aBc"~string\n)~bool^greater_string', + type: "bool", + }, + { + original: { + name: "gt_string_to_empty", + expr: "'A' \u003e ''", + value: { boolValue: true }, + }, + ast: '_\u003e_(\n "A"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n "A"~string,\n ""~string\n)~bool^greater_string', + type: "bool", + }, + { + original: { + name: "not_gt_string_empty_to_empty", + expr: "'' \u003e ''", + value: { boolValue: false }, + }, + ast: '_\u003e_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n ""~string,\n ""~string\n)~bool^greater_string', + type: "bool", + }, + { + original: { + name: "gt_string_unicode", + expr: "'α' \u003e 'omega'", + value: { boolValue: true }, + }, + ast: '_\u003e_(\n "α"^#*expr.Constant_StringValue#,\n "omega"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n "α"~string,\n "omega"~string\n)~bool^greater_string', + type: "bool", + }, + { + original: { + name: "gt_bytes_one", + expr: "b'\u0001' \u003e b'\u0000'", + value: { boolValue: true }, + }, + ast: '_\u003e_(\n b"\\x01"^#*expr.Constant_BytesValue#,\n b"\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n b"\\x01"~bytes,\n b"\\x00"~bytes\n)~bool^greater_bytes', + type: "bool", + }, + { + original: { + name: "gt_bytes_one_to_empty", + expr: "b'\u0000' \u003e b''", + value: { boolValue: true }, + }, + ast: '_\u003e_(\n b"\\x00"^#*expr.Constant_BytesValue#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n b"\\x00"~bytes,\n b""~bytes\n)~bool^greater_bytes', + type: "bool", + }, + { + original: { + name: "not_gt_bytes_sorting", + expr: "b'\u0000\u0001' \u003e b'\u0001'", + value: { boolValue: false }, + }, + ast: '_\u003e_(\n b"\\x00\\x01"^#*expr.Constant_BytesValue#,\n b"\\x01"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n b"\\x00\\x01"~bytes,\n b"\\x01"~bytes\n)~bool^greater_bytes', + type: "bool", + }, + { + original: { + name: "gt_bool_true_false", + expr: "true \u003e false", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n true~bool,\n false~bool\n)~bool^greater_bool", + type: "bool", + }, + { + original: { + name: "not_gt_bool_false_true", + expr: "false \u003e true", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n false~bool,\n true~bool\n)~bool^greater_bool", + type: "bool", + }, + { + original: { + name: "not_gt_bool_same", + expr: "true \u003e true", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n true~bool,\n true~bool\n)~bool^greater_bool", + type: "bool", + }, + { + original: { + name: "gt_null_unsupported", + expr: "null \u003e null", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "_\u003e_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n null~null,\n null~null\n)~bool^greater_duration|greater_timestamp", + type: "bool", + }, + { + original: { + name: "gt_list_unsupported", + expr: "[1] \u003e [0]", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "_\u003e_(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003e_' applied to '(list(int), list(int))'\n | [1] \u003e [0]\n | ....^", + }, + { + original: { + name: "gt_map_unsupported", + expr: "{1:'b'} \u003e {0:'a'}", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003e_(\n {\n 1^#*expr.Constant_Int64Value#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 0^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003e_' applied to '(map(int, string), map(int, string))'\n | {1:'b'} \u003e {0:'a'}\n | ........^", + }, + { + original: { + name: "gt_mixed_types_error", + expr: "'foo' \u003e 1024", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003e_(\n "foo"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e_' applied to '(string, int)'\n | 'foo' \u003e 1024\n | ......^", + }, + { + original: { + name: "gt_dyn_int_uint", + expr: "dyn(2) \u003e 1u", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "gt_dyn_int_double", + expr: "dyn(2) \u003e 1.0", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "gt_dyn_uint_int", + expr: "dyn(2u) \u003e 1", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "gt_dyn_uint_double", + expr: "dyn(2u) \u003e 1.0", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "gt_dyn_double_int", + expr: "dyn(2.0) \u003e 1", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "gt_dyn_double_uint", + expr: "dyn(2.0) \u003e 1u", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_int_uint", + expr: "dyn(1) \u003e 1u", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_int_double", + expr: "dyn(1) \u003e 1.0", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_uint_int", + expr: "dyn(1u) \u003e 1", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_uint_double", + expr: "dyn(1u) \u003e 1.0", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_double_int", + expr: "dyn(1.0) \u003e 1", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_double_uint", + expr: "dyn(1.0) \u003e 1u", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_int_big_uint", + expr: "dyn(1) \u003e 9223372036854775808u", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_small_int_uint", + expr: "dyn(-1) \u003e 0u", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_int_big_double", + expr: "dyn(9223372036854775807) \u003e 9223372036854775808.0", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_int_small_lossy_double", + description: + "The conversion of the int to double is lossy and the numbers end up being equal", + expr: "dyn(-9223372036854775808) \u003e -9223372036854775809.0", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "gt_dyn_int_small_lossy_double_greater", + expr: "dyn(-9223372036854775808) \u003e -9223372036854777857.0", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "gt_dyn_uint_small_int", + expr: "dyn(1u) \u003e -1", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -1~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "gt_dyn_big_uint_int", + expr: "dyn(9223372036854775808u) \u003e 1", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "gt_dyn_uint_small_double", + expr: "dyn(9223372036854775807u) \u003e -1.0", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 9223372036854775807u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_uint_big_double", + expr: "dyn(18446744073709551615u) \u003e 18446744073709590000.0", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^greater_double", + type: "bool", + }, + { + original: { + name: "gt_dyn_big_double_uint", + expr: "dyn(18446744073709553665.0) \u003e 18446744073709551615u", + value: { boolValue: true }, + }, + ast: "_\u003e_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^greater_uint64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_big_double_int", + expr: "dyn(9223372036854775808.0) \u003e 9223372036854775807", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^greater_int64", + type: "bool", + }, + { + original: { + name: "not_gt_dyn_small_double_int", + expr: "dyn(-9223372036854775809.0) \u003e -9223372036854775808", + value: { boolValue: false }, + }, + ast: "_\u003e_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^greater_int64", + type: "bool", + }, + ], + }, + { + name: "lte_literal", + tests: [ + { + original: { + name: "lte_int_lt", + expr: "0 \u003c= 1", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 0~int,\n 1~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "lte_int_eq", + expr: "1 \u003c= 1", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 1~int,\n 1~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "not_lte_int_gt", + expr: "1 \u003c= -1", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n 1^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 1~int,\n -1~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "lte_uint_lt", + expr: "0u \u003c= 1u", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 0u~uint,\n 1u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "lte_uint_eq", + expr: "1u \u003c= 1u", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 1u~uint,\n 1u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "not_lte_uint_gt", + expr: "1u \u003c= 0u", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n 1u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 1u~uint,\n 0u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "lte_double_lt", + expr: "0.0 \u003c= 0.1e-31", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n 0^#*expr.Constant_DoubleValue#,\n 1e-32^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 0~double,\n 1e-32~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "lte_double_eq", + expr: "0.0 \u003c= 0e-1", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 0~double,\n 0~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "not_lte_double_gt", + expr: "1.0 \u003c= 0.99", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n 1^#*expr.Constant_DoubleValue#,\n 0.99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 1~double,\n 0.99~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "lte_string_empty", + expr: "'' \u003c= ''", + value: { boolValue: true }, + }, + ast: '_\u003c=_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n ""~string,\n ""~string\n)~bool^less_equals_string', + type: "bool", + }, + { + original: { + name: "lte_string_from_empty", + expr: "'' \u003c= 'a'", + value: { boolValue: true }, + }, + ast: '_\u003c=_(\n ""^#*expr.Constant_StringValue#,\n "a"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n ""~string,\n "a"~string\n)~bool^less_equals_string', + type: "bool", + }, + { + original: { + name: "not_lte_string_to_empty", + expr: "'a' \u003c= ''", + value: { boolValue: false }, + }, + ast: '_\u003c=_(\n "a"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n "a"~string,\n ""~string\n)~bool^less_equals_string', + type: "bool", + }, + { + original: { + name: "lte_string_lexicographical", + expr: "'aBc' \u003c= 'abc'", + value: { boolValue: true }, + }, + ast: '_\u003c=_(\n "aBc"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n "aBc"~string,\n "abc"~string\n)~bool^less_equals_string', + type: "bool", + }, + { + original: { + name: "lte_string_unicode_eq", + expr: "'α' \u003c= 'α'", + value: { boolValue: true }, + }, + ast: '_\u003c=_(\n "α"^#*expr.Constant_StringValue#,\n "α"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n "α"~string,\n "α"~string\n)~bool^less_equals_string', + type: "bool", + }, + { + original: { + name: "lte_string_unicode_lt", + expr: "'a' \u003c= 'α'", + value: { boolValue: true }, + }, + ast: '_\u003c=_(\n "a"^#*expr.Constant_StringValue#,\n "α"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n "a"~string,\n "α"~string\n)~bool^less_equals_string', + type: "bool", + }, + { + original: { + name: "not_lte_string_unicode", + expr: "'α' \u003c= 'a'", + value: { boolValue: false }, + }, + ast: '_\u003c=_(\n "α"^#*expr.Constant_StringValue#,\n "a"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n "α"~string,\n "a"~string\n)~bool^less_equals_string', + type: "bool", + }, + { + original: { + name: "lte_bytes_empty", + expr: "b'' \u003c= b'\u0000'", + value: { boolValue: true }, + }, + ast: '_\u003c=_(\n b""^#*expr.Constant_BytesValue#,\n b"\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n b""~bytes,\n b"\\x00"~bytes\n)~bool^less_equals_bytes', + type: "bool", + }, + { + original: { + name: "not_lte_bytes_length", + expr: "b'\u0001\u0000' \u003c= b'\u0001'", + value: { boolValue: false }, + }, + ast: '_\u003c=_(\n b"\\x01\\x00"^#*expr.Constant_BytesValue#,\n b"\\x01"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n b"\\x01\\x00"~bytes,\n b"\\x01"~bytes\n)~bool^less_equals_bytes', + type: "bool", + }, + { + original: { + name: "lte_bool_false_true", + expr: "false \u003c= true", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n false~bool,\n true~bool\n)~bool^less_equals_bool", + type: "bool", + }, + { + original: { + name: "lte_bool_false_false", + expr: "false \u003c= false", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n false~bool,\n false~bool\n)~bool^less_equals_bool", + type: "bool", + }, + { + original: { + name: "lte_bool_true_false", + expr: "true \u003c= false", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n true~bool,\n false~bool\n)~bool^less_equals_bool", + type: "bool", + }, + { + original: { + name: "lte_null_unsupported", + expr: "null \u003c= null", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "_\u003c=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n null~null,\n null~null\n)~bool^less_equals_duration|less_equals_timestamp", + type: "bool", + }, + { + original: { + name: "lte_list_unsupported", + expr: "[0] \u003c= [0]", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "_\u003c=_(\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:5: found no matching overload for '_\u003c=_' applied to '(list(int), list(int))'\n | [0] \u003c= [0]\n | ....^", + }, + { + original: { + name: "lte_map_unsupported", + expr: "{0:'a'} \u003c= {1:'b'}", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003c=_(\n {\n 0^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 1^#*expr.Constant_Int64Value#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003c=_' applied to '(map(int, string), map(int, string))'\n | {0:'a'} \u003c= {1:'b'}\n | ........^", + }, + { + original: { + name: "lte_mixed_types_error", + expr: "'foo' \u003c= 1024", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003c=_(\n "foo"^#*expr.Constant_StringValue#,\n 1024^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003c=_' applied to '(string, int)'\n | 'foo' \u003c= 1024\n | ......^", + }, + { + original: { + name: "lte_dyn_int_uint", + expr: "dyn(1) \u003c= 2u", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "lte_dyn_int_double", + expr: "dyn(1) \u003c= 2.0", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "lte_dyn_uint_int", + expr: "dyn(1u) \u003c= 2", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "lte_dyn_uint_double", + expr: "dyn(1u) \u003c= 2.0", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n 2~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "lte_dyn_double_int", + expr: "dyn(1.0) \u003c= 2", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "lte_dyn_double_uint", + expr: "dyn(1.0) \u003c= 2u", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1~double\n )~dyn^to_dyn,\n 2u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_int_uint", + expr: "dyn(2) \u003c= 1u", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_int_double", + expr: "dyn(2) \u003c= 1.0", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_uint_int", + expr: "dyn(2u) \u003c= 1", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_uint_double", + expr: "dyn(2u) \u003c= 1.0", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_double_int", + expr: "dyn(2.0) \u003c= 1", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_double_uint", + expr: "dyn(2.0) \u003c= 1u", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "lte_dyn_int_big_uint", + expr: "dyn(1) \u003c= 9223372036854775808u", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "lte_dyn_small_int_uint", + expr: "dyn(-1) \u003c= 0u", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "lte_dyn_int_big_double", + expr: "dyn(9223372036854775807) \u003c= 9223372036854775808.0", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "lte_dyn_int_small_lossy_double", + description: + "The conversion of the int to double is lossy and the numbers end up being equal", + expr: "dyn(-9223372036854775808) \u003c= -9223372036854775809.0", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_int_small_lossy_double_less", + expr: "dyn(-9223372036854775808) \u003c= -9223372036854777857.0", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_uint_small_int", + expr: "dyn(1u) \u003c= -9223372036854775808", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_big_uint_int", + expr: "dyn(9223372036854775808u) \u003c= 1", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_uint_small_double", + expr: "dyn(18446744073709551615u) \u003c= -1.0", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "lte_dyn_uint_big_double", + expr: "dyn(18446744073709551615u) \u003c= 18446744073709590000.0", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.844674407370959e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.844674407370959e+19~double\n)~bool^less_equals_double", + type: "bool", + }, + { + original: { + name: "not_lte_dyn_big_double_uint", + expr: "dyn(18446744073709553665.0) \u003c= 18446744073709551615u", + value: { boolValue: false }, + }, + ast: "_\u003c=_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^less_equals_uint64", + type: "bool", + }, + { + original: { + name: "lte_dyn_big_double_int", + expr: "dyn(9223372036854775808.0) \u003c= 9223372036854775807", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "lte_dyn_small_double_int", + expr: "dyn(-9223372036854775809.0) \u003c= -9223372036854775808", + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^less_equals_int64", + type: "bool", + }, + ], + }, + { + name: "gte_literal", + tests: [ + { + original: { + name: "gte_int_gt", + expr: "0 \u003e= -1", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n 0^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 0~int,\n -1~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "gte_int_eq", + expr: "999 \u003e= 999", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n 999^#*expr.Constant_Int64Value#,\n 999^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 999~int,\n 999~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "not_gte_int_lt", + expr: "999 \u003e= 1000", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n 999^#*expr.Constant_Int64Value#,\n 1000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 999~int,\n 1000~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "gte_uint_gt", + expr: "1u \u003e= 0u", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n 1u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 1u~uint,\n 0u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "gte_uint_eq", + expr: "0u \u003e= 0u", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n 0u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 0u~uint,\n 0u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "not_gte_uint_lt", + expr: "1u \u003e= 10u", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n 1u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 1u~uint,\n 10u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "gte_double_gt", + expr: "1e+1 \u003e= 1e+0", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n 10^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 10~double,\n 1~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "gte_double_eq", + expr: "9.80665 \u003e= 9.80665e+0", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n 9.80665^#*expr.Constant_DoubleValue#,\n 9.80665^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 9.80665~double,\n 9.80665~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "not_gte_double_lt", + expr: "0.9999 \u003e= 1.0", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n 0.9999^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n 0.9999~double,\n 1~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "gte_string_empty", + expr: "'' \u003e= ''", + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n ""~string,\n ""~string\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "gte_string_to_empty", + expr: "'a' \u003e= ''", + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n "a"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n "a"~string,\n ""~string\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "gte_string_empty_to_nonempty", + expr: "'' \u003e= 'a'", + value: { boolValue: false }, + }, + ast: '_\u003e=_(\n ""^#*expr.Constant_StringValue#,\n "a"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n ""~string,\n "a"~string\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "gte_string_length", + expr: "'abcd' \u003e= 'abc'", + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n "abcd"^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n "abcd"~string,\n "abc"~string\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "not_gte_string_lexicographical", + expr: "'abc' \u003e= 'abd'", + value: { boolValue: false }, + }, + ast: '_\u003e=_(\n "abc"^#*expr.Constant_StringValue#,\n "abd"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n "abc"~string,\n "abd"~string\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "gte_string_unicode_eq", + expr: "'τ' \u003e= 'τ'", + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n "τ"^#*expr.Constant_StringValue#,\n "τ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n "τ"~string,\n "τ"~string\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "gte_string_unicode_gt", + expr: "'τ' \u003e= 't'", + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n "τ"^#*expr.Constant_StringValue#,\n "t"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n "τ"~string,\n "t"~string\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "not_get_string_unicode", + expr: "'t' \u003e= 'τ'", + value: { boolValue: false }, + }, + ast: '_\u003e=_(\n "t"^#*expr.Constant_StringValue#,\n "τ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n "t"~string,\n "τ"~string\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "gte_bytes_to_empty", + expr: "b'\u0000' \u003e= b''", + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n b"\\x00"^#*expr.Constant_BytesValue#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n b"\\x00"~bytes,\n b""~bytes\n)~bool^greater_equals_bytes', + type: "bool", + }, + { + original: { + name: "not_gte_bytes_empty_to_nonempty", + expr: "b'' \u003e= b'\u0000'", + value: { boolValue: false }, + }, + ast: '_\u003e=_(\n b""^#*expr.Constant_BytesValue#,\n b"\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n b""~bytes,\n b"\\x00"~bytes\n)~bool^greater_equals_bytes', + type: "bool", + }, + { + original: { + name: "gte_bytes_samelength", + expr: "b'\u0000\u0001' \u003e= b'\u0001\u0000'", + value: { boolValue: false }, + }, + ast: '_\u003e=_(\n b"\\x00\\x01"^#*expr.Constant_BytesValue#,\n b"\\x01\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n b"\\x00\\x01"~bytes,\n b"\\x01\\x00"~bytes\n)~bool^greater_equals_bytes', + type: "bool", + }, + { + original: { + name: "gte_bool_gt", + expr: "true \u003e= false", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n true~bool,\n false~bool\n)~bool^greater_equals_bool", + type: "bool", + }, + { + original: { + name: "gte_bool_eq", + expr: "true \u003e= true", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n true~bool,\n true~bool\n)~bool^greater_equals_bool", + type: "bool", + }, + { + original: { + name: "not_gte_bool_lt", + expr: "false \u003e= true", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n false~bool,\n true~bool\n)~bool^greater_equals_bool", + type: "bool", + }, + { + original: { + name: "gte_null_unsupported", + expr: "null \u003e= null", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "_\u003e=_(\n null^#*expr.Constant_NullValue#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n null~null,\n null~null\n)~bool^greater_equals_duration|greater_equals_timestamp", + type: "bool", + }, + { + original: { + name: "gte_list_unsupported", + expr: "['y'] \u003e= ['x']", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003e=_(\n [\n "y"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n [\n "x"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e=_' applied to '(list(string), list(string))'\n | ['y'] \u003e= ['x']\n | ......^", + }, + { + original: { + name: "gte_map_unsupported", + expr: "{1:'b'} \u003e= {0:'a'}", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003e=_(\n {\n 1^#*expr.Constant_Int64Value#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n {\n 0^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:9: found no matching overload for '_\u003e=_' applied to '(map(int, string), map(int, string))'\n | {1:'b'} \u003e= {0:'a'}\n | ........^", + }, + { + original: { + name: "gte_mixed_types_error", + expr: "'foo' \u003e= 1.0", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_\u003e=_(\n "foo"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:7: found no matching overload for '_\u003e=_' applied to '(string, double)'\n | 'foo' \u003e= 1.0\n | ......^", + }, + { + original: { + name: "gte_dyn_int_uint", + expr: "dyn(2) \u003e= 1u", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "gte_dyn_int_double", + expr: "dyn(2) \u003e= 1.0", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 2~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "gte_dyn_uint_int", + expr: "dyn(2u) \u003e= 1", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "gte_dyn_uint_double", + expr: "dyn(2u) \u003e= 1.0", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "gte_dyn_double_int", + expr: "dyn(2.0) \u003e= 1", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "gte_dyn_double_uint", + expr: "dyn(2.0) \u003e= 1u", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 2~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_int_uint", + expr: "dyn(0) \u003e= 1u", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 0~int\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_int_double", + expr: "dyn(0) \u003e= 1.0", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 0~int\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_uint_int", + expr: "dyn(0u) \u003e= 1", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 0u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_uint_double", + expr: "dyn(0u) \u003e= 1.0", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 0u~uint\n )~dyn^to_dyn,\n 1~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_double_int", + expr: "dyn(0.0) \u003e= 1", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 0~double\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_double_uint", + expr: "dyn(0.0) \u003e= 1u", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 0~double\n )~dyn^to_dyn,\n 1u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_int_big_uint", + expr: "dyn(1) \u003e= 9223372036854775808u", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 9223372036854775808u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_small_int_uint", + expr: "dyn(-1) \u003e= 0u", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n -1~int\n )~dyn^to_dyn,\n 0u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "gte_dyn_int_big_lossy_double", + expr: "dyn(9223372036854775807) \u003e= 9223372036854775808.0", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854776e+18~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_int_big_double", + expr: "dyn(9223372036854775807) \u003e= 9223372036854777857.0", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 9223372036854775807~int\n )~dyn^to_dyn,\n 9.223372036854778e+18~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "gte_dyn_int_small_lossy_double_equal", + description: + "The conversion of the int to double is lossy and the numbers end up being equal", + expr: "dyn(-9223372036854775808) \u003e= -9223372036854775809.0", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854776e+18~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "gte_dyn_int_small_lossy_double_greater", + expr: "dyn(-9223372036854775808) \u003e= -9223372036854777857.0", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n -9223372036854775808^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9.223372036854778e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n -9223372036854775808~int\n )~dyn^to_dyn,\n -9.223372036854778e+18~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "gte_dyn_uint_small_int", + expr: "dyn(1u) \u003e= -1", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n -1~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "gte_dyn_big_uint_int", + expr: "dyn(9223372036854775808u) \u003e= 1", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 9223372036854775808u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 9223372036854775808u~uint\n )~dyn^to_dyn,\n 1~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "gte_dyn_uint_small_double", + expr: "dyn(9223372036854775807u) \u003e= -1.0", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 9223372036854775807u~uint\n )~dyn^to_dyn,\n -1~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "not_gte_dyn_uint_big_double", + expr: "dyn(18446744073709551615u) \u003e= 18446744073709553665.0", + value: { boolValue: false }, + }, + ast: "_\u003e=_(\n dyn(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 18446744073709551615u~uint\n )~dyn^to_dyn,\n 1.8446744073709556e+19~double\n)~bool^greater_equals_double", + type: "bool", + }, + { + original: { + name: "gte_dyn_big_double_uint", + expr: "dyn(18446744073709553665.0) \u003e= 18446744073709551615u", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 1.8446744073709556e+19^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 1.8446744073709556e+19~double\n )~dyn^to_dyn,\n 18446744073709551615u~uint\n)~bool^greater_equals_uint64", + type: "bool", + }, + { + original: { + name: "gte_dyn_big_double_int", + expr: "dyn(9223372036854775808.0) \u003e= 9223372036854775807", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n 9.223372036854776e+18~double\n )~dyn^to_dyn,\n 9223372036854775807~int\n)~bool^greater_equals_int64", + type: "bool", + }, + { + original: { + name: "gte_dyn_small_double_int", + expr: "dyn(-9223372036854775809.0) \u003e= -9223372036854775808", + value: { boolValue: true }, + }, + ast: "_\u003e=_(\n dyn(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003e=_(\n dyn(\n -9.223372036854776e+18~double\n )~dyn^to_dyn,\n -9223372036854775808~int\n)~bool^greater_equals_int64", + type: "bool", + }, + ], + }, + { + name: "in_list_literal", + tests: [ + { + original: { + name: "elem_not_in_empty_list", + expr: "'empty' in []", + value: { boolValue: false }, + }, + ast: '@in(\n "empty"^#*expr.Constant_StringValue#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "empty"~string,\n []~list(string)\n)~bool^in_list', + type: "bool", + }, + { + original: { + name: "elem_in_list", + expr: "'elem' in ['elem', 'elemA', 'elemB']", + value: { boolValue: true }, + }, + ast: '@in(\n "elem"^#*expr.Constant_StringValue#,\n [\n "elem"^#*expr.Constant_StringValue#,\n "elemA"^#*expr.Constant_StringValue#,\n "elemB"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "elem"~string,\n [\n "elem"~string,\n "elemA"~string,\n "elemB"~string\n ]~list(string)\n)~bool^in_list', + type: "bool", + }, + { + original: { + name: "elem_not_in_list", + expr: "'not' in ['elem1', 'elem2', 'elem3']", + value: { boolValue: false }, + }, + ast: '@in(\n "not"^#*expr.Constant_StringValue#,\n [\n "elem1"^#*expr.Constant_StringValue#,\n "elem2"^#*expr.Constant_StringValue#,\n "elem3"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "not"~string,\n [\n "elem1"~string,\n "elem2"~string,\n "elem3"~string\n ]~list(string)\n)~bool^in_list', + type: "bool", + }, + { + original: { + name: "elem_in_mixed_type_list", + description: + "Set membership tests should succeed if the 'elem' exists in a mixed element type list.", + expr: "'elem' in [1, 'elem', 2]", + value: { boolValue: true }, + }, + ast: '@in(\n "elem"^#*expr.Constant_StringValue#,\n [\n 1^#*expr.Constant_Int64Value#,\n "elem"^#*expr.Constant_StringValue#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "elem"~string,\n [\n 1~int,\n "elem"~string,\n 2~int\n ]~list(dyn)\n)~bool^in_list', + type: "bool", + }, + { + original: { + name: "elem_in_mixed_type_list_cross_type", + description: + "Set membership tests should return false due to the introduction of heterogeneous-equality. Set membership via 'in' is equivalent to the macro exists() behavior.", + expr: "'elem' in [1u, 'str', 2, b'bytes']", + value: { boolValue: false }, + }, + ast: '@in(\n "elem"^#*expr.Constant_StringValue#,\n [\n 1u^#*expr.Constant_Uint64Value#,\n "str"^#*expr.Constant_StringValue#,\n 2^#*expr.Constant_Int64Value#,\n b"bytes"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "elem"~string,\n [\n 1u~uint,\n "str"~string,\n 2~int,\n b"bytes"~bytes\n ]~list(dyn)\n)~bool^in_list', + type: "bool", + }, + ], + }, + { + name: "in_map_literal", + tests: [ + { + original: { + name: "key_not_in_empty_map", + expr: "'empty' in {}", + value: { boolValue: false }, + }, + ast: '@in(\n "empty"^#*expr.Constant_StringValue#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "empty"~string,\n {}~map(string, dyn)\n)~bool^in_map', + type: "bool", + }, + { + original: { + name: "key_in_map", + expr: "'key' in {'key':'1', 'other':'2'}", + value: { boolValue: true }, + }, + ast: '@in(\n "key"^#*expr.Constant_StringValue#,\n {\n "key"^#*expr.Constant_StringValue#:"1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "other"^#*expr.Constant_StringValue#:"2"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "key"~string,\n {\n "key"~string:"1"~string,\n "other"~string:"2"~string\n }~map(string, string)\n)~bool^in_map', + type: "bool", + }, + { + original: { + name: "key_not_in_map", + expr: "'key' in {'lock':1, 'gate':2}", + value: { boolValue: false }, + }, + ast: '@in(\n "key"^#*expr.Constant_StringValue#,\n {\n "lock"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "gate"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "key"~string,\n {\n "lock"~string:1~int,\n "gate"~string:2~int\n }~map(string, int)\n)~bool^in_map', + type: "bool", + }, + { + original: { + name: "key_in_mixed_key_type_map", + description: + "Map keys are of mixed type, but since the key is present the result is true.", + expr: "'key' in {3:3.0, 'key':2u}", + value: { boolValue: true }, + }, + ast: '@in(\n "key"^#*expr.Constant_StringValue#,\n {\n 3^#*expr.Constant_Int64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "key"^#*expr.Constant_StringValue#:2u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "key"~string,\n {\n 3~int:3~double,\n "key"~string:2u~uint\n }~map(dyn, dyn)\n)~bool^in_map', + type: "bool", + }, + { + original: { + name: "key_in_mixed_key_type_map_cross_type", + expr: "'key' in {1u:'str', 2:b'bytes'}", + value: { boolValue: false }, + }, + ast: '@in(\n "key"^#*expr.Constant_StringValue#,\n {\n 1u^#*expr.Constant_Uint64Value#:"str"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:b"bytes"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "key"~string,\n {\n 1u~uint:"str"~string,\n 2~int:b"bytes"~bytes\n }~map(dyn, dyn)\n)~bool^in_map', + type: "bool", + }, + ], + }, + { + name: "bound", + tests: [ + { + original: { + name: "bytes_gt_left_false", + expr: "x \u003e b'\u0000'", + typeEnv: [ + { name: "x", ident: { type: { primitive: "BYTES" } } }, + ], + bindings: { x: { value: { bytesValue: "AA==" } } }, + value: { boolValue: false }, + }, + ast: '_\u003e_(\n x^#*expr.Expr_IdentExpr#,\n b"\\x00"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n x~bytes^x,\n b"\\x00"~bytes\n)~bool^greater_bytes', + type: "bool", + }, + { + original: { + name: "int_lte_right_true", + expr: "123 \u003c= x", + typeEnv: [ + { name: "x", ident: { type: { primitive: "INT64" } } }, + ], + bindings: { x: { value: { int64Value: "124" } } }, + value: { boolValue: true }, + }, + ast: "_\u003c=_(\n 123^#*expr.Constant_Int64Value#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c=_(\n 123~int,\n x~int^x\n)~bool^less_equals_int64", + type: "bool", + }, + { + original: { + name: "bool_lt_right_true", + expr: "false \u003c x", + typeEnv: [ + { name: "x", ident: { type: { primitive: "BOOL" } } }, + ], + bindings: { x: { value: { boolValue: true } } }, + value: { boolValue: true }, + }, + ast: "_\u003c_(\n false^#*expr.Constant_BoolValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u003c_(\n false~bool,\n x~bool^x\n)~bool^less_bool", + type: "bool", + }, + { + original: { + name: "double_ne_left_false", + expr: "x != 9.8", + typeEnv: [ + { name: "x", ident: { type: { primitive: "DOUBLE" } } }, + ], + bindings: { x: { value: { doubleValue: 9.8 } } }, + value: { boolValue: false }, + }, + ast: "_!=_(\n x^#*expr.Expr_IdentExpr#,\n 9.8^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n x~double^x,\n 9.8~double\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "map_ne_right_false", + expr: "{'a':'b','c':'d'} != x", + typeEnv: [ + { + name: "x", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + x: { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "c" }, + value: { stringValue: "d" }, + }, + { + key: { stringValue: "a" }, + value: { stringValue: "b" }, + }, + ], + }, + }, + }, + }, + value: { boolValue: false }, + }, + ast: '_!=_(\n {\n "a"^#*expr.Constant_StringValue#:"b"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "c"^#*expr.Constant_StringValue#:"d"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n {\n "a"~string:"b"~string,\n "c"~string:"d"~string\n }~map(string, string),\n x~map(string, string)^x\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "null_eq_left_true", + description: + "A comparison _==_ against null only binds if the type is determined to be null or we skip the type checking", + expr: "x == null", + typeEnv: [{ name: "x", ident: { type: { null: null } } }], + bindings: { x: { value: { nullValue: null } } }, + value: { boolValue: true }, + }, + ast: "_==_(\n x^#*expr.Expr_IdentExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n x~null^x,\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "list_eq_right_false", + expr: "[1, 2] == x", + typeEnv: [ + { + name: "x", + ident: { + type: { listType: { elemType: { primitive: "INT64" } } }, + }, + }, + ], + bindings: { + x: { + value: { + listValue: { + values: [{ int64Value: "2" }, { int64Value: "1" }], + }, + }, + }, + }, + value: { boolValue: false }, + }, + ast: "_==_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n [\n 1~int,\n 2~int\n ]~list(int),\n x~list(int)^x\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "string_gte_right_true", + expr: "'abcd' \u003e= x", + typeEnv: [ + { name: "x", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { x: { value: { stringValue: "abc" } } }, + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n "abcd"^#*expr.Constant_StringValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n "abcd"~string,\n x~string^x\n)~bool^greater_equals_string', + type: "bool", + }, + { + original: { + name: "uint_eq_right_false", + expr: "999u == x", + typeEnv: [ + { name: "x", ident: { type: { primitive: "UINT64" } } }, + ], + bindings: { x: { value: { uint64Value: "1000" } } }, + value: { boolValue: false }, + }, + ast: "_==_(\n 999u^#*expr.Constant_Uint64Value#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_==_(\n 999u~uint,\n x~uint^x\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "null_lt_right_no_such_overload", + description: + "There is no _\u003c_ operation for null, even if both operands are null", + expr: "null \u003c x", + disableCheck: true, + bindings: { x: { value: { nullValue: null } } }, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "_\u003c_(\n null^#*expr.Constant_NullValue#,\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:8: undeclared reference to 'x' (in container '')\n | null \u003c x\n | .......^", + }, + ], + }, + ], + }, + { + name: "conversions", + suites: [ + { + name: "bytes", + tests: [ + { + original: { + name: "string_empty", + expr: "bytes('')", + value: { bytesValue: "" }, + }, + ast: 'bytes(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bytes(\n ""~string\n)~bytes^string_to_bytes', + type: "bytes", + }, + { + original: { + name: "string", + expr: "bytes('abc')", + value: { bytesValue: "YWJj" }, + }, + ast: 'bytes(\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bytes(\n "abc"~string\n)~bytes^string_to_bytes', + type: "bytes", + }, + { + original: { + name: "string_unicode", + expr: "bytes('ÿ')", + value: { bytesValue: "w78=" }, + }, + ast: 'bytes(\n "ÿ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bytes(\n "ÿ"~string\n)~bytes^string_to_bytes', + type: "bytes", + }, + { + original: { + name: "string_unicode_vs_literal", + expr: "bytes('\\377') == b'\\377'", + value: { boolValue: false }, + }, + ast: '_==_(\n bytes(\n "ÿ"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n b"\\xff"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n bytes(\n "ÿ"~string\n )~bytes^string_to_bytes,\n b"\\xff"~bytes\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "double", + tests: [ + { + original: { + name: "int_zero", + expr: "double(0)", + value: { doubleValue: 0 }, + }, + ast: "double(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "double(\n 0~int\n)~double^int64_to_double", + type: "double", + }, + { + original: { + name: "int_pos", + expr: "double(1000000000000)", + value: { doubleValue: 1000000000000 }, + }, + ast: "double(\n 1000000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "double(\n 1000000000000~int\n)~double^int64_to_double", + type: "double", + }, + { + original: { + name: "int_neg", + expr: "double(-1000000000000000)", + value: { doubleValue: -1000000000000000 }, + }, + ast: "double(\n -1000000000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "double(\n -1000000000000000~int\n)~double^int64_to_double", + type: "double", + }, + { + original: { + name: "int_min_exact", + description: "Smallest contiguous representable int (-2^53).", + expr: "double(-9007199254740992)", + value: { doubleValue: -9007199254740992 }, + }, + ast: "double(\n -9007199254740992^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "double(\n -9007199254740992~int\n)~double^int64_to_double", + type: "double", + }, + { + original: { + name: "int_max_exact", + description: "Largest contiguous representable int (2^53).", + expr: "double(9007199254740992)", + value: { doubleValue: 9007199254740992 }, + }, + ast: "double(\n 9007199254740992^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "double(\n 9007199254740992~int\n)~double^int64_to_double", + type: "double", + }, + { + original: { + name: "int_range", + description: "Largest signed 64-bit. Rounds to nearest double.", + expr: "double(9223372036854775807)", + value: { doubleValue: 9223372036854776000 }, + }, + ast: "double(\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "double(\n 9223372036854775807~int\n)~double^int64_to_double", + type: "double", + }, + { + original: { + name: "uint_zero", + expr: "double(0u)", + value: { doubleValue: 0 }, + }, + ast: "double(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "double(\n 0u~uint\n)~double^uint64_to_double", + type: "double", + }, + { + original: { + name: "uint_pos", + expr: "double(123u)", + value: { doubleValue: 123 }, + }, + ast: "double(\n 123u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "double(\n 123u~uint\n)~double^uint64_to_double", + type: "double", + }, + { + original: { + name: "uint_max_exact", + description: "Largest contiguous representable int (2^53).", + expr: "double(9007199254740992u)", + value: { doubleValue: 9007199254740992 }, + }, + ast: "double(\n 9007199254740992u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "double(\n 9007199254740992u~uint\n)~double^uint64_to_double", + type: "double", + }, + { + original: { + name: "uint_range", + description: "Largest unsigned 64-bit.", + expr: "double(18446744073709551615u)", + value: { doubleValue: 18446744073709552000 }, + }, + ast: "double(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "double(\n 18446744073709551615u~uint\n)~double^uint64_to_double", + type: "double", + }, + { + original: { + name: "string_zero", + expr: "double('0')", + value: { doubleValue: 0 }, + }, + ast: 'double(\n "0"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'double(\n "0"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_zero_dec", + expr: "double('0.0')", + value: { doubleValue: 0 }, + }, + ast: 'double(\n "0.0"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'double(\n "0.0"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_neg_zero", + expr: "double('-0.0')", + value: { doubleValue: 0 }, + }, + ast: 'double(\n "-0.0"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'double(\n "-0.0"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_no_dec", + expr: "double('123')", + value: { doubleValue: 123 }, + }, + ast: 'double(\n "123"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'double(\n "123"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_pos", + expr: "double('123.456')", + value: { doubleValue: 123.456 }, + }, + ast: 'double(\n "123.456"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'double(\n "123.456"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_neg", + expr: "double('-987.654')", + value: { doubleValue: -987.654 }, + }, + ast: 'double(\n "-987.654"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'double(\n "-987.654"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_exp_pos_pos", + expr: "double('6.02214e23')", + value: { doubleValue: 6.02214e23 }, + }, + ast: 'double(\n "6.02214e23"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'double(\n "6.02214e23"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_exp_pos_neg", + expr: "double('1.38e-23')", + value: { doubleValue: 1.38e-23 }, + }, + ast: 'double(\n "1.38e-23"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'double(\n "1.38e-23"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_exp_neg_pos", + expr: "double('-84.32e7')", + value: { doubleValue: -843200000 }, + }, + ast: 'double(\n "-84.32e7"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'double(\n "-84.32e7"~string\n)~double^string_to_double', + type: "double", + }, + { + original: { + name: "string_exp_neg_neg", + expr: "double('-5.43e-21')", + value: { doubleValue: -5.43e-21 }, + }, + ast: 'double(\n "-5.43e-21"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'double(\n "-5.43e-21"~string\n)~double^string_to_double', + type: "double", + }, + ], + }, + { + name: "dyn", + tests: [ + { + original: { + name: "dyn_heterogeneous_list", + description: "No need to disable type checking.", + expr: "type(dyn([1, 'one']))", + value: { typeValue: "list" }, + }, + ast: 'type(\n dyn(\n [\n 1^#*expr.Constant_Int64Value#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'type(\n dyn(\n [\n 1~int,\n "one"~string\n ]~list(dyn)\n )~dyn^to_dyn\n)~type(dyn)^type', + type: "type(dyn)", + }, + ], + }, + { + name: "int", + tests: [ + { + original: { + name: "uint", + expr: "int(42u)", + value: { int64Value: "42" }, + }, + ast: "int(\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n 42u~uint\n)~int^uint64_to_int64", + type: "int", + }, + { + original: { + name: "uint_zero", + expr: "int(0u)", + value: { int64Value: "0" }, + }, + ast: "int(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n 0u~uint\n)~int^uint64_to_int64", + type: "int", + }, + { + original: { + name: "uint_max_exact", + expr: "int(9223372036854775807u)", + value: { int64Value: "9223372036854775807" }, + }, + ast: "int(\n 9223372036854775807u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n 9223372036854775807u~uint\n)~int^uint64_to_int64", + type: "int", + }, + { + original: { + name: "uint_range", + expr: "int(18446744073709551615u)", + evalError: { errors: [{ message: "range error" }] }, + }, + ast: "int(\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n 18446744073709551615u~uint\n)~int^uint64_to_int64", + type: "int", + }, + { + original: { + name: "double_round_neg", + expr: "int(-123.456)", + value: { int64Value: "-123" }, + }, + ast: "int(\n -123.456^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n -123.456~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_truncate", + expr: "int(1.9)", + value: { int64Value: "1" }, + }, + ast: "int(\n 1.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n 1.9~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_truncate_neg", + expr: "int(-7.9)", + value: { int64Value: "-7" }, + }, + ast: "int(\n -7.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n -7.9~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_half_pos", + expr: "int(11.5)", + value: { int64Value: "11" }, + }, + ast: "int(\n 11.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n 11.5~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_half_neg", + expr: "int(-3.5)", + value: { int64Value: "-3" }, + }, + ast: "int(\n -3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n -3.5~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_big_exact", + description: + "Beyond exact range (2^53), but no loss of precision (2^55).", + expr: "int(double(36028797018963968))", + value: { int64Value: "36028797018963968" }, + }, + ast: "int(\n double(\n 36028797018963968^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n double(\n 36028797018963968~int\n )~double^int64_to_double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_big_precision", + description: + "Beyond exact range (2^53), but loses precision (2^55 + 1).", + expr: "int(double(36028797018963969))", + value: { int64Value: "36028797018963968" }, + }, + ast: "int(\n double(\n 36028797018963969^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n double(\n 36028797018963969~int\n )~double^int64_to_double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_int_max_range", + description: + "The double(2^63-1) cast produces a floating point value outside the int range", + expr: "int(9223372036854775807.0)", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "int(\n 9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n 9.223372036854776e+18~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_int_min_range", + description: + "The double(-2^63) cast produces a floating point value outside the int range", + expr: "int(-9223372036854775808.0)", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "int(\n -9.223372036854776e+18^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n -9.223372036854776e+18~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_range", + expr: "int(1e99)", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "int(\n 1e+99^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n 1e+99~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "string", + expr: "int('987')", + value: { int64Value: "987" }, + }, + ast: 'int(\n "987"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'int(\n "987"~string\n)~int^string_to_int64', + type: "int", + }, + { + original: { + name: "timestamp", + expr: "int(timestamp('2004-09-16T23:59:59Z'))", + value: { int64Value: "1095379199" }, + }, + ast: 'int(\n timestamp(\n "2004-09-16T23:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'int(\n timestamp(\n "2004-09-16T23:59:59Z"~string\n )~timestamp^string_to_timestamp\n)~int^timestamp_to_int64', + type: "int", + }, + ], + }, + { + name: "string", + tests: [ + { + original: { + name: "int", + expr: "string(123)", + value: { stringValue: "123" }, + }, + ast: "string(\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "string(\n 123~int\n)~string^int64_to_string", + type: "string", + }, + { + original: { + name: "int_neg", + expr: "string(-456)", + value: { stringValue: "-456" }, + }, + ast: "string(\n -456^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "string(\n -456~int\n)~string^int64_to_string", + type: "string", + }, + { + original: { + name: "uint", + expr: "string(9876u)", + value: { stringValue: "9876" }, + }, + ast: "string(\n 9876u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "string(\n 9876u~uint\n)~string^uint64_to_string", + type: "string", + }, + { + original: { + name: "double", + expr: "string(123.456)", + value: { stringValue: "123.456" }, + }, + ast: "string(\n 123.456^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "string(\n 123.456~double\n)~string^double_to_string", + type: "string", + }, + { + original: { + name: "double_hard", + expr: "string(-4.5e-3)", + value: { stringValue: "-0.0045" }, + }, + ast: "string(\n -0.0045^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "string(\n -0.0045~double\n)~string^double_to_string", + type: "string", + }, + { + original: { + name: "bytes", + expr: "string(b'abc')", + value: { stringValue: "abc" }, + }, + ast: 'string(\n b"abc"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'string(\n b"abc"~bytes\n)~string^bytes_to_string', + type: "string", + }, + { + original: { + name: "bytes_unicode", + expr: "string(b'\\303\\277')", + value: { stringValue: "ÿ" }, + }, + ast: 'string(\n b"ÿ"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'string(\n b"ÿ"~bytes\n)~string^bytes_to_string', + type: "string", + }, + { + original: { + name: "bytes_invalid", + expr: "string(b'\\000\\xff')", + evalError: { errors: [{ message: "invalid UTF-8" }] }, + }, + ast: 'string(\n b"\\x00\\xff"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'string(\n b"\\x00\\xff"~bytes\n)~string^bytes_to_string', + type: "string", + }, + ], + }, + { + name: "type", + tests: [ + { + original: { + name: "bool", + expr: "type(true)", + value: { typeValue: "bool" }, + }, + ast: "type(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "type(\n true~bool\n)~type(bool)^type", + type: "type(bool)", + }, + { + original: { + name: "bool_denotation", + expr: "bool", + value: { typeValue: "bool" }, + }, + ast: "bool^#*expr.Expr_IdentExpr#", + checkedAst: "bool~type(bool)^bool", + type: "type(bool)", + }, + { + original: { + name: "dyn_no_denotation", + expr: "dyn", + disableCheck: true, + evalError: { errors: [{ message: "unknown variable" }] }, + }, + ast: "dyn^#*expr.Expr_IdentExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'dyn' (in container '')\n | dyn\n | ^", + }, + { + original: { + name: "int", + expr: "type(0)", + value: { typeValue: "int" }, + }, + ast: "type(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "type(\n 0~int\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "int_denotation", + expr: "int", + value: { typeValue: "int" }, + }, + ast: "int^#*expr.Expr_IdentExpr#", + checkedAst: "int~type(int)^int", + type: "type(int)", + }, + { + original: { + name: "eq_same", + expr: "type(true) == type(false)", + value: { boolValue: true }, + }, + ast: "_==_(\n type(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n type(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n type(\n true~bool\n )~type(bool)^type,\n type(\n false~bool\n )~type(bool)^type\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "uint", + expr: "type(64u)", + value: { typeValue: "uint" }, + }, + ast: "type(\n 64u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "type(\n 64u~uint\n)~type(uint)^type", + type: "type(uint)", + }, + { + original: { + name: "uint_denotation", + expr: "uint", + value: { typeValue: "uint" }, + }, + ast: "uint^#*expr.Expr_IdentExpr#", + checkedAst: "uint~type(uint)^uint", + type: "type(uint)", + }, + { + original: { + name: "double", + expr: "type(3.14)", + value: { typeValue: "double" }, + }, + ast: "type(\n 3.14^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "type(\n 3.14~double\n)~type(double)^type", + type: "type(double)", + }, + { + original: { + name: "double_denotation", + expr: "double", + value: { typeValue: "double" }, + }, + ast: "double^#*expr.Expr_IdentExpr#", + checkedAst: "double~type(double)^double", + type: "type(double)", + }, + { + original: { + name: "null_type", + expr: "type(null)", + value: { typeValue: "null_type" }, + }, + ast: "type(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "type(\n null~null\n)~type(null)^type", + type: "type(null)", + }, + { + original: { + name: "null_type_denotation", + expr: "null_type", + value: { typeValue: "null_type" }, + }, + ast: "null_type^#*expr.Expr_IdentExpr#", + checkedAst: "null_type~type(null)^null_type", + type: "type(null)", + }, + { + original: { + name: "string", + expr: "type('foo')", + value: { typeValue: "string" }, + }, + ast: 'type(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'type(\n "foo"~string\n)~type(string)^type', + type: "type(string)", + }, + { + original: { + name: "string_denotation", + expr: "string", + value: { typeValue: "string" }, + }, + ast: "string^#*expr.Expr_IdentExpr#", + checkedAst: "string~type(string)^string", + type: "type(string)", + }, + { + original: { + name: "bytes", + expr: "type(b'\\xff')", + value: { typeValue: "bytes" }, + }, + ast: 'type(\n b"\\xff"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'type(\n b"\\xff"~bytes\n)~type(bytes)^type', + type: "type(bytes)", + }, + { + original: { + name: "bytes_denotation", + expr: "bytes", + value: { typeValue: "bytes" }, + }, + ast: "bytes^#*expr.Expr_IdentExpr#", + checkedAst: "bytes~type(bytes)^bytes", + type: "type(bytes)", + }, + { + original: { + name: "list", + expr: "type([1, 2, 3])", + value: { typeValue: "list" }, + }, + ast: "type(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~type(list(int))^type", + type: "type(list(int))", + }, + { + original: { + name: "list_denotation", + expr: "list", + value: { typeValue: "list" }, + }, + ast: "list^#*expr.Expr_IdentExpr#", + checkedAst: "list~type(list(dyn))^list", + type: "type(list(dyn))", + }, + { + original: { + name: "lists_monomorphic", + expr: "type([1, 2, 3]) == type(['one', 'two', 'three'])", + value: { boolValue: true }, + }, + ast: '_==_(\n type(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n [\n "one"^#*expr.Constant_StringValue#,\n "two"^#*expr.Constant_StringValue#,\n "three"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n type(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n )~type(list(int))^type,\n type(\n [\n "one"~string,\n "two"~string,\n "three"~string\n ]~list(string)\n )~type(list(string))^type\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "map", + expr: "type({4: 16})", + value: { typeValue: "map" }, + }, + ast: "type(\n {\n 4^#*expr.Constant_Int64Value#:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n {\n 4~int:16~int\n }~map(int, int)\n)~type(map(int, int))^type", + type: "type(map(int, int))", + }, + { + original: { + name: "map_denotation", + expr: "map", + value: { typeValue: "map" }, + }, + ast: "map^#*expr.Expr_IdentExpr#", + checkedAst: "map~type(map(dyn, dyn))^map", + type: "type(map(dyn, dyn))", + }, + { + original: { + name: "map_monomorphic", + expr: "type({'one': 1}) == type({1: 'one'})", + value: { boolValue: true }, + }, + ast: '_==_(\n type(\n {\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n {\n 1^#*expr.Constant_Int64Value#:"one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n type(\n {\n "one"~string:1~int\n }~map(string, int)\n )~type(map(string, int))^type,\n type(\n {\n 1~int:"one"~string\n }~map(int, string)\n )~type(map(int, string))^type\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_diff", + expr: "type(7) == type(7u)", + value: { boolValue: false }, + }, + ast: "_==_(\n type(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n type(\n 7u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n type(\n 7~int\n )~type(int)^type,\n type(\n 7u~uint\n )~type(uint)^type\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "neq_same", + expr: "type(0.0) != type(-0.0)", + value: { boolValue: false }, + }, + ast: "_!=_(\n type(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n type(\n -0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n type(\n 0~double\n )~type(double)^type,\n type(\n -0~double\n )~type(double)^type\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "neq_diff", + expr: "type(0.0) != type(0)", + value: { boolValue: true }, + }, + ast: "_!=_(\n type(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n type(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n type(\n 0~double\n )~type(double)^type,\n type(\n 0~int\n )~type(int)^type\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "meta", + expr: "type(type(7)) == type(type(7u))", + value: { boolValue: true }, + }, + ast: "_==_(\n type(\n type(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n type(\n type(\n 7u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n type(\n type(\n 7~int\n )~type(int)^type\n )~type(type(int))^type,\n type(\n type(\n 7u~uint\n )~type(uint)^type\n )~type(type(uint))^type\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "type", + expr: "type(int)", + value: { typeValue: "type" }, + }, + ast: "type(\n int^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: "type(\n int~type(int)^int\n)~type(type(int))^type", + type: "type(type(int))", + }, + { + original: { + name: "type_denotation", + expr: "type", + value: { typeValue: "type" }, + }, + ast: "type^#*expr.Expr_IdentExpr#", + checkedAst: "type~type(type)^type", + type: "type(type)", + }, + { + original: { + name: "type_type", + expr: "type(type)", + value: { typeValue: "type" }, + }, + ast: "type(\n type^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n type~type(type)^type\n)~type(type(type))^type", + type: "type(type(type))", + }, + ], + }, + { + name: "uint", + tests: [ + { + original: { + name: "int", + expr: "uint(1729)", + value: { uint64Value: "1729" }, + }, + ast: "uint(\n 1729^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "uint(\n 1729~int\n)~uint^int64_to_uint64", + type: "uint", + }, + { + original: { + name: "int_max", + expr: "uint(9223372036854775807)", + value: { uint64Value: "9223372036854775807" }, + }, + ast: "uint(\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "uint(\n 9223372036854775807~int\n)~uint^int64_to_uint64", + type: "uint", + }, + { + original: { + name: "int_neg", + expr: "uint(-1)", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "uint(\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "uint(\n -1~int\n)~uint^int64_to_uint64", + type: "uint", + }, + { + original: { + name: "double", + expr: "uint(3.14159265)", + value: { uint64Value: "3" }, + }, + ast: "uint(\n 3.14159265^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "uint(\n 3.14159265~double\n)~uint^double_to_uint64", + type: "uint", + }, + { + original: { + name: "double_truncate", + expr: "uint(1.9)", + value: { uint64Value: "1" }, + }, + ast: "uint(\n 1.9^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "uint(\n 1.9~double\n)~uint^double_to_uint64", + type: "uint", + }, + { + original: { + name: "double_half", + expr: "uint(25.5)", + value: { uint64Value: "25" }, + }, + ast: "uint(\n 25.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "uint(\n 25.5~double\n)~uint^double_to_uint64", + type: "uint", + }, + { + original: { + name: "double_big_exact", + description: + "Beyond exact range (2^53), but no loss of precision (2^55).", + expr: "uint(double(36028797018963968u))", + value: { uint64Value: "36028797018963968" }, + }, + ast: "uint(\n double(\n 36028797018963968u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "uint(\n double(\n 36028797018963968u~uint\n )~double^uint64_to_double\n)~uint^double_to_uint64", + type: "uint", + }, + { + original: { + name: "double_big_precision", + description: + "Beyond exact range (2^53), but loses precision (2^55 + 1).", + expr: "uint(double(36028797018963969u))", + value: { uint64Value: "36028797018963968" }, + }, + ast: "uint(\n double(\n 36028797018963969u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "uint(\n double(\n 36028797018963969u~uint\n )~double^uint64_to_double\n)~uint^double_to_uint64", + type: "uint", + }, + { + original: { + name: "double_uint_max_range", + description: + "The exact conversion of uint max as a double does not round trip.", + expr: "int(18446744073709551615.0)", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "int(\n 1.8446744073709552e+19^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n 1.8446744073709552e+19~double\n)~int^double_to_int64", + type: "int", + }, + { + original: { + name: "double_range_beyond_uint", + expr: "uint(6.022e23)", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "uint(\n 6.022e+23^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "uint(\n 6.022e+23~double\n)~uint^double_to_uint64", + type: "uint", + }, + { + original: { + name: "string", + expr: "uint('300')", + value: { uint64Value: "300" }, + }, + ast: 'uint(\n "300"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'uint(\n "300"~string\n)~uint^string_to_uint64', + type: "uint", + }, + ], + }, + { + name: "bool", + tests: [ + { + original: { + name: "string_1", + expr: "bool('1')", + value: { boolValue: true }, + }, + ast: 'bool(\n "1"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "1"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_t", + expr: "bool('t')", + value: { boolValue: true }, + }, + ast: 'bool(\n "t"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "t"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_true_lowercase", + expr: "bool('true')", + value: { boolValue: true }, + }, + ast: 'bool(\n "true"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "true"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_true_uppercase", + expr: "bool('TRUE')", + value: { boolValue: true }, + }, + ast: 'bool(\n "TRUE"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "TRUE"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_true_pascalcase", + expr: "bool('True')", + value: { boolValue: true }, + }, + ast: 'bool(\n "True"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "True"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_0", + expr: "bool('0')", + value: { boolValue: false }, + }, + ast: 'bool(\n "0"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "0"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_f", + expr: "bool('f')", + value: { boolValue: false }, + }, + ast: 'bool(\n "f"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "f"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_false_lowercase", + expr: "bool('false')", + value: { boolValue: false }, + }, + ast: 'bool(\n "false"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "false"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_false_uppercase", + expr: "bool('FALSE')", + value: { boolValue: false }, + }, + ast: 'bool(\n "FALSE"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "FALSE"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_false_pascalcase", + expr: "bool('False')", + value: { boolValue: false }, + }, + ast: 'bool(\n "False"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "False"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_true_badcase", + expr: "bool('TrUe')", + evalError: { errors: [{ message: "Type conversion error" }] }, + }, + ast: 'bool(\n "TrUe"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "TrUe"~string\n)~bool^string_to_bool', + type: "bool", + }, + { + original: { + name: "string_false_badcase", + expr: "bool('FaLsE')", + evalError: { errors: [{ message: "Type conversion error" }] }, + }, + ast: 'bool(\n "FaLsE"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bool(\n "FaLsE"~string\n)~bool^string_to_bool', + type: "bool", + }, + ], + }, + { + name: "identity", + tests: [ + { + original: { + name: "bool", + expr: "bool(true)", + value: { boolValue: true }, + }, + ast: "bool(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "bool(\n true~bool\n)~bool^bool_to_bool", + type: "bool", + }, + { + original: { + name: "int", + expr: "int(1)", + value: { int64Value: "1" }, + }, + ast: "int(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "int(\n 1~int\n)~int^int64_to_int64", + type: "int", + }, + { + original: { + name: "uint", + expr: "uint(1u)", + value: { uint64Value: "1" }, + }, + ast: "uint(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "uint(\n 1u~uint\n)~uint^uint64_to_uint64", + type: "uint", + }, + { + original: { + name: "double", + expr: "double(5.5)", + value: { doubleValue: 5.5 }, + }, + ast: "double(\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "double(\n 5.5~double\n)~double^double_to_double", + type: "double", + }, + { + original: { + name: "string", + expr: "string('hello')", + value: { stringValue: "hello" }, + }, + ast: 'string(\n "hello"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'string(\n "hello"~string\n)~string^string_to_string', + type: "string", + }, + { + original: { + name: "bytes", + expr: "bytes(b'abc')", + value: { bytesValue: "YWJj" }, + }, + ast: 'bytes(\n b"abc"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'bytes(\n b"abc"~bytes\n)~bytes^bytes_to_bytes', + type: "bytes", + }, + { + original: { + name: "duration", + expr: "duration(duration('100s')) == duration('100s')", + value: { boolValue: true }, + }, + ast: '_==_(\n duration(\n duration(\n "100s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n "100s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n duration(\n duration(\n "100s"~string\n )~duration^string_to_duration\n )~duration^duration_to_duration,\n duration(\n "100s"~string\n )~duration^string_to_duration\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "timestamp", + expr: "timestamp(timestamp(1000000000)) == timestamp(1000000000)", + value: { boolValue: true }, + }, + ast: "_==_(\n timestamp(\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n 1000000000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n timestamp(\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp\n )~timestamp^timestamp_to_timestamp,\n timestamp(\n 1000000000~int\n )~timestamp^int64_to_timestamp\n)~bool^equals", + type: "bool", + }, + ], + }, + ], + }, + { + name: "dynamic", + suites: [ + { + name: "int32", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Int32Value{value: -123}", + value: { int64Value: "-123" }, + }, + ast: "google.protobuf.Int32Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Int32Value{\n value:-123~int\n}~wrapper(int)^google.protobuf.Int32Value", + type: "wrapper(int)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Int32Value{value: -123}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.Int32Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:40: type 'wrapper(int)' does not support field selection\n | google.protobuf.Int32Value{value: -123}.value\n | .......................................^", + }, + { + original: { + name: "literal_zero", + expr: "google.protobuf.Int32Value{}", + value: { int64Value: "0" }, + }, + ast: "google.protobuf.Int32Value{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Int32Value{}~wrapper(int)^google.protobuf.Int32Value", + type: "wrapper(int)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.Int32Value" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.Int32Value", + value: 2000000, + }, + }, + }, + }, + value: { int64Value: "2000000" }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(int)^x", + type: "wrapper(int)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_int32_wrapper: 432}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32Wrapper: 432, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:432^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:432~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_zero", + expr: "TestAllTypes{single_int32_wrapper: 0}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32Wrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_max", + expr: "TestAllTypes{single_int32_wrapper: 2147483647}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32Wrapper: 2147483647, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:2147483647^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:2147483647~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_min", + expr: "TestAllTypes{single_int32_wrapper: -2147483648}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32Wrapper: -2147483648, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:-2147483648^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:-2147483648~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_range", + expr: "TestAllTypes{single_int32_wrapper: 12345678900}", + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "range error" }] }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:12345678900^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:12345678900~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper", + container: "cel.expr.conformance.proto2", + value: { int64Value: "642" }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:642^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:642~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + { + original: { + name: "field_read_proto2_zero", + expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper", + container: "cel.expr.conformance.proto2", + value: { int64Value: "0" }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + { + original: { + name: "field_read_proto2_unset", + expr: "TestAllTypes{}.single_int32_wrapper", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_int32_wrapper: -975}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32Wrapper: -975, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:-975^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-975~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_zero", + expr: "TestAllTypes{single_int32_wrapper: 0}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32Wrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_max", + expr: "TestAllTypes{single_int32_wrapper: 2147483647}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32Wrapper: 2147483647, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:2147483647^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:2147483647~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_min", + expr: "TestAllTypes{single_int32_wrapper: -2147483648}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32Wrapper: -2147483648, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:-2147483648^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-2147483648~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_range", + expr: "TestAllTypes{single_int32_wrapper: -998877665544332211}", + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "range error" }] }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:-998877665544332211^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-998877665544332211~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper", + container: "cel.expr.conformance.proto3", + value: { int64Value: "642" }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:642^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:642~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + { + original: { + name: "field_read_proto3_zero", + expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper", + container: "cel.expr.conformance.proto3", + value: { int64Value: "0" }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + { + original: { + name: "field_read_proto3_unset", + expr: "TestAllTypes{}.single_int32_wrapper", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + ], + }, + { + name: "int64", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Int64Value{value: -123}", + value: { int64Value: "-123" }, + }, + ast: "google.protobuf.Int64Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Int64Value{\n value:-123~int\n}~wrapper(int)^google.protobuf.Int64Value", + type: "wrapper(int)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Int64Value{value: -123}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.Int64Value{\n value:-123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:40: type 'wrapper(int)' does not support field selection\n | google.protobuf.Int64Value{value: -123}.value\n | .......................................^", + }, + { + original: { + name: "literal_zero", + expr: "google.protobuf.Int64Value{}", + value: { int64Value: "0" }, + }, + ast: "google.protobuf.Int64Value{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Int64Value{}~wrapper(int)^google.protobuf.Int64Value", + type: "wrapper(int)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.Int64Value" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.Int64Value", + value: "2000000", + }, + }, + }, + }, + value: { int64Value: "2000000" }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(int)^x", + type: "wrapper(int)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_int64_wrapper: 432}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt64Wrapper: "432", + }, + }, + }, + ast: "TestAllTypes{\n single_int64_wrapper:432^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:432~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_zero", + expr: "TestAllTypes{single_int64_wrapper: 0}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt64Wrapper: "0", + }, + }, + }, + ast: "TestAllTypes{\n single_int64_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_int64_wrapper: -975}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt64Wrapper: "-975", + }, + }, + }, + ast: "TestAllTypes{\n single_int64_wrapper:-975^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:-975~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_zero", + expr: "TestAllTypes{single_int64_wrapper: 0}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt64Wrapper: "0", + }, + }, + }, + ast: "TestAllTypes{\n single_int64_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + { + name: "uint32", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.UInt32Value{value: 123u}", + value: { uint64Value: "123" }, + }, + ast: "google.protobuf.UInt32Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.UInt32Value{\n value:123u~uint\n}~wrapper(uint)^google.protobuf.UInt32Value", + type: "wrapper(uint)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.UInt32Value{value: 123u}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.UInt32Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:41: type 'wrapper(uint)' does not support field selection\n | google.protobuf.UInt32Value{value: 123u}.value\n | ........................................^", + }, + { + original: { + name: "literal_zero", + expr: "google.protobuf.UInt32Value{}", + value: { uint64Value: "0" }, + }, + ast: "google.protobuf.UInt32Value{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.UInt32Value{}~wrapper(uint)^google.protobuf.UInt32Value", + type: "wrapper(uint)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.UInt32Value" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.UInt32Value", + value: 2000000, + }, + }, + }, + }, + value: { uint64Value: "2000000" }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(uint)^x", + type: "wrapper(uint)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_uint32_wrapper: 432u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint32Wrapper: 432, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:432u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:432u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_zero", + expr: "TestAllTypes{single_uint32_wrapper: 0u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint32Wrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_max", + expr: "TestAllTypes{single_uint32_wrapper: 4294967295u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint32Wrapper: 4294967295, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:4294967295u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:4294967295u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_range", + expr: "TestAllTypes{single_uint32_wrapper: 6111222333u}", + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "range error" }] }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:6111222333u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:6111222333u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_uint32_wrapper: 975u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint32Wrapper: 975, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:975u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:975u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_zero", + expr: "TestAllTypes{single_uint32_wrapper: 0u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint32Wrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_max", + expr: "TestAllTypes{single_uint32_wrapper: 4294967295u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint32Wrapper: 4294967295, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:4294967295u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:4294967295u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_range", + expr: "TestAllTypes{single_uint32_wrapper: 6111222333u}", + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "range error" }] }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:6111222333u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:6111222333u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_uint32_wrapper: 258u}.single_uint32_wrapper", + container: "cel.expr.conformance.proto2", + value: { uint64Value: "258" }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:258u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:258u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)", + type: "wrapper(uint)", + }, + { + original: { + name: "field_read_proto2_zero", + expr: "TestAllTypes{single_uint32_wrapper: 0u}.single_uint32_wrapper", + container: "cel.expr.conformance.proto2", + value: { uint64Value: "0" }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)", + type: "wrapper(uint)", + }, + { + original: { + name: "field_read_proto2_unset", + expr: "TestAllTypes{}.single_uint32_wrapper", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper~wrapper(uint)", + type: "wrapper(uint)", + }, + ], + }, + { + name: "uint64", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.UInt64Value{value: 123u}", + value: { uint64Value: "123" }, + }, + ast: "google.protobuf.UInt64Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.UInt64Value{\n value:123u~uint\n}~wrapper(uint)^google.protobuf.UInt64Value", + type: "wrapper(uint)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.UInt64Value{value: 123u}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.UInt64Value{\n value:123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:41: type 'wrapper(uint)' does not support field selection\n | google.protobuf.UInt64Value{value: 123u}.value\n | ........................................^", + }, + { + original: { + name: "literal_zero", + expr: "google.protobuf.UInt64Value{}", + value: { uint64Value: "0" }, + }, + ast: "google.protobuf.UInt64Value{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.UInt64Value{}~wrapper(uint)^google.protobuf.UInt64Value", + type: "wrapper(uint)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.UInt64Value" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.UInt64Value", + value: "2000000", + }, + }, + }, + }, + value: { uint64Value: "2000000" }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(uint)^x", + type: "wrapper(uint)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_uint64_wrapper: 432u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint64Wrapper: "432", + }, + }, + }, + ast: "TestAllTypes{\n single_uint64_wrapper:432u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:432u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_zero", + expr: "TestAllTypes{single_uint64_wrapper: 0u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint64Wrapper: "0", + }, + }, + }, + ast: "TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_uint64_wrapper: 975u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint64Wrapper: "975", + }, + }, + }, + ast: "TestAllTypes{\n single_uint64_wrapper:975u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:975u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_zero", + expr: "TestAllTypes{single_uint64_wrapper: 0u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint64Wrapper: "0", + }, + }, + }, + ast: "TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_uint64_wrapper: 5123123123u}.single_uint64_wrapper", + container: "cel.expr.conformance.proto2", + value: { uint64Value: "5123123123" }, + }, + ast: "TestAllTypes{\n single_uint64_wrapper:5123123123u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:5123123123u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)", + type: "wrapper(uint)", + }, + { + original: { + name: "field_read_proto2_zero", + expr: "TestAllTypes{single_uint64_wrapper: 0u}.single_uint64_wrapper", + container: "cel.expr.conformance.proto2", + value: { uint64Value: "0" }, + }, + ast: "TestAllTypes{\n single_uint64_wrapper:0u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:0u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)", + type: "wrapper(uint)", + }, + { + original: { + name: "field_read_proto2_unset", + expr: "TestAllTypes{}.single_uint64_wrapper", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_uint64_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper~wrapper(uint)", + type: "wrapper(uint)", + }, + ], + }, + { + name: "float", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.FloatValue{value: -1.5e3}", + value: { doubleValue: -1500 }, + }, + ast: "google.protobuf.FloatValue{\n value:-1500^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.FloatValue{\n value:-1500~double\n}~wrapper(double)^google.protobuf.FloatValue", + type: "wrapper(double)", + }, + { + original: { + name: "literal_not_double", + description: + "Use a number with no exact representation to make sure we actually narrow to a float.", + expr: "google.protobuf.FloatValue{value: 1.333} == 1.333", + value: { boolValue: false }, + }, + ast: "_==_(\n google.protobuf.FloatValue{\n value:1.333^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1.333^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.FloatValue{\n value:1.333~double\n }~wrapper(double)^google.protobuf.FloatValue,\n 1.333~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.FloatValue{value: 3.1416}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.FloatValue{\n value:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:42: type 'wrapper(double)' does not support field selection\n | google.protobuf.FloatValue{value: 3.1416}.value\n | .........................................^", + }, + { + original: { + name: "literal_zero", + expr: "google.protobuf.FloatValue{}", + value: { doubleValue: 0 }, + }, + ast: "google.protobuf.FloatValue{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.FloatValue{}~wrapper(double)^google.protobuf.FloatValue", + type: "wrapper(double)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.FloatValue" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.FloatValue", + value: -1250000, + }, + }, + }, + }, + value: { doubleValue: -1250000 }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(double)^x", + type: "wrapper(double)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_float_wrapper: 86.75}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFloatWrapper: 86.75, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:86.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:86.75~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_zero", + expr: "TestAllTypes{single_float_wrapper: 0.0}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFloatWrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_subnorm", + description: + "Subnormal single floats range from ~1e-38 to ~1e-45.", + expr: "TestAllTypes{single_float_wrapper: 1e-40}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFloatWrapper: 1e-40, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:1e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-40~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_round_to_zero", + description: + "Subnormal single floats range from ~1e-38 to ~1e-45.", + expr: "TestAllTypes{single_float_wrapper: 1e-50}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFloatWrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:1e-50^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-50~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_range", + description: "Single float max is about 3.4e38", + expr: "TestAllTypes{single_float_wrapper: 1.4e55}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFloatWrapper: "Infinity", + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:1.4e+55^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1.4e+55~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_float_wrapper: -12.375}.single_float_wrapper", + container: "cel.expr.conformance.proto2", + value: { doubleValue: -12.375 }, + }, + ast: "TestAllTypes{\n single_float_wrapper:-12.375^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:-12.375~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_read_proto2_zero", + expr: "TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper", + container: "cel.expr.conformance.proto2", + value: { doubleValue: 0 }, + }, + ast: "TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_read_proto2_unset", + expr: "TestAllTypes{}.single_float_wrapper", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_float_wrapper: -9.75}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleFloatWrapper: -9.75, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:-9.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.75~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_zero", + expr: "TestAllTypes{single_float_wrapper: 0.0}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleFloatWrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_subnorm", + description: + "Subnormal single floats range from ~1e-38 to ~1e-45.", + expr: "TestAllTypes{single_float_wrapper: 1e-40}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFloatWrapper: 1e-40, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:1e-40^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:1e-40~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_round_to_zero", + expr: "TestAllTypes{single_float_wrapper: -9.9e-100}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleFloatWrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:-9.9e-100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.9e-100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_range", + description: "Single float min is about -3.4e38", + expr: "TestAllTypes{single_float_wrapper: -9.9e100}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleFloatWrapper: "-Infinity", + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:-9.9e+100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:-9.9e+100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_float_wrapper: 64.25}.single_float_wrapper", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 64.25 }, + }, + ast: "TestAllTypes{\n single_float_wrapper:64.25^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:64.25~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_read_proto3_zero", + expr: "TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 0 }, + }, + ast: "TestAllTypes{\n single_float_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_read_proto3_unset", + expr: "TestAllTypes{}.single_float_wrapper", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_float_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + ], + }, + { + name: "double", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.DoubleValue{value: -1.5e3}", + value: { doubleValue: -1500 }, + }, + ast: "google.protobuf.DoubleValue{\n value:-1500^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.DoubleValue{\n value:-1500~double\n}~wrapper(double)^google.protobuf.DoubleValue", + type: "wrapper(double)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.DoubleValue{value: 3.1416}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.DoubleValue{\n value:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:43: type 'wrapper(double)' does not support field selection\n | google.protobuf.DoubleValue{value: 3.1416}.value\n | ..........................................^", + }, + { + original: { + name: "literal_zero", + expr: "google.protobuf.DoubleValue{}", + value: { doubleValue: 0 }, + }, + ast: "google.protobuf.DoubleValue{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.DoubleValue{}~wrapper(double)^google.protobuf.DoubleValue", + type: "wrapper(double)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.DoubleValue" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.DoubleValue", + value: -1250000, + }, + }, + }, + }, + value: { doubleValue: -1250000 }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(double)^x", + type: "wrapper(double)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_double_wrapper: 86.75}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleDoubleWrapper: 86.75, + }, + }, + }, + ast: "TestAllTypes{\n single_double_wrapper:86.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:86.75~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_zero", + expr: "TestAllTypes{single_double_wrapper: 0.0}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleDoubleWrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_range", + expr: "TestAllTypes{single_double_wrapper: 1.4e55}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleDoubleWrapper: 1.4e55, + }, + }, + }, + ast: "TestAllTypes{\n single_double_wrapper:1.4e+55^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:1.4e+55~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_double_wrapper: -12.375}.single_double_wrapper", + container: "cel.expr.conformance.proto2", + value: { doubleValue: -12.375 }, + }, + ast: "TestAllTypes{\n single_double_wrapper:-12.375^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:-12.375~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_read_proto2_zero", + expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper", + container: "cel.expr.conformance.proto2", + value: { int64Value: "0" }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:0~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + { + original: { + name: "field_read_proto2_unset", + expr: "TestAllTypes{}.single_double_wrapper", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_double_wrapper: -9.75}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleDoubleWrapper: -9.75, + }, + }, + }, + ast: "TestAllTypes{\n single_double_wrapper:-9.75^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:-9.75~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_zero", + expr: "TestAllTypes{single_double_wrapper: 0.0}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleDoubleWrapper: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_range", + expr: "TestAllTypes{single_double_wrapper: -9.9e100}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleDoubleWrapper: -9.9e100, + }, + }, + }, + ast: "TestAllTypes{\n single_double_wrapper:-9.9e+100^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:-9.9e+100~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_double_wrapper: 64.25}.single_double_wrapper", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 64.25 }, + }, + ast: "TestAllTypes{\n single_double_wrapper:64.25^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:64.25~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_read_proto3_zero", + expr: "TestAllTypes{single_double_wrapper: 0.0}.single_double_wrapper", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 0 }, + }, + ast: "TestAllTypes{\n single_double_wrapper:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + { + original: { + name: "field_read_proto3_unset", + expr: "TestAllTypes{}.single_double_wrapper", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_double_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper~wrapper(double)", + type: "wrapper(double)", + }, + ], + }, + { + name: "bool", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.BoolValue{value: true}", + value: { boolValue: true }, + }, + ast: "google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.BoolValue{\n value:true~bool\n}~wrapper(bool)^google.protobuf.BoolValue", + type: "wrapper(bool)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.BoolValue{value: true}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:39: type 'wrapper(bool)' does not support field selection\n | google.protobuf.BoolValue{value: true}.value\n | ......................................^", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.BoolValue{}", + value: { boolValue: false }, + }, + ast: "google.protobuf.BoolValue{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.BoolValue{}~wrapper(bool)^google.protobuf.BoolValue", + type: "wrapper(bool)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.BoolValue" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.BoolValue", + value: true, + }, + }, + }, + }, + value: { boolValue: true }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(bool)^x", + type: "wrapper(bool)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_bool_wrapper: true}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleBoolWrapper: true, + }, + }, + }, + ast: "TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_false", + expr: "TestAllTypes{single_bool_wrapper: false}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleBoolWrapper: false, + }, + }, + }, + ast: "TestAllTypes{\n single_bool_wrapper:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_bool_wrapper: true}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleBoolWrapper: true, + }, + }, + }, + ast: "TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_false", + expr: "TestAllTypes{single_bool_wrapper: false}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleBoolWrapper: false, + }, + }, + }, + ast: "TestAllTypes{\n single_bool_wrapper:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + { + name: "string", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.StringValue{value: 'foo'}", + value: { stringValue: "foo" }, + }, + ast: 'google.protobuf.StringValue{\n value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.StringValue{\n value:"foo"~string\n}~wrapper(string)^google.protobuf.StringValue', + type: "wrapper(string)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.StringValue{value: 'foo'}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: 'google.protobuf.StringValue{\n value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#', + error: + "ERROR: \u003cinput\u003e:1:42: type 'wrapper(string)' does not support field selection\n | google.protobuf.StringValue{value: 'foo'}.value\n | .........................................^", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.StringValue{}", + value: { stringValue: "" }, + }, + ast: "google.protobuf.StringValue{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.StringValue{}~wrapper(string)^google.protobuf.StringValue", + type: "wrapper(string)", + }, + { + original: { + name: "literal_unicode", + expr: "google.protobuf.StringValue{value: 'flambé'}", + value: { stringValue: "flambé" }, + }, + ast: 'google.protobuf.StringValue{\n value:"flambé"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.StringValue{\n value:"flambé"~string\n}~wrapper(string)^google.protobuf.StringValue', + type: "wrapper(string)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.StringValue" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.StringValue", + value: "bar", + }, + }, + }, + }, + value: { stringValue: "bar" }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(string)^x", + type: "wrapper(string)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_string_wrapper: 'baz'}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleStringWrapper: "baz", + }, + }, + }, + ast: 'TestAllTypes{\n single_string_wrapper:"baz"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:"baz"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_empty", + expr: "TestAllTypes{single_string_wrapper: ''}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleStringWrapper: "", + }, + }, + }, + ast: 'TestAllTypes{\n single_string_wrapper:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:""~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_string_wrapper: 'bletch'}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleStringWrapper: "bletch", + }, + }, + }, + ast: 'TestAllTypes{\n single_string_wrapper:"bletch"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:"bletch"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_empty", + expr: "TestAllTypes{single_string_wrapper: ''}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleStringWrapper: "", + }, + }, + }, + ast: 'TestAllTypes{\n single_string_wrapper:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:""~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + { + name: "bytes", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.BytesValue{value: b'foo\\123'}", + value: { bytesValue: "Zm9vUw==" }, + }, + ast: 'google.protobuf.BytesValue{\n value:b"fooS"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.BytesValue{\n value:b"fooS"~bytes\n}~wrapper(bytes)^google.protobuf.BytesValue', + type: "wrapper(bytes)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.BytesValue{value: b'foo'}.value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: 'google.protobuf.BytesValue{\n value:b"foo"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.value^#*expr.Expr_SelectExpr#', + error: + "ERROR: \u003cinput\u003e:1:42: type 'wrapper(bytes)' does not support field selection\n | google.protobuf.BytesValue{value: b'foo'}.value\n | .........................................^", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.BytesValue{}", + value: { bytesValue: "" }, + }, + ast: "google.protobuf.BytesValue{}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.BytesValue{}~wrapper(bytes)^google.protobuf.BytesValue", + type: "wrapper(bytes)", + }, + { + original: { + name: "literal_unicode", + expr: "google.protobuf.BytesValue{value: b'flambé'}", + value: { bytesValue: "ZmxhbWLDqQ==" }, + }, + ast: 'google.protobuf.BytesValue{\n value:b"flambé"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.BytesValue{\n value:b"flambé"~bytes\n}~wrapper(bytes)^google.protobuf.BytesValue', + type: "wrapper(bytes)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.BytesValue" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.BytesValue", + value: "YmFy", + }, + }, + }, + }, + value: { bytesValue: "YmFy" }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~wrapper(bytes)^x", + type: "wrapper(bytes)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_bytes_wrapper: b'baz'}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleBytesWrapper: "YmF6", + }, + }, + }, + ast: 'TestAllTypes{\n single_bytes_wrapper:b"baz"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b"baz"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_empty", + expr: "TestAllTypes{single_bytes_wrapper: b''}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleBytesWrapper: "", + }, + }, + }, + ast: 'TestAllTypes{\n single_bytes_wrapper:b""^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b""~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_bytes_wrapper: b'bletch'}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleBytesWrapper: "YmxldGNo", + }, + }, + }, + ast: 'TestAllTypes{\n single_bytes_wrapper:b"bletch"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b"bletch"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_empty", + expr: "TestAllTypes{single_bytes_wrapper: b''}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleBytesWrapper: "", + }, + }, + }, + ast: 'TestAllTypes{\n single_bytes_wrapper:b""^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b""~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + { + name: "list", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.ListValue{values: [3.0, 'foo', null]}", + value: { + listValue: { + values: [ + { doubleValue: 3 }, + { stringValue: "foo" }, + { nullValue: null }, + ], + }, + }, + }, + ast: 'google.protobuf.ListValue{\n values:[\n 3^#*expr.Constant_DoubleValue#,\n "foo"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.ListValue{\n values:[\n 3~double,\n "foo"~string,\n null~null\n ]~list(dyn)\n}~list(dyn)^google.protobuf.ListValue', + type: "list(dyn)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.ListValue{values: [3.0, 'foo', null]}.values", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: 'google.protobuf.ListValue{\n values:[\n 3^#*expr.Constant_DoubleValue#,\n "foo"^#*expr.Constant_StringValue#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.values^#*expr.Expr_SelectExpr#', + error: + "ERROR: \u003cinput\u003e:1:54: type 'list(dyn)' does not support field selection\n | google.protobuf.ListValue{values: [3.0, 'foo', null]}.values\n | .....................................................^", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.ListValue{values: []}", + value: { listValue: {} }, + }, + ast: "google.protobuf.ListValue{\n values:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.ListValue{\n values:[]~list(dyn)\n}~list(dyn)^google.protobuf.ListValue", + type: "list(dyn)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.ListValue" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/google.protobuf.ListValue", + value: ["bar", ["a", "b"]], + }, + }, + }, + }, + value: { + listValue: { + values: [ + { stringValue: "bar" }, + { + listValue: { + values: [{ stringValue: "a" }, { stringValue: "b" }], + }, + }, + ], + }, + }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~list(dyn)^x", + type: "list(dyn)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{list_value: [1.0, 'one']}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + listValue: [1, "one"], + }, + }, + }, + ast: 'TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n list_value:[\n 1~double,\n "one"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_empty", + expr: "TestAllTypes{list_value: []}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + listValue: [], + }, + }, + }, + ast: "TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{list_value: [1.0, 'one']}.list_value", + container: "cel.expr.conformance.proto2", + value: { + listValue: { + values: [{ doubleValue: 1 }, { stringValue: "one" }], + }, + }, + }, + ast: 'TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n list_value:[\n 1~double,\n "one"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)', + type: "list(dyn)", + }, + { + original: { + name: "field_read_proto2_empty", + expr: "TestAllTypes{list_value: []}.list_value", + container: "cel.expr.conformance.proto2", + value: { listValue: {} }, + }, + ast: "TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)", + type: "list(dyn)", + }, + { + original: { + name: "field_read_proto2_unset", + description: "Not a wrapper type, so doesn't convert to null.", + expr: "TestAllTypes{}.list_value", + container: "cel.expr.conformance.proto2", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.list_value~list(dyn)", + type: "list(dyn)", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{list_value: [1.0, 'one']}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + listValue: [1, "one"], + }, + }, + }, + ast: 'TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n list_value:[\n 1~double,\n "one"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_empty", + expr: "TestAllTypes{list_value: []}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + listValue: [], + }, + }, + }, + ast: "TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{list_value: [1.0, 'one']}.list_value", + container: "cel.expr.conformance.proto3", + value: { + listValue: { + values: [{ doubleValue: 1 }, { stringValue: "one" }], + }, + }, + }, + ast: 'TestAllTypes{\n list_value:[\n 1^#*expr.Constant_DoubleValue#,\n "one"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n list_value:[\n 1~double,\n "one"~string\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)', + type: "list(dyn)", + }, + { + original: { + name: "field_read_proto3_empty", + expr: "TestAllTypes{list_value: []}.list_value", + container: "cel.expr.conformance.proto3", + value: { listValue: {} }, + }, + ast: "TestAllTypes{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n list_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)", + type: "list(dyn)", + }, + { + original: { + name: "field_read_proto3_unset", + description: "Not a wrapper type, so doesn't convert to null.", + expr: "TestAllTypes{}.list_value", + container: "cel.expr.conformance.proto3", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.list_value~list(dyn)", + type: "list(dyn)", + }, + ], + }, + { + name: "struct", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "uno" }, + value: { doubleValue: 1 }, + }, + { + key: { stringValue: "dos" }, + value: { doubleValue: 2 }, + }, + ], + }, + }, + }, + ast: 'google.protobuf.Struct{\n fields:{\n "uno"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "dos"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.Struct{\n fields:{\n "uno"~string:1~double,\n "dos"~string:2~double\n }~map(string, double)\n}~map(string, dyn)^google.protobuf.Struct', + type: "map(string, dyn)", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}.fields", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: 'google.protobuf.Struct{\n fields:{\n "uno"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "dos"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.fields^#*expr.Expr_SelectExpr#', + checkedAst: + 'google.protobuf.Struct{\n fields:{\n "uno"~string:1~double,\n "dos"~string:2~double\n }~map(string, double)\n}~map(string, dyn)^google.protobuf.Struct.fields~dyn', + type: "dyn", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.Struct{fields: {}}", + value: { mapValue: {} }, + }, + ast: "google.protobuf.Struct{\n fields:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Struct{\n fields:{}~map(string, dyn)\n}~map(string, dyn)^google.protobuf.Struct", + type: "map(string, dyn)", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { type: { messageType: "google.protobuf.Struct" } }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Struct", + value: { first: "Abraham", last: "Lincoln" }, + }, + }, + }, + }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "first" }, + value: { stringValue: "Abraham" }, + }, + { + key: { stringValue: "last" }, + value: { stringValue: "Lincoln" }, + }, + ], + }, + }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~map(string, dyn)^x", + type: "map(string, dyn)", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleStruct: { deux: 2, un: 1 }, + }, + }, + }, + ast: 'TestAllTypes{\n single_struct:{\n "un"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "deux"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n "un"~string:1~double,\n "deux"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_empty", + expr: "TestAllTypes{single_struct: {}}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleStruct: {}, + }, + }, + }, + ast: "TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_bad", + expr: "TestAllTypes{single_struct: {1: 'uno'}}", + disableCheck: true, + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "bad key type" }] }, + }, + ast: 'TestAllTypes{\n single_struct:{\n 1^#*expr.Constant_Int64Value#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + error: + "ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'map(int, string)'\n | TestAllTypes{single_struct: {1: 'uno'}}\n | ..........................^", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_struct: {'one': 1.0}}.single_struct", + container: "cel.expr.conformance.proto2", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "one" }, + value: { doubleValue: 1 }, + }, + ], + }, + }, + }, + ast: 'TestAllTypes{\n single_struct:{\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n "one"~string:1~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)', + type: "map(string, dyn)", + }, + { + original: { + name: "field_read_proto2_empty", + expr: "TestAllTypes{single_struct: {}}.single_struct", + container: "cel.expr.conformance.proto2", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)", + type: "map(string, dyn)", + }, + { + original: { + name: "field_read_proto2_unset", + description: "Not a wrapper type, so doesn't convert to null.", + expr: "TestAllTypes{}.single_struct", + container: "cel.expr.conformance.proto2", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_struct~map(string, dyn)", + type: "map(string, dyn)", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleStruct: { deux: 2, un: 1 }, + }, + }, + }, + ast: 'TestAllTypes{\n single_struct:{\n "un"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "deux"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n "un"~string:1~double,\n "deux"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_empty", + expr: "TestAllTypes{single_struct: {}}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleStruct: {}, + }, + }, + }, + ast: "TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_bad", + expr: "TestAllTypes{single_struct: {1: 'uno'}}", + disableCheck: true, + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "bad key type" }] }, + }, + ast: 'TestAllTypes{\n single_struct:{\n 1^#*expr.Constant_Int64Value#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + error: + "ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'map(int, string)'\n | TestAllTypes{single_struct: {1: 'uno'}}\n | ..........................^", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_struct: {'one': 1.0}}.single_struct", + container: "cel.expr.conformance.proto3", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "one" }, + value: { doubleValue: 1 }, + }, + ], + }, + }, + }, + ast: 'TestAllTypes{\n single_struct:{\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n "one"~string:1~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)', + type: "map(string, dyn)", + }, + { + original: { + name: "field_read_proto3_empty", + expr: "TestAllTypes{single_struct: {}}.single_struct", + container: "cel.expr.conformance.proto3", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{\n single_struct:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{}~map(string, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)", + type: "map(string, dyn)", + }, + { + original: { + name: "field_read_proto3_unset", + description: "Not a wrapper type, so doesn't convert to null.", + expr: "TestAllTypes{}.single_struct", + container: "cel.expr.conformance.proto3", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_struct^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_struct~map(string, dyn)", + type: "map(string, dyn)", + }, + ], + }, + { + name: "value_null", + tests: [ + { + original: { + name: "literal", + expr: "Value{null_value: NullValue.NULL_VALUE}", + container: "google.protobuf", + value: { nullValue: null }, + }, + ast: "Value{\n null_value:NullValue^#*expr.Expr_IdentExpr#.NULL_VALUE^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Value{\n null_value:google.protobuf.NullValue.NULL_VALUE~int^google.protobuf.NullValue.NULL_VALUE\n}~dyn^google.protobuf.Value", + type: "dyn", + }, + { + original: { + name: "literal_no_field_access", + expr: "Value{null_value: NullValue.NULL_VALUE}.null_value", + disableCheck: true, + container: "google.protobuf", + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "Value{\n null_value:NullValue^#*expr.Expr_IdentExpr#.NULL_VALUE^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.null_value^#*expr.Expr_SelectExpr#", + checkedAst: + "google.protobuf.Value{\n null_value:google.protobuf.NullValue.NULL_VALUE~int^google.protobuf.NullValue.NULL_VALUE\n}~dyn^google.protobuf.Value.null_value~dyn", + type: "dyn", + }, + { + original: { + name: "literal_unset", + expr: "google.protobuf.Value{}", + value: { nullValue: null }, + }, + ast: "google.protobuf.Value{}^#*expr.Expr_StructExpr#", + checkedAst: "google.protobuf.Value{}~dyn^google.protobuf.Value", + type: "dyn", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { type: { messageType: "google.protobuf.Value" } }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Value", + value: null, + }, + }, + }, + }, + value: { nullValue: null }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~dyn^x", + type: "dyn", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_value: null}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: null, + }, + }, + }, + ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_value: null}.single_value", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_read_proto2_unset", + expr: "TestAllTypes{}.single_value", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_value: null}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: null, + }, + }, + }, + ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_value: null}.single_value", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_read_proto3_unset", + expr: "TestAllTypes{}.single_value", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + ], + }, + { + name: "value_number", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Value{number_value: 12.5}", + value: { doubleValue: 12.5 }, + }, + ast: "google.protobuf.Value{\n number_value:12.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Value{\n number_value:12.5~double\n}~dyn^google.protobuf.Value", + type: "dyn", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Value{number_value: 12.5}.number_value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.Value{\n number_value:12.5^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.number_value^#*expr.Expr_SelectExpr#", + checkedAst: + "google.protobuf.Value{\n number_value:12.5~double\n}~dyn^google.protobuf.Value.number_value~dyn", + type: "dyn", + }, + { + original: { + name: "literal_zero", + expr: "google.protobuf.Value{number_value: 0.0}", + value: { doubleValue: 0 }, + }, + ast: "google.protobuf.Value{\n number_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Value{\n number_value:0~double\n}~dyn^google.protobuf.Value", + type: "dyn", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { type: { messageType: "google.protobuf.Value" } }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Value", + value: -26.375, + }, + }, + }, + }, + value: { doubleValue: -26.375 }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~dyn^x", + type: "dyn", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_value: 7e23}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: 7e23, + }, + }, + }, + ast: "TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_zero", + expr: "TestAllTypes{single_value: 0.0}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_value: 7e23}.single_value", + container: "cel.expr.conformance.proto2", + value: { doubleValue: 7e23 }, + }, + ast: "TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_read_proto2_zero", + expr: "TestAllTypes{single_value: 0.0}.single_value", + container: "cel.expr.conformance.proto2", + value: { doubleValue: 0 }, + }, + ast: "TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_value: 7e23}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: 7e23, + }, + }, + }, + ast: "TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_zero", + expr: "TestAllTypes{single_value: 0.0}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: 0, + }, + }, + }, + ast: "TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_value: 7e23}.single_value", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 7e23 }, + }, + ast: "TestAllTypes{\n single_value:7e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:7e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_read_proto3_zero", + expr: "TestAllTypes{single_value: 0.0}.single_value", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 0 }, + }, + ast: "TestAllTypes{\n single_value:0^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:0~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + ], + }, + { + name: "value_string", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Value{string_value: 'foo'}", + value: { stringValue: "foo" }, + }, + ast: 'google.protobuf.Value{\n string_value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.Value{\n string_value:"foo"~string\n}~dyn^google.protobuf.Value', + type: "dyn", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Value{string_value: 'foo'}.string_value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: 'google.protobuf.Value{\n string_value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.string_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'google.protobuf.Value{\n string_value:"foo"~string\n}~dyn^google.protobuf.Value.string_value~dyn', + type: "dyn", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.Value{string_value: ''}", + value: { stringValue: "" }, + }, + ast: 'google.protobuf.Value{\n string_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.Value{\n string_value:""~string\n}~dyn^google.protobuf.Value', + type: "dyn", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { type: { messageType: "google.protobuf.Value" } }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Value", + value: "bar", + }, + }, + }, + }, + value: { stringValue: "bar" }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~dyn^x", + type: "dyn", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_value: 'baz'}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: "baz", + }, + }, + }, + ast: 'TestAllTypes{\n single_value:"baz"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:"baz"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_empty", + expr: "TestAllTypes{single_value: ''}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: "", + }, + }, + }, + ast: 'TestAllTypes{\n single_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:""~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_value: 'bletch'}.single_value", + container: "cel.expr.conformance.proto2", + value: { stringValue: "bletch" }, + }, + ast: 'TestAllTypes{\n single_value:"bletch"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:"bletch"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "field_read_proto2_zero", + expr: "TestAllTypes{single_value: ''}.single_value", + container: "cel.expr.conformance.proto2", + value: { stringValue: "" }, + }, + ast: 'TestAllTypes{\n single_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:""~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_value: 'baz'}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: "baz", + }, + }, + }, + ast: 'TestAllTypes{\n single_value:"baz"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:"baz"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_empty", + expr: "TestAllTypes{single_value: ''}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: "", + }, + }, + }, + ast: 'TestAllTypes{\n single_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:""~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_value: 'bletch'}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "bletch" }, + }, + ast: 'TestAllTypes{\n single_value:"bletch"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:"bletch"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "field_read_proto3_zero", + expr: "TestAllTypes{single_value: ''}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "" }, + }, + ast: 'TestAllTypes{\n single_value:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:""~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + ], + }, + { + name: "value_bool", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Value{bool_value: true}", + value: { boolValue: true }, + }, + ast: "google.protobuf.Value{\n bool_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Value{\n bool_value:true~bool\n}~dyn^google.protobuf.Value", + type: "dyn", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Value{bool_value: true}.bool_value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.Value{\n bool_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.bool_value^#*expr.Expr_SelectExpr#", + checkedAst: + "google.protobuf.Value{\n bool_value:true~bool\n}~dyn^google.protobuf.Value.bool_value~dyn", + type: "dyn", + }, + { + original: { + name: "literal_false", + expr: "google.protobuf.Value{bool_value: false}", + value: { boolValue: false }, + }, + ast: "google.protobuf.Value{\n bool_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Value{\n bool_value:false~bool\n}~dyn^google.protobuf.Value", + type: "dyn", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { type: { messageType: "google.protobuf.Value" } }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Value", + value: true, + }, + }, + }, + }, + value: { boolValue: true }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~dyn^x", + type: "dyn", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_value: true}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: true, + }, + }, + }, + ast: "TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_false", + expr: "TestAllTypes{single_value: false}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: false, + }, + }, + }, + ast: "TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_value: true}.single_value", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_read_proto2_false", + expr: "TestAllTypes{single_value: false}.single_value", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_value: true}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: true, + }, + }, + }, + ast: "TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_false", + expr: "TestAllTypes{single_value: false}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: false, + }, + }, + }, + ast: "TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_value: true}.single_value", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_read_proto3_false", + expr: "TestAllTypes{single_value: false}.single_value", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n single_value:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:false~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + ], + }, + { + name: "value_struct", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}", + value: { + mapValue: { + entries: [ + { key: { stringValue: "a" }, value: { doubleValue: 1 } }, + { + key: { stringValue: "b" }, + value: { stringValue: "two" }, + }, + ], + }, + }, + }, + ast: 'google.protobuf.Value{\n struct_value:{\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "b"^#*expr.Constant_StringValue#:"two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.Value{\n struct_value:{\n "a"~string:1~double,\n "b"~string:"two"~string\n }~map(string, dyn)\n}~dyn^google.protobuf.Value', + type: "dyn", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}.struct_value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: 'google.protobuf.Value{\n struct_value:{\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "b"^#*expr.Constant_StringValue#:"two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.struct_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'google.protobuf.Value{\n struct_value:{\n "a"~string:1~double,\n "b"~string:"two"~string\n }~map(string, dyn)\n}~dyn^google.protobuf.Value.struct_value~dyn', + type: "dyn", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.Value{struct_value: {}}", + value: { mapValue: {} }, + }, + ast: "google.protobuf.Value{\n struct_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Value{\n struct_value:{}~map(string, dyn)\n}~dyn^google.protobuf.Value", + type: "dyn", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { type: { messageType: "google.protobuf.Value" } }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Value", + value: { x: null, y: false }, + }, + }, + }, + }, + value: { + mapValue: { + entries: [ + { key: { stringValue: "x" }, value: { nullValue: null } }, + { + key: { stringValue: "y" }, + value: { boolValue: false }, + }, + ], + }, + }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~dyn^x", + type: "dyn", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: { deux: 2, un: 1 }, + }, + }, + }, + ast: 'TestAllTypes{\n single_value:{\n "un"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "deux"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:{\n "un"~string:1~double,\n "deux"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_empty", + expr: "TestAllTypes{single_value: {}}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: {}, + }, + }, + }, + ast: "TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_value: {'i': true}}.single_value", + container: "cel.expr.conformance.proto2", + value: { + mapValue: { + entries: [ + { key: { stringValue: "i" }, value: { boolValue: true } }, + ], + }, + }, + }, + ast: 'TestAllTypes{\n single_value:{\n "i"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:{\n "i"~string:true~bool\n }~map(string, bool)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "field_read_proto2_empty", + expr: "TestAllTypes{single_value: {}}.single_value", + container: "cel.expr.conformance.proto2", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: { deux: 2, un: 1 }, + }, + }, + }, + ast: 'TestAllTypes{\n single_value:{\n "un"^#*expr.Constant_StringValue#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n "deux"^#*expr.Constant_StringValue#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:{\n "un"~string:1~double,\n "deux"~string:2~double\n }~map(string, double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_empty", + expr: "TestAllTypes{single_value: {}}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: {}, + }, + }, + }, + ast: "TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_value: {'i': true}}.single_value", + container: "cel.expr.conformance.proto3", + value: { + mapValue: { + entries: [ + { key: { stringValue: "i" }, value: { boolValue: true } }, + ], + }, + }, + }, + ast: 'TestAllTypes{\n single_value:{\n "i"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:{\n "i"~string:true~bool\n }~map(string, bool)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "field_read_proto3_empty", + expr: "TestAllTypes{single_value: {}}.single_value", + container: "cel.expr.conformance.proto3", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{\n single_value:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + ], + }, + { + name: "value_list", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Value{list_value: ['a', 3.0]}", + value: { + listValue: { + values: [{ stringValue: "a" }, { doubleValue: 3 }], + }, + }, + }, + ast: 'google.protobuf.Value{\n list_value:[\n "a"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.Value{\n list_value:[\n "a"~string,\n 3~double\n ]~list(dyn)\n}~dyn^google.protobuf.Value', + type: "dyn", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Value{list_value: []}.list_value", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: "google.protobuf.Value{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.list_value^#*expr.Expr_SelectExpr#", + checkedAst: + "google.protobuf.Value{\n list_value:[]~list(dyn)\n}~dyn^google.protobuf.Value.list_value~dyn", + type: "dyn", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.Value{list_value: []}", + value: { listValue: {} }, + }, + ast: "google.protobuf.Value{\n list_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "google.protobuf.Value{\n list_value:[]~list(dyn)\n}~dyn^google.protobuf.Value", + type: "dyn", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { type: { messageType: "google.protobuf.Value" } }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Value", + value: [1, true, "hi"], + }, + }, + }, + }, + value: { + listValue: { + values: [ + { doubleValue: 1 }, + { boolValue: true }, + { stringValue: "hi" }, + ], + }, + }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~dyn^x", + type: "dyn", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_value: ['un', 1.0]}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: ["un", 1], + }, + }, + }, + ast: 'TestAllTypes{\n single_value:[\n "un"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:[\n "un"~string,\n 1~double\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_assign_proto2_empty", + expr: "TestAllTypes{single_value: []}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: [], + }, + }, + }, + ast: "TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_value: ['i', true]}.single_value", + container: "cel.expr.conformance.proto2", + value: { + listValue: { + values: [{ stringValue: "i" }, { boolValue: true }], + }, + }, + }, + ast: 'TestAllTypes{\n single_value:[\n "i"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:[\n "i"~string,\n true~bool\n ]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "field_read_proto2_empty", + expr: "TestAllTypes{single_value: []}.single_value", + container: "cel.expr.conformance.proto2", + value: { listValue: {} }, + }, + ast: "TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_value: ['un', 1.0]}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: ["un", 1], + }, + }, + }, + ast: 'TestAllTypes{\n single_value:[\n "un"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:[\n "un"~string,\n 1~double\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_assign_proto3_empty", + expr: "TestAllTypes{single_value: []}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: [], + }, + }, + }, + ast: "TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_value: ['i', true]}.single_value", + container: "cel.expr.conformance.proto3", + value: { + listValue: { + values: [{ stringValue: "i" }, { boolValue: true }], + }, + }, + }, + ast: 'TestAllTypes{\n single_value:[\n "i"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:[\n "i"~string,\n true~bool\n ]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "field_read_proto3_empty", + expr: "TestAllTypes{single_value: []}.single_value", + container: "cel.expr.conformance.proto3", + value: { listValue: {} }, + }, + ast: "TestAllTypes{\n single_value:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + ], + }, + { + name: "any", + tests: [ + { + original: { + name: "literal", + expr: "google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32: 150, + }, + }, + }, + ast: 'google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\b\\x96\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\b\\x96\\x01"~bytes\n}~any^google.protobuf.Any', + type: "any", + }, + { + original: { + name: "literal_no_field_access", + expr: "google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}.type_url", + disableCheck: true, + evalError: { errors: [{ message: "no_matching_overload" }] }, + }, + ast: 'google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n value:b"\\b\\x96\\x01"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.type_url^#*expr.Expr_SelectExpr#', + checkedAst: + 'google.protobuf.Any{\n type_url:"type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes"~string,\n value:b"\\b\\x96\\x01"~bytes\n}~any^google.protobuf.Any.type_url~dyn', + type: "dyn", + }, + { + original: { + name: "literal_empty", + expr: "google.protobuf.Any{}", + evalError: { errors: [{ message: "conversion" }] }, + }, + ast: "google.protobuf.Any{}^#*expr.Expr_StructExpr#", + checkedAst: "google.protobuf.Any{}~any^google.protobuf.Any", + type: "any", + }, + { + original: { + name: "var", + expr: "x", + typeEnv: [ + { + name: "x", + ident: { type: { messageType: "google.protobuf.Any" } }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Any", + value: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32: 150, + }, + }, + }, + }, + }, + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32: 150, + }, + }, + }, + ast: "x^#*expr.Expr_IdentExpr#", + checkedAst: "x~any^x", + type: "any", + }, + { + original: { + name: "field_assign_proto2", + expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleAny: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32: 150, + }, + }, + }, + }, + ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "field_read_proto2", + expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32: 150, + }, + }, + }, + ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "field_assign_proto3", + expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleAny: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 150, + }, + }, + }, + }, + ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "field_read_proto3", + expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 150, + }, + }, + }, + ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:150^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:150~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + ], + }, + { + name: "complex", + tests: [ + { + original: { + name: "any_list_map", + expr: "TestAllTypes{single_any: [{'almost': 'done'}]}.single_any", + container: "cel.expr.conformance.proto3", + value: { + listValue: { + values: [ + { + mapValue: { + entries: [ + { + key: { stringValue: "almost" }, + value: { stringValue: "done" }, + }, + ], + }, + }, + ], + }, + }, + }, + ast: 'TestAllTypes{\n single_any:[\n {\n "almost"^#*expr.Constant_StringValue#:"done"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_any:[\n {\n "almost"~string:"done"~string\n }~map(string, string)\n ]~list(map(string, string))\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any', + type: "any", + }, + ], + }, + ], + }, + { + name: "encoders_ext", + suites: [ + { + name: "encode", + tests: [ + { + original: { + name: "hello", + expr: "base64.encode(b'hello')", + value: { stringValue: "aGVsbG8=" }, + }, + ast: 'base64^#*expr.Expr_IdentExpr#.encode(\n b"hello"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'base64.encode(\n b"hello"~bytes\n)~string^base64_encode_bytes', + type: "string", + }, + ], + }, + { + name: "decode", + tests: [ + { + original: { + name: "hello", + expr: "base64.decode('aGVsbG8=')", + value: { bytesValue: "aGVsbG8=" }, + }, + ast: 'base64^#*expr.Expr_IdentExpr#.decode(\n "aGVsbG8="^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'base64.decode(\n "aGVsbG8="~string\n)~bytes^base64_decode_string', + type: "bytes", + }, + { + original: { + name: "hello_without_padding", + expr: "base64.decode('aGVsbG8')", + value: { bytesValue: "aGVsbG8=" }, + }, + ast: 'base64^#*expr.Expr_IdentExpr#.decode(\n "aGVsbG8"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'base64.decode(\n "aGVsbG8"~string\n)~bytes^base64_decode_string', + type: "bytes", + }, + ], + }, + { + name: "round_trip", + tests: [ + { + original: { + name: "hello", + expr: "base64.decode(base64.encode(b'Hello World!'))", + value: { bytesValue: "SGVsbG8gV29ybGQh" }, + }, + ast: 'base64^#*expr.Expr_IdentExpr#.decode(\n base64^#*expr.Expr_IdentExpr#.encode(\n b"Hello World!"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'base64.decode(\n base64.encode(\n b"Hello World!"~bytes\n )~string^base64_encode_bytes\n)~bytes^base64_decode_string', + type: "bytes", + }, + ], + }, + ], + }, + { + name: "enums", + suites: [ + { + name: "legacy_proto2", + tests: [ + { + original: { + name: "literal_global", + expr: "GlobalEnum.GAZ", + container: "cel.expr.conformance.proto2", + value: { int64Value: "2" }, + }, + ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ", + type: "int", + }, + { + original: { + name: "literal_nested", + expr: "TestAllTypes.NestedEnum.BAR", + container: "cel.expr.conformance.proto2", + value: { int64Value: "1" }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", + type: "int", + }, + { + original: { + name: "literal_zero", + expr: "GlobalEnum.GOO", + container: "cel.expr.conformance.proto2", + value: { int64Value: "0" }, + }, + ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO", + type: "int", + }, + { + original: { + name: "comparison", + expr: "GlobalEnum.GAR == 1", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "arithmetic", + expr: "TestAllTypes.NestedEnum.BAR + 3", + container: "cel.expr.conformance.proto2", + value: { int64Value: "4" }, + }, + ast: "_+_(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR,\n 3~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "type_global", + expr: "type(GlobalEnum.GOO)", + container: "cel.expr.conformance.proto2", + value: { typeValue: "int" }, + }, + ast: "type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "type_nested", + expr: "type(TestAllTypes.NestedEnum.BAZ)", + container: "cel.expr.conformance.proto2", + value: { typeValue: "int" }, + }, + ast: "type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "select_default", + expr: "TestAllTypes{}.standalone_enum", + container: "cel.expr.conformance.proto2", + value: { int64Value: "0" }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int", + type: "int", + }, + { + original: { + name: "field_type", + expr: "type(TestAllTypes{}.standalone_enum)", + container: "cel.expr.conformance.proto2", + value: { typeValue: "int" }, + }, + ast: "type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "assign_standalone_name", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + standaloneEnum: "BAZ", + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int", + expr: "TestAllTypes{standalone_enum: 1}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + standaloneEnum: "BAR", + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:1~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int_too_big", + expr: "TestAllTypes{standalone_enum: 5000000000}", + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "TestAllTypes{\n standalone_enum:5000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:5000000000~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int_too_neg", + expr: "TestAllTypes{standalone_enum: -7000000000}", + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "TestAllTypes{\n standalone_enum:-7000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:-7000000000~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "access_repeated_enum", + expr: "TestAllTypes{}.repeated_nested_enum", + container: "cel.expr.conformance.proto2", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)", + type: "list(int)", + }, + { + original: { + name: "assign_repeated_enum", + expr: "TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + repeatedNestedEnum: ["FOO", "BAR"], + }, + }, + }, + ast: "TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "list_enum_as_list_int", + expr: "0 in TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}.repeated_nested_enum", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "@in(\n 0^#*expr.Constant_Int64Value#,\n TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n 0~int,\n cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "enum_as_int", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "@in(\n TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int,\n [\n 0~int\n ]~list(int)\n)~bool^in_list", + type: "bool", + }, + ], + }, + { + name: "legacy_proto3", + tests: [ + { + original: { + name: "literal_global", + expr: "GlobalEnum.GAZ", + container: "cel.expr.conformance.proto3", + value: { int64Value: "2" }, + }, + ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ", + type: "int", + }, + { + original: { + name: "literal_nested", + expr: "TestAllTypes.NestedEnum.BAR", + container: "cel.expr.conformance.proto3", + value: { int64Value: "1" }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR", + type: "int", + }, + { + original: { + name: "literal_zero", + expr: "GlobalEnum.GOO", + container: "cel.expr.conformance.proto3", + value: { int64Value: "0" }, + }, + ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO", + type: "int", + }, + { + original: { + name: "comparison", + expr: "GlobalEnum.GAR == 1", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "arithmetic", + expr: "TestAllTypes.NestedEnum.BAR + 3", + container: "cel.expr.conformance.proto3", + value: { int64Value: "4" }, + }, + ast: "_+_(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR,\n 3~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "type_global", + expr: "type(GlobalEnum.GOO)", + container: "cel.expr.conformance.proto3", + value: { typeValue: "int" }, + }, + ast: "type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "type_nested", + expr: "type(TestAllTypes.NestedEnum.BAZ)", + container: "cel.expr.conformance.proto3", + value: { typeValue: "int" }, + }, + ast: "type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "select_default", + expr: "TestAllTypes{}.standalone_enum", + container: "cel.expr.conformance.proto3", + value: { int64Value: "0" }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int", + type: "int", + }, + { + original: { + name: "select", + expr: "x.standalone_enum", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + container: "cel.expr.conformance.proto3", + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: "BAZ", + }, + }, + }, + }, + value: { int64Value: "2" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", + type: "int", + }, + { + original: { + name: "select_big", + expr: "x.standalone_enum", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + container: "cel.expr.conformance.proto3", + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: 108, + }, + }, + }, + }, + value: { int64Value: "108" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", + type: "int", + }, + { + original: { + name: "select_neg", + expr: "x.standalone_enum", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + container: "cel.expr.conformance.proto3", + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: -3, + }, + }, + }, + }, + value: { int64Value: "-3" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", + type: "int", + }, + { + original: { + name: "field_type", + expr: "type(TestAllTypes{}.standalone_enum)", + container: "cel.expr.conformance.proto3", + value: { typeValue: "int" }, + }, + ast: "type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "assign_standalone_name", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: "BAZ", + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int", + expr: "TestAllTypes{standalone_enum: 1}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: "BAR", + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int_big", + expr: "TestAllTypes{standalone_enum: 99}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: 99, + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:99^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:99~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int_neg", + expr: "TestAllTypes{standalone_enum: -1}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: -1, + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:-1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int_too_big", + expr: "TestAllTypes{standalone_enum: 5000000000}", + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "TestAllTypes{\n standalone_enum:5000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:5000000000~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int_too_neg", + expr: "TestAllTypes{standalone_enum: -7000000000}", + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "TestAllTypes{\n standalone_enum:-7000000000^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:-7000000000~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "access_repeated_enum", + expr: "TestAllTypes{}.repeated_nested_enum", + container: "cel.expr.conformance.proto2", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)", + type: "list(int)", + }, + { + original: { + name: "assign_repeated_enum", + expr: "TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + repeatedNestedEnum: ["FOO", "BAR"], + }, + }, + }, + ast: "TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "list_enum_as_list_int", + expr: "0 in TestAllTypes{ repeated_nested_enum: [ TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAR]}.repeated_nested_enum", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "@in(\n 0^#*expr.Constant_Int64Value#,\n TestAllTypes{\n repeated_nested_enum:[\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#,\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n 0~int,\n cel.expr.conformance.proto2.TestAllTypes{\n repeated_nested_enum:[\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n ]~list(int)\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum~list(int)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "enum_as_int", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "@in(\n TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#,\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int,\n [\n 0~int\n ]~list(int)\n)~bool^in_list", + type: "bool", + }, + ], + }, + { + name: "strong_proto2", + tests: [ + { + original: { + name: "literal_global", + expr: "GlobalEnum.GAZ", + container: "cel.expr.conformance.proto2", + value: { + enumValue: { + type: "cel.expr.conformance.proto2.GlobalEnum", + value: 2, + }, + }, + }, + ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ", + type: "int", + }, + { + original: { + name: "literal_nested", + expr: "TestAllTypes.NestedEnum.BAR", + container: "cel.expr.conformance.proto2", + value: { + enumValue: { + type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", + value: 1, + }, + }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", + type: "int", + }, + { + original: { + name: "literal_zero", + expr: "GlobalEnum.GOO", + container: "cel.expr.conformance.proto2", + value: { + enumValue: { type: "cel.expr.conformance.proto2.GlobalEnum" }, + }, + }, + ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO", + type: "int", + }, + { + original: { + name: "comparison_true", + expr: "GlobalEnum.GAR == GlobalEnum.GAR", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "comparison_false", + expr: "GlobalEnum.GAR == GlobalEnum.GAZ", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.GlobalEnum.GAR~int^cel.expr.conformance.proto2.GlobalEnum.GAR,\n cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "type_global", + expr: "type(GlobalEnum.GOO)", + container: "cel.expr.conformance.proto2", + value: { typeValue: "cel.expr.conformance.proto2.GlobalEnum" }, + }, + ast: "type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto2.GlobalEnum.GOO~int^cel.expr.conformance.proto2.GlobalEnum.GOO\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "type_nested", + expr: "type(TestAllTypes.NestedEnum.BAZ)", + container: "cel.expr.conformance.proto2", + value: { + typeValue: + "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", + }, + }, + ast: "type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "select_default", + expr: "TestAllTypes{}.standalone_enum", + container: "cel.expr.conformance.proto2", + value: { + enumValue: { + type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", + }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int", + type: "int", + }, + { + original: { + name: "field_type", + expr: "type(TestAllTypes{}.standalone_enum)", + container: "cel.expr.conformance.proto2", + value: { + typeValue: + "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", + }, + }, + ast: "type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~int\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "assign_standalone_name", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + standaloneEnum: "BAZ", + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + standaloneEnum: "BAR", + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + error: + "ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}\n | .....................................................^", + }, + { + original: { + name: "convert_symbol_to_int", + expr: "int(GlobalEnum.GAZ)", + container: "cel.expr.conformance.proto2", + value: { int64Value: "2" }, + }, + ast: "int(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n cel.expr.conformance.proto2.GlobalEnum.GAZ~int^cel.expr.conformance.proto2.GlobalEnum.GAZ\n)~int^int64_to_int64", + type: "int", + }, + { + original: { + name: "convert_unnamed_to_int", + description: "Disable check - missing way to declare enums.", + expr: "int(x)", + disableCheck: true, + bindings: { + x: { + value: { + enumValue: { + type: "cel.expr.conformance.proto2.GlobalEnum", + value: 444, + }, + }, + }, + }, + value: { int64Value: "444" }, + }, + ast: "int(\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:5: undeclared reference to 'x' (in container '')\n | int(x)\n | ....^", + }, + { + original: { + name: "convert_int_inrange", + expr: "TestAllTypes.NestedEnum(2)", + container: "cel.expr.conformance.proto2", + value: { + enumValue: { + type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", + value: 2, + }, + }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(2)\n | .......................^", + }, + { + original: { + name: "convert_int_big", + expr: "TestAllTypes.NestedEnum(20000)", + container: "cel.expr.conformance.proto2", + value: { + enumValue: { + type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", + value: 20000, + }, + }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 20000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(20000)\n | .......................^", + }, + { + original: { + name: "convert_int_neg", + expr: "GlobalEnum(-33)", + container: "cel.expr.conformance.proto2", + value: { + enumValue: { + type: "cel.expr.conformance.proto2.GlobalEnum", + value: -33, + }, + }, + }, + ast: "GlobalEnum(\n -33^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:11: undeclared reference to 'GlobalEnum' (in container 'cel.expr.conformance.proto2')\n | GlobalEnum(-33)\n | ..........^", + }, + { + original: { + name: "convert_int_too_big", + expr: "TestAllTypes.NestedEnum(5000000000)", + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(5000000000)\n | .......................^", + }, + { + original: { + name: "convert_int_too_neg", + expr: "TestAllTypes.NestedEnum(-7000000000)", + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -7000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum(-7000000000)\n | .......................^", + }, + { + original: { + name: "convert_string", + expr: "TestAllTypes.NestedEnum('BAZ')", + container: "cel.expr.conformance.proto2", + value: { + enumValue: { + type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum", + value: 2, + }, + }, + }, + ast: 'TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n "BAZ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum('BAZ')\n | .......................^", + }, + { + original: { + name: "convert_string_bad", + expr: "TestAllTypes.NestedEnum('BLETCH')", + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "invalid" }] }, + }, + ast: 'TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n "BLETCH"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto2')\n | TestAllTypes.NestedEnum('BLETCH')\n | .......................^", + }, + ], + }, + { + name: "strong_proto3", + tests: [ + { + original: { + name: "literal_global", + expr: "GlobalEnum.GAZ", + container: "cel.expr.conformance.proto3", + value: { + enumValue: { + type: "cel.expr.conformance.proto3.GlobalEnum", + value: 2, + }, + }, + }, + ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ", + type: "int", + }, + { + original: { + name: "literal_nested", + expr: "TestAllTypes.NestedEnum.BAR", + container: "cel.expr.conformance.proto3", + value: { + enumValue: { + type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + value: 1, + }, + }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR", + type: "int", + }, + { + original: { + name: "literal_zero", + expr: "GlobalEnum.GOO", + container: "cel.expr.conformance.proto3", + value: { + enumValue: { type: "cel.expr.conformance.proto3.GlobalEnum" }, + }, + }, + ast: "GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO", + type: "int", + }, + { + original: { + name: "comparison_true", + expr: "GlobalEnum.GAR == GlobalEnum.GAR", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "comparison_false", + expr: "GlobalEnum.GAR == GlobalEnum.GAZ", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "_==_(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAR^#*expr.Expr_SelectExpr#,\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.GlobalEnum.GAR~int^cel.expr.conformance.proto3.GlobalEnum.GAR,\n cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "type_global", + expr: "type(GlobalEnum.GOO)", + container: "cel.expr.conformance.proto3", + value: { typeValue: "cel.expr.conformance.proto3.GlobalEnum" }, + }, + ast: "type(\n GlobalEnum^#*expr.Expr_IdentExpr#.GOO^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto3.GlobalEnum.GOO~int^cel.expr.conformance.proto3.GlobalEnum.GOO\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "type_nested", + expr: "type(TestAllTypes.NestedEnum.BAZ)", + container: "cel.expr.conformance.proto3", + value: { + typeValue: + "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + }, + }, + ast: "type(\n TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "select_default", + expr: "TestAllTypes{}.standalone_enum", + container: "cel.expr.conformance.proto3", + value: { + enumValue: { + type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int", + type: "int", + }, + { + original: { + name: "select", + expr: "x.standalone_enum", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + container: "cel.expr.conformance.proto3", + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: "BAZ", + }, + }, + }, + }, + value: { + enumValue: { + type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + value: 2, + }, + }, + }, + ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", + type: "int", + }, + { + original: { + name: "select_big", + expr: "x.standalone_enum", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + container: "cel.expr.conformance.proto3", + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: 108, + }, + }, + }, + }, + value: { + enumValue: { + type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + value: 108, + }, + }, + }, + ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", + type: "int", + }, + { + original: { + name: "select_neg", + expr: "x.standalone_enum", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + container: "cel.expr.conformance.proto3", + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: -3, + }, + }, + }, + }, + value: { + enumValue: { + type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + value: -3, + }, + }, + }, + ast: "x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int", + type: "int", + }, + { + original: { + name: "field_type", + expr: "type(TestAllTypes{}.standalone_enum)", + container: "cel.expr.conformance.proto3", + value: { + typeValue: + "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + }, + }, + ast: "type(\n TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "type(\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int\n)~type(int)^type", + type: "type(int)", + }, + { + original: { + name: "assign_standalone_name", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: "BAZ", + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "assign_standalone_int", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: "BAR", + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + error: + "ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}\n | .....................................................^", + }, + { + original: { + name: "assign_standalone_int_big", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: 99, + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 99^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + error: + "ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}\n | .....................................................^", + }, + { + original: { + name: "assign_standalone_int_neg", + expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: -1, + }, + }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + error: + "ERROR: \u003cinput\u003e:1:54: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}\n | .....................................................^", + }, + { + original: { + name: "convert_symbol_to_int", + expr: "int(GlobalEnum.GAZ)", + container: "cel.expr.conformance.proto3", + value: { int64Value: "2" }, + }, + ast: "int(\n GlobalEnum^#*expr.Expr_IdentExpr#.GAZ^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n cel.expr.conformance.proto3.GlobalEnum.GAZ~int^cel.expr.conformance.proto3.GlobalEnum.GAZ\n)~int^int64_to_int64", + type: "int", + }, + { + original: { + name: "convert_unnamed_to_int", + description: "Disable check - missing way to declare enums.", + expr: "int(x)", + disableCheck: true, + bindings: { + x: { + value: { + enumValue: { + type: "cel.expr.conformance.proto3.GlobalEnum", + value: 444, + }, + }, + }, + }, + value: { int64Value: "444" }, + }, + ast: "int(\n x^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:5: undeclared reference to 'x' (in container '')\n | int(x)\n | ....^", + }, + { + original: { + name: "convert_unnamed_to_int_select", + expr: "int(x.standalone_enum)", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + standaloneEnum: -987, + }, + }, + }, + }, + value: { int64Value: "-987" }, + }, + ast: "int(\n x^#*expr.Expr_IdentExpr#.standalone_enum^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n x~cel.expr.conformance.proto3.TestAllTypes^x.standalone_enum~int\n)~int^int64_to_int64", + type: "int", + }, + { + original: { + name: "convert_int_inrange", + expr: "TestAllTypes.NestedEnum(2)", + container: "cel.expr.conformance.proto3", + value: { + enumValue: { + type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + value: 2, + }, + }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(2)\n | .......................^", + }, + { + original: { + name: "convert_int_big", + expr: "TestAllTypes.NestedEnum(20000)", + container: "cel.expr.conformance.proto3", + value: { + enumValue: { + type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + value: 20000, + }, + }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 20000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(20000)\n | .......................^", + }, + { + original: { + name: "convert_int_neg", + expr: "GlobalEnum(-33)", + container: "cel.expr.conformance.proto3", + value: { + enumValue: { + type: "cel.expr.conformance.proto3.GlobalEnum", + value: -33, + }, + }, + }, + ast: "GlobalEnum(\n -33^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:11: undeclared reference to 'GlobalEnum' (in container 'cel.expr.conformance.proto3')\n | GlobalEnum(-33)\n | ..........^", + }, + { + original: { + name: "convert_int_too_big", + expr: "TestAllTypes.NestedEnum(5000000000)", + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(5000000000)\n | .......................^", + }, + { + original: { + name: "convert_int_too_neg", + expr: "TestAllTypes.NestedEnum(-7000000000)", + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "range" }] }, + }, + ast: "TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n -7000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum(-7000000000)\n | .......................^", + }, + { + original: { + name: "convert_string", + expr: "TestAllTypes.NestedEnum('BAZ')", + container: "cel.expr.conformance.proto3", + value: { + enumValue: { + type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum", + value: 2, + }, + }, + }, + ast: 'TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n "BAZ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum('BAZ')\n | .......................^", + }, + { + original: { + name: "convert_string_bad", + expr: "TestAllTypes.NestedEnum('BLETCH')", + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "invalid" }] }, + }, + ast: 'TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum(\n "BLETCH"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'NestedEnum' (in container 'cel.expr.conformance.proto3')\n | TestAllTypes.NestedEnum('BLETCH')\n | .......................^", + }, + ], + }, + ], + }, + { + name: "fields", + suites: [ + { + name: "map_fields", + tests: [ + { + original: { + name: "map_key_int64", + expr: "{0:1,2:2,5:true}[5]", + value: { boolValue: true }, + }, + ast: "_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:true~bool\n }~map(int, dyn),\n 5~int\n)~dyn^index_map", + type: "dyn", + }, + { + original: { + name: "map_key_uint64", + expr: "{0u:1u,2u:'happy',5u:3u}[2u]", + value: { stringValue: "happy" }, + }, + ast: '_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:"happy"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n 0u~uint:1u~uint,\n 2u~uint:"happy"~string,\n 5u~uint:3u~uint\n }~map(uint, dyn),\n 2u~uint\n)~dyn^index_map', + type: "dyn", + }, + { + original: { + name: "map_key_string", + expr: "{'name':100u}['name']", + value: { uint64Value: "100" }, + }, + ast: '_[_](\n {\n "name"^#*expr.Constant_StringValue#:100u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "name"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n "name"~string:100u~uint\n }~map(string, uint),\n "name"~string\n)~uint^index_map', + type: "uint", + }, + { + original: { + name: "map_key_bool", + expr: "{true:5}[true]", + value: { int64Value: "5" }, + }, + ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n true~bool:5~int\n }~map(bool, int),\n true~bool\n)~int^index_map", + type: "int", + }, + { + original: { + name: "map_key_mixed_type", + expr: "{true:1,2:2,5u:3}[true]", + value: { int64Value: "1" }, + }, + ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n true~bool:1~int,\n 2~int:2~int,\n 5u~uint:3~int\n }~map(dyn, int),\n true~bool\n)~int^index_map", + type: "int", + }, + { + original: { + name: "map_key_mixed_numbers_double_key", + expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[3.0]", + value: { doubleValue: 3 }, + }, + ast: "_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 3~double\n)~double^index_map", + type: "double", + }, + { + original: { + name: "map_key_mixed_numbers_lossy_double_key", + expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[3.1]", + evalError: { errors: [{ message: "no such key" }] }, + }, + ast: "_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3.1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 3.1~double\n)~double^index_map", + type: "double", + }, + { + original: { + name: "map_key_mixed_numbers_uint_key", + expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[2u]", + value: { doubleValue: 2 }, + }, + ast: "_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 2u~uint\n)~double^index_map", + type: "double", + }, + { + original: { + name: "map_key_mixed_numbers_int_key", + expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[1]", + value: { doubleValue: 1 }, + }, + ast: "_[_](\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 1u~uint:1~double,\n 2~int:2~double,\n 3u~uint:3~double\n }~map(dyn, double),\n 1~int\n)~double^index_map", + type: "double", + }, + { + original: { + name: "map_field_access", + expr: "x.name", + typeEnv: [ + { + name: "x", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "INT64" }, + }, + }, + }, + }, + ], + bindings: { + x: { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "name" }, + value: { int64Value: "1024" }, + }, + ], + }, + }, + }, + }, + value: { int64Value: "1024" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#", + checkedAst: "x~map(string, int)^x.name~int", + type: "int", + }, + { + original: { + name: "map_no_such_key", + expr: "{0:1,2:2,5:3}[1]", + evalError: { errors: [{ message: "no such key" }] }, + }, + ast: "_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n)~int^index_map", + type: "int", + }, + { + original: { + name: "map_no_such_key_or_false", + expr: "dyn({0:1,2:2,5:3}[1]) || false", + evalError: { errors: [{ message: "no such key" }] }, + }, + ast: "_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "map_no_such_key_or_true", + expr: "dyn({0:1,2:2,5:3}[1]) || true", + value: { boolValue: true }, + }, + ast: "_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "map_no_such_key_and_false", + expr: "dyn({0:1,2:2,5:3}[1]) \u0026\u0026 false", + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "map_no_such_key_and_true", + expr: "dyn({0:1,2:2,5:3}[1]) \u0026\u0026 true", + evalError: { errors: [{ message: "no such key" }] }, + }, + ast: "_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n 1~int\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "map_bad_key_type", + expr: "{0:1,2:2,5:3}[dyn(b'')]", + evalError: { errors: [{ message: "no such key" }] }, + }, + ast: '_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n)~int^index_map', + type: "int", + }, + { + original: { + name: "map_bad_key_type_or_false", + expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) || false", + evalError: { errors: [{ message: "no such key" }] }, + }, + ast: '_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or', + type: "bool", + }, + { + original: { + name: "map_bad_key_type_or_true", + expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) || true", + value: { boolValue: true }, + }, + ast: '_||_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_||_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or', + type: "bool", + }, + { + original: { + name: "map_bad_key_type_and_false", + expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) \u0026\u0026 false", + value: { boolValue: false }, + }, + ast: '_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and', + type: "bool", + }, + { + original: { + name: "map_bad_key_type_and_true", + expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) \u0026\u0026 true", + evalError: { errors: [{ message: "no such key" }] }, + }, + ast: '_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n b""^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u0026\u0026_(\n dyn(\n _[_](\n {\n 0~int:1~int,\n 2~int:2~int,\n 5~int:3~int\n }~map(int, int),\n dyn(\n b""~bytes\n )~dyn^to_dyn\n )~int^index_map\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and', + type: "bool", + }, + { + original: { + name: "map_field_select_no_such_key", + expr: "x.name", + typeEnv: [ + { + name: "x", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + x: { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "holiday" }, + value: { stringValue: "field" }, + }, + ], + }, + }, + }, + }, + evalError: { errors: [{ message: "no such key: 'name'" }] }, + }, + ast: "x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#", + checkedAst: "x~map(string, string)^x.name~string", + type: "string", + }, + { + original: { + name: "map_field_select_no_such_key_or_false", + expr: "dyn(x.name) || false", + typeEnv: [ + { + name: "x", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + x: { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "holiday" }, + value: { stringValue: "field" }, + }, + ], + }, + }, + }, + }, + evalError: { errors: [{ message: "no such key: 'name'" }] }, + }, + ast: "_||_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "map_field_select_no_such_key_or_true", + expr: "dyn(x.name) || true", + typeEnv: [ + { + name: "x", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + x: { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "holiday" }, + value: { stringValue: "field" }, + }, + ], + }, + }, + }, + }, + value: { boolValue: true }, + }, + ast: "_||_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "map_field_select_no_such_key_and_false", + expr: "dyn(x.name) \u0026\u0026 false", + typeEnv: [ + { + name: "x", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + x: { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "holiday" }, + value: { stringValue: "field" }, + }, + ], + }, + }, + }, + }, + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "map_field_select_no_such_key_and_true", + expr: "dyn(x.name) \u0026\u0026 true", + typeEnv: [ + { + name: "x", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + x: { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "holiday" }, + value: { stringValue: "field" }, + }, + ], + }, + }, + }, + }, + evalError: { errors: [{ message: "no such key: 'name'" }] }, + }, + ast: "_\u0026\u0026_(\n dyn(\n x^#*expr.Expr_IdentExpr#.name^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n dyn(\n x~map(string, string)^x.name~string\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "map_value_null", + expr: "{true:null}[true]", + value: { nullValue: null }, + }, + ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n true~bool:null~null\n }~map(bool, null),\n true~bool\n)~null^index_map", + type: "null", + }, + { + original: { + name: "map_value_bool", + expr: "{27:false}[27]", + value: { boolValue: false }, + }, + ast: "_[_](\n {\n 27^#*expr.Constant_Int64Value#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 27^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 27~int:false~bool\n }~map(int, bool),\n 27~int\n)~bool^index_map", + type: "bool", + }, + { + original: { + name: "map_value_string", + expr: "{'n':'x'}['n']", + value: { stringValue: "x" }, + }, + ast: '_[_](\n {\n "n"^#*expr.Constant_StringValue#:"x"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "n"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n "n"~string:"x"~string\n }~map(string, string),\n "n"~string\n)~string^index_map', + type: "string", + }, + { + original: { + name: "map_value_float", + expr: "{3:15.15}[3]", + value: { doubleValue: 15.15 }, + }, + ast: "_[_](\n {\n 3^#*expr.Constant_Int64Value#:15.15^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 3~int:15.15~double\n }~map(int, double),\n 3~int\n)~double^index_map", + type: "double", + }, + { + original: { + name: "map_value_uint64", + expr: "{0u:1u,2u:2u,5u:3u}[0u]", + value: { uint64Value: "1" }, + }, + ast: "_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2u^#*expr.Constant_Uint64Value#:2u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n 5u^#*expr.Constant_Uint64Value#:3u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 0u~uint:1u~uint,\n 2u~uint:2u~uint,\n 5u~uint:3u~uint\n }~map(uint, uint),\n 0u~uint\n)~uint^index_map", + type: "uint", + }, + { + original: { + name: "map_value_int64", + expr: "{true:1,false:2}[true]", + value: { int64Value: "1" }, + }, + ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n false^#*expr.Constant_BoolValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n true~bool:1~int,\n false~bool:2~int\n }~map(bool, int),\n true~bool\n)~int^index_map", + type: "int", + }, + { + original: { + name: "map_value_bytes", + expr: "{0:b''}[0]", + value: { bytesValue: "" }, + }, + ast: '_[_](\n {\n 0^#*expr.Constant_Int64Value#:b""^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n 0~int:b""~bytes\n }~map(int, bytes),\n 0~int\n)~bytes^index_map', + type: "bytes", + }, + { + original: { + name: "map_value_list", + expr: "{0u:[1]}[0u]", + value: { listValue: { values: [{ int64Value: "1" }] } }, + }, + ast: "_[_](\n {\n 0u^#*expr.Constant_Uint64Value#:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 0u~uint:[\n 1~int\n ]~list(int)\n }~map(uint, list(int)),\n 0u~uint\n)~list(int)^index_map", + type: "list(int)", + }, + { + original: { + name: "map_value_map", + expr: "{'map': {'k': 'v'}}['map']", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "k" }, + value: { stringValue: "v" }, + }, + ], + }, + }, + }, + ast: '_[_](\n {\n "map"^#*expr.Constant_StringValue#:{\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "map"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n "map"~string:{\n "k"~string:"v"~string\n }~map(string, string)\n }~map(string, map(string, string)),\n "map"~string\n)~map(string, string)^index_map', + type: "map(string, string)", + }, + { + original: { + name: "map_value_mix_type", + expr: "{'map': {'k': 'v'}, 'list': [1]}['map']", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "k" }, + value: { stringValue: "v" }, + }, + ], + }, + }, + }, + ast: '_[_](\n {\n "map"^#*expr.Constant_StringValue#:{\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#,\n "list"^#*expr.Constant_StringValue#:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "map"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n "map"~string:{\n "k"~string:"v"~string\n }~map(string, string),\n "list"~string:[\n 1~int\n ]~list(int)\n }~map(string, dyn),\n "map"~string\n)~dyn^index_map', + type: "dyn", + }, + ], + }, + { + name: "map_has", + tests: [ + { + original: { + name: "has", + expr: "has({'a': 1, 'b': 2}.a)", + value: { boolValue: true }, + }, + ast: '{\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "b"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.a~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "a"~string:1~int,\n "b"~string:2~int\n}~map(string, int).a~test-only~~bool', + type: "bool", + }, + { + original: { + name: "has_not", + expr: "has({'a': 1, 'b': 2}.c)", + value: { boolValue: false }, + }, + ast: '{\n "a"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "b"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.c~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "a"~string:1~int,\n "b"~string:2~int\n}~map(string, int).c~test-only~~bool', + type: "bool", + }, + { + original: { + name: "has_empty", + expr: "has({}.a)", + value: { boolValue: false }, + }, + ast: "{}^#*expr.Expr_StructExpr#.a~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: "{}~map(dyn, dyn).a~test-only~~bool", + type: "bool", + }, + ], + }, + { + name: "quoted_map_fields", + tests: [ + { + original: { + name: "field_access_slash", + expr: "{'/api/v1': true, '/api/v2': false}.`/api/v1`", + value: { boolValue: true }, + }, + error: + "ERROR: field_access_slash:1:37: unsupported syntax: '`'\n | {'/api/v1': true, '/api/v2': false}.`/api/v1`\n | ....................................^", + }, + { + original: { + name: "field_access_dash", + expr: "{'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'", + value: { boolValue: true }, + }, + error: + "ERROR: field_access_dash:1:61: unsupported syntax: '`'\n | {'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'\n | ............................................................^", + }, + { + original: { + name: "field_access_dot", + expr: "{'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`", + value: { int64Value: "32" }, + }, + error: + "ERROR: field_access_dot:1:34: unsupported syntax: '`'\n | {'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`\n | .................................^", + }, + { + original: { + name: "has_field_slash", + expr: "has({'/api/v1': true, '/api/v2': false}.`/api/v3`)", + value: { boolValue: false }, + }, + error: + "ERROR: has_field_slash:1:41: unsupported syntax: '`'\n | has({'/api/v1': true, '/api/v2': false}.`/api/v3`)\n | ........................................^", + }, + { + original: { + name: "has_field_dash", + expr: "has({'content-type': 'application/json', 'content-length': 145}.`content-type`)", + value: { boolValue: true }, + }, + error: + "ERROR: has_field_dash:1:65: unsupported syntax: '`'\n | has({'content-type': 'application/json', 'content-length': 145}.`content-type`)\n | ................................................................^", + }, + { + original: { + name: "has_field_dot", + expr: "has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)", + value: { boolValue: true }, + }, + error: + "ERROR: has_field_dot:1:38: unsupported syntax: '`'\n | has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)\n | .....................................^", + }, + ], + }, + { + name: "qualified_identifier_resolution", + tests: [ + { + original: { + name: "qualified_ident", + expr: "a.b.c", + typeEnv: [ + { name: "a.b.c", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { "a.b.c": { value: { stringValue: "yeah" } } }, + value: { stringValue: "yeah" }, + }, + ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#", + checkedAst: "a.b.c~string^a.b.c", + type: "string", + }, + { + original: { + name: "map_field_select", + expr: "a.b.c", + typeEnv: [ + { + name: "a.b", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + "a.b": { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "c" }, + value: { stringValue: "yeah" }, + }, + ], + }, + }, + }, + }, + value: { stringValue: "yeah" }, + }, + ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#", + checkedAst: "a.b~map(string, string)^a.b.c~string", + type: "string", + }, + { + original: { + name: "qualified_identifier_resolution_unchecked", + description: + "namespace resolution should try to find the longest prefix for the evaluator.", + expr: "a.b.c", + disableCheck: true, + typeEnv: [ + { name: "a.b.c", ident: { type: { primitive: "STRING" } } }, + { + name: "a.b", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + "a.b": { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "c" }, + value: { stringValue: "oops" }, + }, + ], + }, + }, + }, + "a.b.c": { value: { stringValue: "yeah" } }, + }, + value: { stringValue: "yeah" }, + }, + ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#", + checkedAst: "a.b.c~string^a.b.c", + type: "string", + }, + { + original: { + name: "list_field_select_unsupported", + expr: "a.b.pancakes", + disableCheck: true, + typeEnv: [ + { + name: "a.b", + ident: { + type: { listType: { elemType: { primitive: "STRING" } } }, + }, + }, + ], + bindings: { + "a.b": { + value: { + listValue: { values: [{ stringValue: "pancakes" }] }, + }, + }, + }, + evalError: { + errors: [ + { + message: + "type 'list_type:\u003celem_type:\u003cprimitive:STRING \u003e \u003e ' does not support field selection", + }, + ], + }, + }, + ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.pancakes^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:4: type 'list(string)' does not support field selection\n | a.b.pancakes\n | ...^", + }, + { + original: { + name: "int64_field_select_unsupported", + expr: "a.pancakes", + disableCheck: true, + typeEnv: [ + { name: "a", ident: { type: { primitive: "INT64" } } }, + ], + bindings: { a: { value: { int64Value: "15" } } }, + evalError: { + errors: [ + { + message: + "type 'int64_type' does not support field selection", + }, + ], + }, + }, + ast: "a^#*expr.Expr_IdentExpr#.pancakes^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:2: type 'int' does not support field selection\n | a.pancakes\n | .^", + }, + { + original: { + name: "ident_with_longest_prefix_check", + description: + "namespace resolution should try to find the longest prefix for the checker.", + expr: "a.b.c", + typeEnv: [ + { name: "a.b.c", ident: { type: { primitive: "STRING" } } }, + { + name: "a.b", + ident: { + type: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "STRING" }, + }, + }, + }, + }, + ], + bindings: { + "a.b": { + value: { + mapValue: { + entries: [ + { + key: { stringValue: "c" }, + value: { stringValue: "oops" }, + }, + ], + }, + }, + }, + "a.b.c": { value: { stringValue: "yeah" } }, + }, + value: { stringValue: "yeah" }, + }, + ast: "a^#*expr.Expr_IdentExpr#.b^#*expr.Expr_SelectExpr#.c^#*expr.Expr_SelectExpr#", + checkedAst: "a.b.c~string^a.b.c", + type: "string", + }, + { + original: { + name: "map_key_float", + description: "map should not support float as the key.", + expr: "{3.3:15.15, 1.0: 5}[1.0]", + disableCheck: true, + evalError: { errors: [{ message: "unsupported key type" }] }, + }, + ast: "_[_](\n {\n 3.3^#*expr.Constant_DoubleValue#:15.15^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_DoubleValue#:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 3.3~double:15.15~double,\n 1~double:5~int\n }~map(double, dyn),\n 1~double\n)~dyn^index_map", + type: "dyn", + }, + { + original: { + name: "map_key_null", + description: "map should not support null as the key.", + expr: "{null:false}[null]", + disableCheck: true, + evalError: { errors: [{ message: "unsupported key type" }] }, + }, + ast: "_[_](\n {\n null^#*expr.Constant_NullValue#:false^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n null~null:false~bool\n }~map(null, bool),\n null~null\n)~bool^index_map", + type: "bool", + }, + { + original: { + name: "map_value_repeat_key", + description: "map should not support repeated key.", + expr: "{true:1,false:2,true:3}[true]", + evalError: { + errors: [{ message: "Failed with repeated key" }], + }, + }, + ast: "_[_](\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n false^#*expr.Constant_BoolValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n true~bool:1~int,\n false~bool:2~int,\n true~bool:3~int\n }~map(bool, int),\n true~bool\n)~int^index_map", + type: "int", + }, + { + original: { + name: "map_value_repeat_key_heterogeneous", + description: "map should not support repeated key.", + expr: "{0: 1, 0u: 2}[0.0]", + evalError: { + errors: [{ message: "Failed with repeated key" }], + }, + }, + ast: "_[_](\n {\n 0^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 0u^#*expr.Constant_Uint64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n {\n 0~int:1~int,\n 0u~uint:2~int\n }~map(dyn, int),\n 0~double\n)~int^index_map", + type: "int", + }, + ], + }, + { + name: "in", + tests: [ + { + original: { + name: "empty", + expr: "7 in {}", + value: { boolValue: false }, + }, + ast: "@in(\n 7^#*expr.Constant_Int64Value#,\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: "@in(\n 7~int,\n {}~map(int, dyn)\n)~bool^in_map", + type: "bool", + }, + { + original: { + name: "singleton", + expr: "true in {true: 1}", + value: { boolValue: true }, + }, + ast: "@in(\n true^#*expr.Constant_BoolValue#,\n {\n true^#*expr.Constant_BoolValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n true~bool,\n {\n true~bool:1~int\n }~map(bool, int)\n)~bool^in_map", + type: "bool", + }, + { + original: { + name: "present", + expr: "'George' in {'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}", + value: { boolValue: true }, + }, + ast: '@in(\n "George"^#*expr.Constant_StringValue#,\n {\n "John"^#*expr.Constant_StringValue#:"smart"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "Paul"^#*expr.Constant_StringValue#:"cute"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "George"^#*expr.Constant_StringValue#:"quiet"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "Ringo"^#*expr.Constant_StringValue#:"funny"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "George"~string,\n {\n "John"~string:"smart"~string,\n "Paul"~string:"cute"~string,\n "George"~string:"quiet"~string,\n "Ringo"~string:"funny"~string\n }~map(string, string)\n)~bool^in_map', + type: "bool", + }, + { + original: { + name: "absent", + expr: "'spider' in {'ant': 6, 'fly': 6, 'centipede': 100}", + value: { boolValue: false }, + }, + ast: '@in(\n "spider"^#*expr.Constant_StringValue#,\n {\n "ant"^#*expr.Constant_StringValue#:6^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "fly"^#*expr.Constant_StringValue#:6^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "centipede"^#*expr.Constant_StringValue#:100^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "spider"~string,\n {\n "ant"~string:6~int,\n "fly"~string:6~int,\n "centipede"~string:100~int\n }~map(string, int)\n)~bool^in_map', + type: "bool", + }, + { + original: { + name: "mixed_numbers_and_keys_present", + expr: "3.0 in {1: 1, 2: 2, 3u: 3} \u0026\u0026 2u in {1u: 1, 2: 2} \u0026\u0026 1 in {1u: 1, 2: 2}", + value: { boolValue: true }, + }, + ast: "_\u0026\u0026_(\n _\u0026\u0026_(\n @in(\n 3^#*expr.Constant_DoubleValue#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 2u^#*expr.Constant_Uint64Value#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n @in(\n 1^#*expr.Constant_Int64Value#,\n {\n 1u^#*expr.Constant_Uint64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n _\u0026\u0026_(\n @in(\n 3~double,\n {\n 1~int:1~int,\n 2~int:2~int,\n 3u~uint:3~int\n }~map(dyn, int)\n )~bool^in_map,\n @in(\n 2u~uint,\n {\n 1u~uint:1~int,\n 2~int:2~int\n }~map(dyn, int)\n )~bool^in_map\n )~bool^logical_and,\n @in(\n 1~int,\n {\n 1u~uint:1~int,\n 2~int:2~int\n }~map(dyn, int)\n )~bool^in_map\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "mixed_numbers_and_keys_absent", + expr: "3.1 in {1: 1, 2: 2, 3u: 3}", + value: { boolValue: false }, + }, + ast: "@in(\n 3.1^#*expr.Constant_DoubleValue#,\n {\n 1^#*expr.Constant_Int64Value#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 3u^#*expr.Constant_Uint64Value#:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n 3.1~double,\n {\n 1~int:1~int,\n 2~int:2~int,\n 3u~uint:3~int\n }~map(dyn, int)\n)~bool^in_map", + type: "bool", + }, + ], + }, + ], + }, + { + name: "fp_math", + suites: [ + { + name: "fp_math", + tests: [ + { + original: { + name: "add_positive_positive", + expr: "4.25 + 15.25", + value: { doubleValue: 19.5 }, + }, + ast: "_+_(\n 4.25^#*expr.Constant_DoubleValue#,\n 15.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n 4.25~double,\n 15.25~double\n)~double^add_double", + type: "double", + }, + { + original: { + name: "add_positive_negative", + expr: "17.75 + (-7.75)", + value: { doubleValue: 10 }, + }, + ast: "_+_(\n 17.75^#*expr.Constant_DoubleValue#,\n -7.75^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n 17.75~double,\n -7.75~double\n)~double^add_double", + type: "double", + }, + { + original: { + name: "add_negative_negative", + expr: "-4.125 + (-2.125)", + value: { doubleValue: -6.25 }, + }, + ast: "_+_(\n -4.125^#*expr.Constant_DoubleValue#,\n -2.125^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n -4.125~double,\n -2.125~double\n)~double^add_double", + type: "double", + }, + { + original: { + name: "sub_positive_positive", + expr: "42.0 - 12.0", + value: { doubleValue: 30 }, + }, + ast: "_-_(\n 42^#*expr.Constant_DoubleValue#,\n 12^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_-_(\n 42~double,\n 12~double\n)~double^subtract_double", + type: "double", + }, + { + original: { + name: "sub_positive_negative", + expr: "42.875 - (-22.0)", + value: { doubleValue: 64.875 }, + }, + ast: "_-_(\n 42.875^#*expr.Constant_DoubleValue#,\n -22^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_-_(\n 42.875~double,\n -22~double\n)~double^subtract_double", + type: "double", + }, + { + original: { + name: "sub_negative_negative", + expr: "-4.875 - (-0.125)", + value: { doubleValue: -4.75 }, + }, + ast: "_-_(\n -4.875^#*expr.Constant_DoubleValue#,\n -0.125^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_-_(\n -4.875~double,\n -0.125~double\n)~double^subtract_double", + type: "double", + }, + { + original: { + name: "multiply_positive_positive", + expr: "42.5 * 0.2", + value: { doubleValue: 8.5 }, + }, + ast: "_*_(\n 42.5^#*expr.Constant_DoubleValue#,\n 0.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 42.5~double,\n 0.2~double\n)~double^multiply_double", + type: "double", + }, + { + original: { + name: "multiply_positive_negative", + expr: "40.75 * (-2.25)", + value: { doubleValue: -91.6875 }, + }, + ast: "_*_(\n 40.75^#*expr.Constant_DoubleValue#,\n -2.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 40.75~double,\n -2.25~double\n)~double^multiply_double", + type: "double", + }, + { + original: { + name: "multiply_negative_negative", + expr: "-3.0 * (-2.5)", + value: { doubleValue: 7.5 }, + }, + ast: "_*_(\n -3^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n -3~double,\n -2.5~double\n)~double^multiply_double", + type: "double", + }, + { + original: { + name: "divide_positive_positive", + expr: "0.0625 / 0.002", + value: { doubleValue: 31.25 }, + }, + ast: "_/_(\n 0.0625^#*expr.Constant_DoubleValue#,\n 0.002^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_/_(\n 0.0625~double,\n 0.002~double\n)~double^divide_double", + type: "double", + }, + { + original: { + name: "divide_positive_negative", + expr: "-2.0 / 2.0", + value: { doubleValue: -1 }, + }, + ast: "_/_(\n -2^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_/_(\n -2~double,\n 2~double\n)~double^divide_double", + type: "double", + }, + { + original: { + name: "divide_negative_negative", + expr: "-8.875 / (-0.0625)", + value: { doubleValue: 142 }, + }, + ast: "_/_(\n -8.875^#*expr.Constant_DoubleValue#,\n -0.0625^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_/_(\n -8.875~double,\n -0.0625~double\n)~double^divide_double", + type: "double", + }, + { + original: { + name: "mod_not_support", + expr: "47.5 % 5.5", + disableCheck: true, + evalError: { + errors: [ + { + message: + "found no matching overload for '_%_' applied to '(double, double)'", + }, + ], + }, + }, + ast: "_%_(\n 47.5^#*expr.Constant_DoubleValue#,\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:6: found no matching overload for '_%_' applied to '(double, double)'\n | 47.5 % 5.5\n | .....^", + }, + { + original: { + name: "negative", + expr: "-(4.5)", + value: { doubleValue: -4.5 }, + }, + ast: "-_(\n 4.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "-_(\n 4.5~double\n)~double^negate_double", + type: "double", + }, + { + original: { + name: "double_negative", + expr: "-(-1.25)", + value: { doubleValue: 1.25 }, + }, + ast: "-_(\n -1.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "-_(\n -1.25~double\n)~double^negate_double", + type: "double", + }, + { + original: { + name: "negative_zero", + expr: "-(0.0)", + value: { doubleValue: 0 }, + }, + ast: "-_(\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "-_(\n 0~double\n)~double^negate_double", + type: "double", + }, + { + original: { + name: "divide_zero", + expr: "15.75 / 0.0", + value: { doubleValue: "Infinity" }, + }, + ast: "_/_(\n 15.75^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_/_(\n 15.75~double,\n 0~double\n)~double^divide_double", + type: "double", + }, + { + original: { + name: "multiply_zero", + expr: "15.36 * 0.0", + value: { doubleValue: 0 }, + }, + ast: "_*_(\n 15.36^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 15.36~double,\n 0~double\n)~double^multiply_double", + type: "double", + }, + { + original: { + name: "add_left_identity", + expr: "0.0 + 1.75", + value: { doubleValue: 1.75 }, + }, + ast: "_+_(\n 0^#*expr.Constant_DoubleValue#,\n 1.75^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n 0~double,\n 1.75~double\n)~double^add_double", + type: "double", + }, + { + original: { + name: "add_right_identity", + expr: " 2.5 + 0.0", + value: { doubleValue: 2.5 }, + }, + ast: "_+_(\n 2.5^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n 2.5~double,\n 0~double\n)~double^add_double", + type: "double", + }, + { + original: { + name: "add_commutative", + expr: "7.5 + 1.5 == 1.5 + 7.5", + value: { boolValue: true }, + }, + ast: "_==_(\n _+_(\n 7.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 1.5^#*expr.Constant_DoubleValue#,\n 7.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _+_(\n 7.5~double,\n 1.5~double\n )~double^add_double,\n _+_(\n 1.5~double,\n 7.5~double\n )~double^add_double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "add_associative", + expr: "5.625 + (15.75 + 2.0) == (5.625 + 15.75) + 2.0", + value: { boolValue: true }, + }, + ast: "_==_(\n _+_(\n 5.625^#*expr.Constant_DoubleValue#,\n _+_(\n 15.75^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5.625^#*expr.Constant_DoubleValue#,\n 15.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _+_(\n 5.625~double,\n _+_(\n 15.75~double,\n 2~double\n )~double^add_double\n )~double^add_double,\n _+_(\n _+_(\n 5.625~double,\n 15.75~double\n )~double^add_double,\n 2~double\n )~double^add_double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "mul_left_identity", + expr: "1.0 * 45.25", + value: { doubleValue: 45.25 }, + }, + ast: "_*_(\n 1^#*expr.Constant_DoubleValue#,\n 45.25^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 1~double,\n 45.25~double\n)~double^multiply_double", + type: "double", + }, + { + original: { + name: "mul_right_identity", + expr: "-25.25 * 1.0", + value: { doubleValue: -25.25 }, + }, + ast: "_*_(\n -25.25^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n -25.25~double,\n 1~double\n)~double^multiply_double", + type: "double", + }, + { + original: { + name: "mul_commutative", + expr: "1.5 * 25.875 == 25.875 * 1.5", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n 25.875^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25.875^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 1.5~double,\n 25.875~double\n )~double^multiply_double,\n _*_(\n 25.875~double,\n 1.5~double\n )~double^multiply_double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "mul_associative", + expr: "1.5 * (23.625 * 0.75) == (1.5 * 23.625) * 0.75", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n _*_(\n 23.625^#*expr.Constant_DoubleValue#,\n 0.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 1.5^#*expr.Constant_DoubleValue#,\n 23.625^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.75^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 1.5~double,\n _*_(\n 23.625~double,\n 0.75~double\n )~double^multiply_double\n )~double^multiply_double,\n _*_(\n _*_(\n 1.5~double,\n 23.625~double\n )~double^multiply_double,\n 0.75~double\n )~double^multiply_double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "add_mul_distribute", + expr: "5.75 * (1.5 + 2.5) == 5.75 * 1.5 + 5.75 * 2.5", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n _+_(\n 1.5^#*expr.Constant_DoubleValue#,\n 2.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5.75^#*expr.Constant_DoubleValue#,\n 2.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 5.75~double,\n _+_(\n 1.5~double,\n 2.5~double\n )~double^add_double\n )~double^multiply_double,\n _+_(\n _*_(\n 5.75~double,\n 1.5~double\n )~double^multiply_double,\n _*_(\n 5.75~double,\n 2.5~double\n )~double^multiply_double\n )~double^add_double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "fp_overflow_positive", + description: "DBL_MAX(2^1023) times two", + expr: "2.0 * 8.988466e+307 ", + value: { doubleValue: "Infinity" }, + }, + ast: "_*_(\n 2^#*expr.Constant_DoubleValue#,\n 8.988466e+307^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 2~double,\n 8.988466e+307~double\n)~double^multiply_double", + type: "double", + }, + { + original: { + name: "fp_overflow_negative", + description: "-DBL_MAX(-2^1023) times two", + expr: "2.0 * -8.988466e+307 ", + value: { doubleValue: "-Infinity" }, + }, + ast: "_*_(\n 2^#*expr.Constant_DoubleValue#,\n -8.988466e+307^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 2~double,\n -8.988466e+307~double\n)~double^multiply_double", + type: "double", + }, + { + original: { + name: "fp_underflow", + description: "DBL_MIN(2^-1074) divided by two", + expr: "1e-324 / 2.0", + value: { doubleValue: 0 }, + }, + ast: "_/_(\n 0^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_/_(\n 0~double,\n 2~double\n)~double^divide_double", + type: "double", + }, + ], + }, + ], + }, + { + name: "integer_math", + suites: [ + { + name: "int64_math", + tests: [ + { + original: { + name: "add_positive_positive", + expr: "40 + 2", + value: { int64Value: "42" }, + }, + ast: "_+_(\n 40^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n 40~int,\n 2~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "add_positive_negative", + expr: "42 + (-7)", + value: { int64Value: "35" }, + }, + ast: "_+_(\n 42^#*expr.Constant_Int64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n 42~int,\n -7~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "add_negative_negative", + expr: "-4 + (-2)", + value: { int64Value: "-6" }, + }, + ast: "_+_(\n -4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n -4~int,\n -2~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "sub_positive_positive", + expr: "42 - 12", + value: { int64Value: "30" }, + }, + ast: "_-_(\n 42^#*expr.Constant_Int64Value#,\n 12^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_-_(\n 42~int,\n 12~int\n)~int^subtract_int64", + type: "int", + }, + { + original: { + name: "sub_positive_negative", + expr: "42 - (-22)", + value: { int64Value: "64" }, + }, + ast: "_-_(\n 42^#*expr.Constant_Int64Value#,\n -22^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_-_(\n 42~int,\n -22~int\n)~int^subtract_int64", + type: "int", + }, + { + original: { + name: "sub_negative_negative", + expr: "-42 - (-12)", + value: { int64Value: "-30" }, + }, + ast: "_-_(\n -42^#*expr.Constant_Int64Value#,\n -12^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_-_(\n -42~int,\n -12~int\n)~int^subtract_int64", + type: "int", + }, + { + original: { + name: "multiply_positive_positive", + expr: "42 * 2", + value: { int64Value: "84" }, + }, + ast: "_*_(\n 42^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_*_(\n 42~int,\n 2~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "multiply_positive_negative", + expr: "40 * (-2)", + value: { int64Value: "-80" }, + }, + ast: "_*_(\n 40^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_*_(\n 40~int,\n -2~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "multiply_negative_negative", + expr: "-30 * (-2)", + value: { int64Value: "60" }, + }, + ast: "_*_(\n -30^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_*_(\n -30~int,\n -2~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "divide_positive_positive", + expr: "42 / 2", + value: { int64Value: "21" }, + }, + ast: "_/_(\n 42^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_/_(\n 42~int,\n 2~int\n)~int^divide_int64", + type: "int", + }, + { + original: { + name: "divide_positive_negative", + expr: "-20 / 2", + value: { int64Value: "-10" }, + }, + ast: "_/_(\n -20^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_/_(\n -20~int,\n 2~int\n)~int^divide_int64", + type: "int", + }, + { + original: { + name: "divide_negative_negative", + expr: "-80 / (-2)", + value: { int64Value: "40" }, + }, + ast: "_/_(\n -80^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_/_(\n -80~int,\n -2~int\n)~int^divide_int64", + type: "int", + }, + { + original: { + name: "mod_positive_positive", + expr: "47 % 5", + value: { int64Value: "2" }, + }, + ast: "_%_(\n 47^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_%_(\n 47~int,\n 5~int\n)~int^modulo_int64", + type: "int", + }, + { + original: { + name: "mod_positive_negative", + expr: "43 % (-5)", + value: { int64Value: "3" }, + }, + ast: "_%_(\n 43^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_%_(\n 43~int,\n -5~int\n)~int^modulo_int64", + type: "int", + }, + { + original: { + name: "mod_negative_negative", + expr: "-42 % (-5)", + value: { int64Value: "-2" }, + }, + ast: "_%_(\n -42^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_%_(\n -42~int,\n -5~int\n)~int^modulo_int64", + type: "int", + }, + { + original: { + name: "mod_negative_positive", + expr: "-3 % 5", + value: { int64Value: "-3" }, + }, + ast: "_%_(\n -3^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_%_(\n -3~int,\n 5~int\n)~int^modulo_int64", + type: "int", + }, + { + original: { + name: "unary_minus_pos", + expr: "-(42)", + value: { int64Value: "-42" }, + }, + ast: "-_(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "-_(\n 42~int\n)~int^negate_int64", + type: "int", + }, + { + original: { + name: "unary_minus_neg", + expr: "-(-42)", + value: { int64Value: "42" }, + }, + ast: "-_(\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "-_(\n -42~int\n)~int^negate_int64", + type: "int", + }, + { + original: { + name: "unary_minus_no_overload", + expr: "-(42u)", + disableCheck: true, + evalError: { errors: [{ message: "no_such_overload" }] }, + }, + ast: "-_(\n 42u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(uint)'\n | -(42u)\n | ^", + }, + { + original: { + name: "unary_minus_not_bool", + expr: "-false", + disableCheck: true, + evalError: { errors: [{ message: "no_such_overload" }] }, + }, + ast: "-_(\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(bool)'\n | -false\n | ^", + }, + { + original: { + name: "mod_zero", + expr: "34 % 0", + evalError: { errors: [{ message: "modulus by zero" }] }, + }, + ast: "_%_(\n 34^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_%_(\n 34~int,\n 0~int\n)~int^modulo_int64", + type: "int", + }, + { + original: { + name: "negative_zero", + expr: "-(0)", + value: { int64Value: "0" }, + }, + ast: "-_(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "-_(\n 0~int\n)~int^negate_int64", + type: "int", + }, + { + original: { + name: "double_negative", + expr: "-(-42)", + value: { int64Value: "42" }, + }, + ast: "-_(\n -42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "-_(\n -42~int\n)~int^negate_int64", + type: "int", + }, + { + original: { + name: "divide_zero", + expr: "15 / 0", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "_/_(\n 15^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_/_(\n 15~int,\n 0~int\n)~int^divide_int64", + type: "int", + }, + { + original: { + name: "multiply_zero", + expr: "15 * 0", + value: { int64Value: "0" }, + }, + ast: "_*_(\n 15^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_*_(\n 15~int,\n 0~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "add_left_identity", + expr: "0 + 17", + value: { int64Value: "17" }, + }, + ast: "_+_(\n 0^#*expr.Constant_Int64Value#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n 0~int,\n 17~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "add_right_identity", + expr: " 29 + 0", + value: { int64Value: "29" }, + }, + ast: "_+_(\n 29^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n 29~int,\n 0~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "add_commutative", + expr: "75 + 15 == 15 + 75", + value: { boolValue: true }, + }, + ast: "_==_(\n _+_(\n 75^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 75^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _+_(\n 75~int,\n 15~int\n )~int^add_int64,\n _+_(\n 15~int,\n 75~int\n )~int^add_int64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "add_associative", + expr: "5 + (15 + 20) == (5 + 15) + 20", + value: { boolValue: true }, + }, + ast: "_==_(\n _+_(\n 5^#*expr.Constant_Int64Value#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _+_(\n 5~int,\n _+_(\n 15~int,\n 20~int\n )~int^add_int64\n )~int^add_int64,\n _+_(\n _+_(\n 5~int,\n 15~int\n )~int^add_int64,\n 20~int\n )~int^add_int64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "mul_left_identity", + expr: "1 * 45", + value: { int64Value: "45" }, + }, + ast: "_*_(\n 1^#*expr.Constant_Int64Value#,\n 45^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_*_(\n 1~int,\n 45~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "mul_right_identity", + expr: "-25 * 1", + value: { int64Value: "-25" }, + }, + ast: "_*_(\n -25^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_*_(\n -25~int,\n 1~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "mul_commutative", + expr: "15 * 25 == 25 * 15", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 15~int,\n 25~int\n )~int^multiply_int64,\n _*_(\n 25~int,\n 15~int\n )~int^multiply_int64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "mul_associative", + expr: "15 * (23 * 88) == (15 * 23) * 88", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n _*_(\n 23^#*expr.Constant_Int64Value#,\n 88^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 15^#*expr.Constant_Int64Value#,\n 23^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 88^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 15~int,\n _*_(\n 23~int,\n 88~int\n )~int^multiply_int64\n )~int^multiply_int64,\n _*_(\n _*_(\n 15~int,\n 23~int\n )~int^multiply_int64,\n 88~int\n )~int^multiply_int64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "add_mul_distribute", + expr: "5 * (15 + 25) == 5 * 15 + 5 * 25", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 5^#*expr.Constant_Int64Value#,\n _+_(\n 15^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 5~int,\n _+_(\n 15~int,\n 25~int\n )~int^add_int64\n )~int^multiply_int64,\n _+_(\n _*_(\n 5~int,\n 15~int\n )~int^multiply_int64,\n _*_(\n 5~int,\n 25~int\n )~int^multiply_int64\n )~int^add_int64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "int64_overflow_positive", + description: "LLONG_MAX plus one.", + expr: "9223372036854775807 + 1", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_+_(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n 9223372036854775807~int,\n 1~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "int64_overflow_negative", + description: "LLONG_MIN minus one.", + expr: "-9223372036854775808 - 1", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_-_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_-_(\n -9223372036854775808~int,\n 1~int\n)~int^subtract_int64", + type: "int", + }, + { + original: { + name: "int64_overflow_add_negative", + description: "negative overflow via addition", + expr: "-9223372036854775808 + (-1)", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_+_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n -9223372036854775808~int,\n -1~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "int64_overflow_sub_positive", + description: "positive overflow via subtraction", + expr: "1 - (-9223372036854775807)", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_-_(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_-_(\n 1~int,\n -9223372036854775807~int\n)~int^subtract_int64", + type: "int", + }, + { + original: { + name: "int64_min_negate", + description: "Negated LLONG_MIN is not representable.", + expr: "-(-9223372036854775808)", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "-_(\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "-_(\n -9223372036854775808~int\n)~int^negate_int64", + type: "int", + }, + { + original: { + name: "int64_min_negate_mul", + description: "Negate LLONG_MIN via multiplication", + expr: "(-9223372036854775808) * -1", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_*_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n -9223372036854775808~int,\n -1~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "int64_min_negate_div", + description: "Negate LLONG_MIN via division.", + expr: "(-9223372036854775808)/-1", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_/_(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_/_(\n -9223372036854775808~int,\n -1~int\n)~int^divide_int64", + type: "int", + }, + { + original: { + name: "int64_overflow_mul_positive", + description: "Overflow via multiplication.", + expr: "5000000000 * 5000000000", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_*_(\n 5000000000^#*expr.Constant_Int64Value#,\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 5000000000~int,\n 5000000000~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "int64_overflow_mul_negative", + description: "Overflow via multiplication.", + expr: "(-5000000000) * 5000000000", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_*_(\n -5000000000^#*expr.Constant_Int64Value#,\n 5000000000^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n -5000000000~int,\n 5000000000~int\n)~int^multiply_int64", + type: "int", + }, + { + original: { + name: "uint64_overflow_positive", + description: "ULLONG_MAX plus one.", + expr: "18446744073709551615u + 1u", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_+_(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^add_uint64", + type: "uint", + }, + { + original: { + name: "uint64_overflow_negative", + description: "zero minus one.", + expr: "0u - 1u", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_-_(\n 0u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_-_(\n 0u~uint,\n 1u~uint\n)~uint^subtract_uint64", + type: "uint", + }, + { + original: { + name: "uint64_overflow_mul_positive", + description: "Overflow via multiplication.", + expr: "5000000000u * 5000000000u", + evalError: { + errors: [{ message: "return error for overflow" }], + }, + }, + ast: "_*_(\n 5000000000u^#*expr.Constant_Uint64Value#,\n 5000000000u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 5000000000u~uint,\n 5000000000u~uint\n)~uint^multiply_uint64", + type: "uint", + }, + ], + }, + { + name: "uint64_math", + tests: [ + { + original: { + name: "add", + expr: "42u + 2u", + value: { uint64Value: "44" }, + }, + ast: "_+_(\n 42u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n 42u~uint,\n 2u~uint\n)~uint^add_uint64", + type: "uint", + }, + { + original: { + name: "sub", + expr: "42u - 12u", + value: { uint64Value: "30" }, + }, + ast: "_-_(\n 42u^#*expr.Constant_Uint64Value#,\n 12u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_-_(\n 42u~uint,\n 12u~uint\n)~uint^subtract_uint64", + type: "uint", + }, + { + original: { + name: "multiply", + expr: "40u * 2u", + value: { uint64Value: "80" }, + }, + ast: "_*_(\n 40u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 40u~uint,\n 2u~uint\n)~uint^multiply_uint64", + type: "uint", + }, + { + original: { + name: "divide", + expr: "60u / 2u", + value: { uint64Value: "30" }, + }, + ast: "_/_(\n 60u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_/_(\n 60u~uint,\n 2u~uint\n)~uint^divide_uint64", + type: "uint", + }, + { + original: { + name: "mod", + expr: "42u % 5u", + value: { uint64Value: "2" }, + }, + ast: "_%_(\n 42u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_%_(\n 42u~uint,\n 5u~uint\n)~uint^modulo_uint64", + type: "uint", + }, + { + original: { + name: "negative_no_overload", + expr: "-(5u)", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "-_(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: found no matching overload for '-_' applied to '(uint)'\n | -(5u)\n | ^", + }, + { + original: { + name: "mod_zero", + expr: "34u % 0u", + evalError: { errors: [{ message: "modulus by zero" }] }, + }, + ast: "_%_(\n 34u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_%_(\n 34u~uint,\n 0u~uint\n)~uint^modulo_uint64", + type: "uint", + }, + { + original: { + name: "divide_zero", + expr: "15u / 0u", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "_/_(\n 15u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_/_(\n 15u~uint,\n 0u~uint\n)~uint^divide_uint64", + type: "uint", + }, + { + original: { + name: "multiply_zero", + expr: "15u * 0u", + value: { uint64Value: "0" }, + }, + ast: "_*_(\n 15u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 15u~uint,\n 0u~uint\n)~uint^multiply_uint64", + type: "uint", + }, + { + original: { + name: "add_left_identity", + expr: "0u + 17u", + value: { uint64Value: "17" }, + }, + ast: "_+_(\n 0u^#*expr.Constant_Uint64Value#,\n 17u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n 0u~uint,\n 17u~uint\n)~uint^add_uint64", + type: "uint", + }, + { + original: { + name: "add_right_identity", + expr: " 29u + 0u", + value: { uint64Value: "29" }, + }, + ast: "_+_(\n 29u^#*expr.Constant_Uint64Value#,\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_+_(\n 29u~uint,\n 0u~uint\n)~uint^add_uint64", + type: "uint", + }, + { + original: { + name: "add_commutative", + expr: "75u + 15u == 15u + 75u", + value: { boolValue: true }, + }, + ast: "_==_(\n _+_(\n 75u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 75u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _+_(\n 75u~uint,\n 15u~uint\n )~uint^add_uint64,\n _+_(\n 15u~uint,\n 75u~uint\n )~uint^add_uint64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "add_associative", + expr: "5u + (15u + 20u) == (5u + 15u) + 20u", + value: { boolValue: true }, + }, + ast: "_==_(\n _+_(\n 5u^#*expr.Constant_Uint64Value#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 20u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _+_(\n 5u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 20u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _+_(\n 5u~uint,\n _+_(\n 15u~uint,\n 20u~uint\n )~uint^add_uint64\n )~uint^add_uint64,\n _+_(\n _+_(\n 5u~uint,\n 15u~uint\n )~uint^add_uint64,\n 20u~uint\n )~uint^add_uint64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "mul_left_identity", + expr: "1u * 45u", + value: { uint64Value: "45" }, + }, + ast: "_*_(\n 1u^#*expr.Constant_Uint64Value#,\n 45u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 1u~uint,\n 45u~uint\n)~uint^multiply_uint64", + type: "uint", + }, + { + original: { + name: "mul_right_identity", + expr: "25u * 1u", + value: { uint64Value: "25" }, + }, + ast: "_*_(\n 25u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_*_(\n 25u~uint,\n 1u~uint\n)~uint^multiply_uint64", + type: "uint", + }, + { + original: { + name: "mul_commutative", + expr: "15u * 25u == 25u * 15u", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 25u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 15u~uint,\n 25u~uint\n )~uint^multiply_uint64,\n _*_(\n 25u~uint,\n 15u~uint\n )~uint^multiply_uint64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "mul_associative", + expr: "15u * (23u * 88u) == (15u * 23u) * 88u", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n _*_(\n 23u^#*expr.Constant_Uint64Value#,\n 88u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _*_(\n _*_(\n 15u^#*expr.Constant_Uint64Value#,\n 23u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 88u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 15u~uint,\n _*_(\n 23u~uint,\n 88u~uint\n )~uint^multiply_uint64\n )~uint^multiply_uint64,\n _*_(\n _*_(\n 15u~uint,\n 23u~uint\n )~uint^multiply_uint64,\n 88u~uint\n )~uint^multiply_uint64\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "add_mul_distribute", + expr: "5u * (15u + 25u) == 5u * 15u + 5u * 25u", + value: { boolValue: true }, + }, + ast: "_==_(\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n _+_(\n 15u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n 15u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n _*_(\n 5u^#*expr.Constant_Uint64Value#,\n 25u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _*_(\n 5u~uint,\n _+_(\n 15u~uint,\n 25u~uint\n )~uint^add_uint64\n )~uint^multiply_uint64,\n _+_(\n _*_(\n 5u~uint,\n 15u~uint\n )~uint^multiply_uint64,\n _*_(\n 5u~uint,\n 25u~uint\n )~uint^multiply_uint64\n )~uint^add_uint64\n)~bool^equals", + type: "bool", + }, + ], + }, + ], + }, + { + name: "lists", + suites: [ + { + name: "concatenation", + tests: [ + { + original: { + name: "list_append", + expr: "[0, 1, 2] + [3, 4, 5] == [0, 1, 2, 3, 4, 5]", + value: { boolValue: true }, + }, + ast: "_==_(\n _+_(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _+_(\n [\n 0~int,\n 1~int,\n 2~int\n ]~list(int),\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n )~list(int)^add_list,\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "list_not_commutative", + expr: "[0, 1, 2] + [3, 4, 5] == [3, 4, 5, 0, 1, 2]", + value: { boolValue: false }, + }, + ast: "_==_(\n _+_(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n _+_(\n [\n 0~int,\n 1~int,\n 2~int\n ]~list(int),\n [\n 3~int,\n 4~int,\n 5~int\n ]~list(int)\n )~list(int)^add_list,\n [\n 3~int,\n 4~int,\n 5~int,\n 0~int,\n 1~int,\n 2~int\n ]~list(int)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "list_repeat", + expr: "[2] + [2]", + value: { + listValue: { + values: [{ int64Value: "2" }, { int64Value: "2" }], + }, + }, + }, + ast: "_+_(\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n [\n 2~int\n ]~list(int),\n [\n 2~int\n ]~list(int)\n)~list(int)^add_list", + type: "list(int)", + }, + { + original: { + name: "empty_empty", + expr: "[] + []", + value: { listValue: {} }, + }, + ast: "_+_(\n []^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n []~list(dyn),\n []~list(dyn)\n)~list(dyn)^add_list", + type: "list(dyn)", + }, + { + original: { + name: "left_unit", + expr: "[] + [3, 4]", + value: { + listValue: { + values: [{ int64Value: "3" }, { int64Value: "4" }], + }, + }, + }, + ast: "_+_(\n []^#*expr.Expr_ListExpr#,\n [\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n []~list(int),\n [\n 3~int,\n 4~int\n ]~list(int)\n)~list(int)^add_list", + type: "list(int)", + }, + { + original: { + name: "right_unit", + expr: "[1, 2] + []", + value: { + listValue: { + values: [{ int64Value: "1" }, { int64Value: "2" }], + }, + }, + }, + ast: "_+_(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n [\n 1~int,\n 2~int\n ]~list(int),\n []~list(int)\n)~list(int)^add_list", + type: "list(int)", + }, + ], + }, + { + name: "index", + tests: [ + { + original: { + name: "zero_based", + expr: "[7, 8, 9][0]", + value: { int64Value: "7" }, + }, + ast: "_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n 0~int\n)~int^index_list", + type: "int", + }, + { + original: { + name: "zero_based_double", + expr: "[7, 8, 9][dyn(0.0)]", + value: { int64Value: "7" }, + }, + ast: "_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0~double\n )~dyn^to_dyn\n)~int^index_list", + type: "int", + }, + { + original: { + name: "zero_based_double_error", + expr: "[7, 8, 9][dyn(0.1)]", + evalError: { errors: [{ message: "invalid_argument" }] }, + }, + ast: "_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0.1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0.1~double\n )~dyn^to_dyn\n)~int^index_list", + type: "int", + }, + { + original: { + name: "zero_based_uint", + expr: "[7, 8, 9][dyn(0u)]", + value: { int64Value: "7" }, + }, + ast: "_[_](\n [\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n 0u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n 7~int,\n 8~int,\n 9~int\n ]~list(int),\n dyn(\n 0u~uint\n )~dyn^to_dyn\n)~int^index_list", + type: "int", + }, + { + original: { + name: "singleton", + expr: "['foo'][0]", + value: { stringValue: "foo" }, + }, + ast: '_[_](\n [\n "foo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n [\n "foo"~string\n ]~list(string),\n 0~int\n)~string^index_list', + type: "string", + }, + { + original: { + name: "middle", + expr: "[0, 1, 1, 2, 3, 5, 8, 13][4]", + value: { int64Value: "3" }, + }, + ast: "_[_](\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 13^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n 0~int,\n 1~int,\n 1~int,\n 2~int,\n 3~int,\n 5~int,\n 8~int,\n 13~int\n ]~list(int),\n 4~int\n)~int^index_list", + type: "int", + }, + { + original: { + name: "last", + expr: "['George', 'John', 'Paul', 'Ringo'][3]", + value: { stringValue: "Ringo" }, + }, + ast: '_[_](\n [\n "George"^#*expr.Constant_StringValue#,\n "John"^#*expr.Constant_StringValue#,\n "Paul"^#*expr.Constant_StringValue#,\n "Ringo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n [\n "George"~string,\n "John"~string,\n "Paul"~string,\n "Ringo"~string\n ]~list(string),\n 3~int\n)~string^index_list', + type: "string", + }, + { + original: { + name: "index_out_of_bounds", + expr: "[1, 2, 3][3]", + evalError: { errors: [{ message: "invalid_argument" }] }, + }, + ast: "_[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n)~int^index_list", + type: "int", + }, + { + original: { + name: "index_out_of_bounds_or_false", + expr: "dyn([1, 2, 3][3]) || false", + evalError: { errors: [{ message: "invalid_argument" }] }, + }, + ast: "_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "index_out_of_bounds_or_true", + expr: "dyn([1, 2, 3][3]) || true", + value: { boolValue: true }, + }, + ast: "_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "index_out_of_bounds_and_false", + expr: "dyn([1, 2, 3][3]) \u0026\u0026 false", + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "index_out_of_bounds_and_true", + expr: "dyn([1, 2, 3][3]) \u0026\u0026 true", + evalError: { errors: [{ message: "invalid_argument" }] }, + }, + ast: "_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n 3~int\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "bad_index_type", + expr: "[1, 2, 3][dyn('')]", + evalError: { errors: [{ message: "invalid_argument" }] }, + }, + ast: '_[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n)~int^index_list', + type: "int", + }, + { + original: { + name: "bad_index_type_or_false", + expr: "dyn([1, 2, 3][dyn('')]) || false", + evalError: { errors: [{ message: "invalid_argument" }] }, + }, + ast: '_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_or', + type: "bool", + }, + { + original: { + name: "bad_index_type_or_true", + expr: "dyn([1, 2, 3][dyn('')]) || true", + value: { boolValue: true }, + }, + ast: '_||_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_||_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_or', + type: "bool", + }, + { + original: { + name: "bad_index_type_and_false", + expr: "dyn([1, 2, 3][dyn('')]) \u0026\u0026 false", + value: { boolValue: false }, + }, + ast: '_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n false~bool\n)~bool^logical_and', + type: "bool", + }, + { + original: { + name: "bad_index_type_and_true", + expr: "dyn([1, 2, 3][dyn('')]) \u0026\u0026 true", + evalError: { errors: [{ message: "invalid_argument" }] }, + }, + ast: '_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u0026\u0026_(\n dyn(\n _[_](\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n dyn(\n ""~string\n )~dyn^to_dyn\n )~int^index_list\n )~dyn^to_dyn,\n true~bool\n)~bool^logical_and', + type: "bool", + }, + ], + }, + { + name: "in", + tests: [ + { + original: { + name: "empty", + expr: "7 in []", + value: { boolValue: false }, + }, + ast: "@in(\n 7^#*expr.Constant_Int64Value#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: "@in(\n 7~int,\n []~list(int)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "singleton", + expr: "4u in [4u]", + value: { boolValue: true }, + }, + ast: "@in(\n 4u^#*expr.Constant_Uint64Value#,\n [\n 4u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n 4u~uint,\n [\n 4u~uint\n ]~list(uint)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "first", + expr: "'alpha' in ['alpha', 'beta', 'gamma']", + value: { boolValue: true }, + }, + ast: '@in(\n "alpha"^#*expr.Constant_StringValue#,\n [\n "alpha"^#*expr.Constant_StringValue#,\n "beta"^#*expr.Constant_StringValue#,\n "gamma"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "alpha"~string,\n [\n "alpha"~string,\n "beta"~string,\n "gamma"~string\n ]~list(string)\n)~bool^in_list', + type: "bool", + }, + { + original: { + name: "middle", + expr: "3 in [5, 4, 3, 2, 1]", + value: { boolValue: true }, + }, + ast: "@in(\n 3^#*expr.Constant_Int64Value#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n 3~int,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "last", + expr: "20u in [4u, 6u, 8u, 12u, 20u]", + value: { boolValue: true }, + }, + ast: "@in(\n 20u^#*expr.Constant_Uint64Value#,\n [\n 4u^#*expr.Constant_Uint64Value#,\n 6u^#*expr.Constant_Uint64Value#,\n 8u^#*expr.Constant_Uint64Value#,\n 12u^#*expr.Constant_Uint64Value#,\n 20u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n 20u~uint,\n [\n 4u~uint,\n 6u~uint,\n 8u~uint,\n 12u~uint,\n 20u~uint\n ]~list(uint)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "double_in_ints", + expr: "dyn(3.0) in [5, 4, 3, 2, 1]", + value: { boolValue: true }, + }, + ast: "@in(\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n dyn(\n 3~double\n )~dyn^to_dyn,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "uint_in_ints", + expr: "dyn(3u) in [5, 4, 3, 2, 1]", + value: { boolValue: true }, + }, + ast: "@in(\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n [\n 5~int,\n 4~int,\n 3~int,\n 2~int,\n 1~int\n ]~list(int)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "int_in_doubles", + expr: "dyn(3) in [5.0, 4.0, 3.0, 2.0, 1.0]", + value: { boolValue: true }, + }, + ast: "@in(\n dyn(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_DoubleValue#,\n 4^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n dyn(\n 3~int\n )~dyn^to_dyn,\n [\n 5~double,\n 4~double,\n 3~double,\n 2~double,\n 1~double\n ]~list(double)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "uint_in_doubles", + expr: "dyn(3u) in [5.0, 4.0, 3.0, 2.0, 1.0]", + value: { boolValue: true }, + }, + ast: "@in(\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5^#*expr.Constant_DoubleValue#,\n 4^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#,\n 2^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n [\n 5~double,\n 4~double,\n 3~double,\n 2~double,\n 1~double\n ]~list(double)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "int_in_uints", + expr: "dyn(3) in [5u, 4u, 3u, 2u, 1u]", + value: { boolValue: true }, + }, + ast: "@in(\n dyn(\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n 5u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n dyn(\n 3~int\n )~dyn^to_dyn,\n [\n 5u~uint,\n 4u~uint,\n 3u~uint,\n 2u~uint,\n 1u~uint\n ]~list(uint)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "double_in_uints", + expr: "dyn(3.0) in [5u, 4u, 3u, 2u, 1u]", + value: { boolValue: true }, + }, + ast: "@in(\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n [\n 5u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "@in(\n dyn(\n 3~double\n )~dyn^to_dyn,\n [\n 5u~uint,\n 4u~uint,\n 3u~uint,\n 2u~uint,\n 1u~uint\n ]~list(uint)\n)~bool^in_list", + type: "bool", + }, + { + original: { + name: "missing", + expr: "'hawaiian' in ['meat', 'veggie', 'margarita', 'cheese']", + value: { boolValue: false }, + }, + ast: '@in(\n "hawaiian"^#*expr.Constant_StringValue#,\n [\n "meat"^#*expr.Constant_StringValue#,\n "veggie"^#*expr.Constant_StringValue#,\n "margarita"^#*expr.Constant_StringValue#,\n "cheese"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '@in(\n "hawaiian"~string,\n [\n "meat"~string,\n "veggie"~string,\n "margarita"~string,\n "cheese"~string\n ]~list(string)\n)~bool^in_list', + type: "bool", + }, + ], + }, + { + name: "size", + tests: [ + { + original: { + name: "list_empty", + expr: "size([])", + value: { int64Value: "0" }, + }, + ast: "size(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: "size(\n []~list(dyn)\n)~int^size_list", + type: "int", + }, + { + original: { + name: "list", + expr: "size([1, 2, 3])", + value: { int64Value: "3" }, + }, + ast: "size(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "size(\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n)~int^size_list", + type: "int", + }, + { + original: { + name: "map_empty", + expr: "size({})", + value: { int64Value: "0" }, + }, + ast: "size(\n {}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: "size(\n {}~map(dyn, dyn)\n)~int^size_map", + type: "int", + }, + { + original: { + name: "map", + expr: "size({1: 'one', 2: 'two', 3: 'three'})", + value: { int64Value: "3" }, + }, + ast: 'size(\n {\n 1^#*expr.Constant_Int64Value#:"one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:"two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:"three"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'size(\n {\n 1~int:"one"~string,\n 2~int:"two"~string,\n 3~int:"three"~string\n }~map(int, string)\n)~int^size_map', + type: "int", + }, + ], + }, + ], + }, + { + name: "logic", + suites: [ + { + name: "conditional", + tests: [ + { + original: { + name: "true_case", + expr: "true ? 1 : 2", + value: { int64Value: "1" }, + }, + ast: "_?_:_(\n true^#*expr.Constant_BoolValue#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n true~bool,\n 1~int,\n 2~int\n)~int^conditional", + type: "int", + }, + { + original: { + name: "false_case", + expr: "false ? 'foo' : 'bar'", + value: { stringValue: "bar" }, + }, + ast: '_?_:_(\n false^#*expr.Constant_BoolValue#,\n "foo"^#*expr.Constant_StringValue#,\n "bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_?_:_(\n false~bool,\n "foo"~string,\n "bar"~string\n)~string^conditional', + type: "string", + }, + { + original: { + name: "error_case", + expr: "2 / 0 \u003e 4 ? 'baz' : 'quux'", + evalError: { errors: [{ message: "division by zero" }] }, + }, + ast: '_?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "baz"^#*expr.Constant_StringValue#,\n "quux"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 4~int\n )~bool^greater_int64,\n "baz"~string,\n "quux"~string\n)~string^conditional', + type: "string", + }, + { + original: { + name: "mixed_type", + expr: "true ? 'cows' : 17", + disableCheck: true, + value: { stringValue: "cows" }, + }, + ast: '_?_:_(\n true^#*expr.Constant_BoolValue#,\n "cows"^#*expr.Constant_StringValue#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:6: found no matching overload for '_?_:_' applied to '(bool, string, int)'\n | true ? 'cows' : 17\n | .....^", + }, + { + original: { + name: "bad_type", + expr: "'cows' ? false : 17", + disableCheck: true, + evalError: { errors: [{ message: "no matching overload" }] }, + }, + ast: '_?_:_(\n "cows"^#*expr.Constant_StringValue#,\n false^#*expr.Constant_BoolValue#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:8: found no matching overload for '_?_:_' applied to '(string, bool, int)'\n | 'cows' ? false : 17\n | .......^", + }, + ], + }, + { + name: "AND", + tests: [ + { + original: { + name: "all_true", + expr: "true \u0026\u0026 true", + value: { boolValue: true }, + }, + ast: "_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n true~bool,\n true~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "all_false", + expr: "false \u0026\u0026 false", + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n false~bool,\n false~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "false_left", + expr: "false \u0026\u0026 true", + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n false~bool,\n true~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "false_right", + expr: "true \u0026\u0026 false", + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n true~bool,\n false~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "short_circuit_type_left", + expr: "false \u0026\u0026 32", + disableCheck: true, + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n 32^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:10: expected type 'bool' but found 'int'\n | false \u0026\u0026 32\n | .........^", + }, + { + original: { + name: "short_circuit_type_right", + expr: "'horses' \u0026\u0026 false", + disableCheck: true, + value: { boolValue: false }, + }, + ast: '_\u0026\u0026_(\n "horses"^#*expr.Constant_StringValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'horses' \u0026\u0026 false\n | ^", + }, + { + original: { + name: "short_circuit_error_left", + expr: "false \u0026\u0026 (2 / 0 \u003e 3 ? false : true)", + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n false^#*expr.Constant_BoolValue#,\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n false~bool,\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "short_circuit_error_right", + expr: "(2 / 0 \u003e 3 ? false : true) \u0026\u0026 false", + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional,\n false~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "error_right", + expr: "true \u0026\u0026 1/0 != 0", + evalError: { errors: [{ message: "no matching overload" }] }, + }, + ast: "_\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n true~bool,\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "error_left", + expr: "1/0 != 0 \u0026\u0026 true", + evalError: { errors: [{ message: "no matching overload" }] }, + }, + ast: "_\u0026\u0026_(\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals,\n true~bool\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "no_overload", + expr: "'less filling' \u0026\u0026 'tastes great'", + disableCheck: true, + evalError: { errors: [{ message: "no matching overload" }] }, + }, + ast: '_\u0026\u0026_(\n "less filling"^#*expr.Constant_StringValue#,\n "tastes great"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'less filling' \u0026\u0026 'tastes great'\n | ^\nERROR: \u003cinput\u003e:1:19: expected type 'bool' but found 'string'\n | 'less filling' \u0026\u0026 'tastes great'\n | ..................^", + }, + ], + }, + { + name: "OR", + tests: [ + { + original: { + name: "all_true", + expr: "true || true", + value: { boolValue: true }, + }, + ast: "_||_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_||_(\n true~bool,\n true~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "all_false", + expr: "false || false", + value: { boolValue: false }, + }, + ast: "_||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n false~bool,\n false~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "false_left", + expr: "false || true", + value: { boolValue: true }, + }, + ast: "_||_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n false~bool,\n true~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "false_right", + expr: "true || false", + value: { boolValue: true }, + }, + ast: "_||_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n true~bool,\n false~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "short_circuit_type_left", + expr: "true || 32", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n true^#*expr.Constant_BoolValue#,\n 32^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:9: expected type 'bool' but found 'int'\n | true || 32\n | ........^", + }, + { + original: { + name: "short_circuit_type_right", + expr: "'horses' || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: '_||_(\n "horses"^#*expr.Constant_StringValue#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'horses' || true\n | ^", + }, + { + original: { + name: "short_circuit_error_left", + expr: "true || (2 / 0 \u003e 3 ? false : true)", + value: { boolValue: true }, + }, + ast: "_||_(\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n true~bool,\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "short_circuit_error_right", + expr: "(2 / 0 \u003e 3 ? false : true) || true", + value: { boolValue: true }, + }, + ast: "_||_(\n _?_:_(\n _\u003e_(\n _/_(\n 2^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n _?_:_(\n _\u003e_(\n _/_(\n 2~int,\n 0~int\n )~int^divide_int64,\n 3~int\n )~bool^greater_int64,\n false~bool,\n true~bool\n )~bool^conditional,\n true~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "error_right", + expr: "false || 1/0 != 0", + evalError: { errors: [{ message: "no matching overload" }] }, + }, + ast: "_||_(\n false^#*expr.Constant_BoolValue#,\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n false~bool,\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "error_left", + expr: "1/0 != 0 || false", + evalError: { errors: [{ message: "no matching overload" }] }, + }, + ast: "_||_(\n _!=_(\n _/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n _!=_(\n _/_(\n 1~int,\n 0~int\n )~int^divide_int64,\n 0~int\n )~bool^not_equals,\n false~bool\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "no_overload", + expr: "'less filling' || 'tastes great'", + disableCheck: true, + evalError: { errors: [{ message: "no matching overload" }] }, + }, + ast: '_||_(\n "less filling"^#*expr.Constant_StringValue#,\n "tastes great"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:1: expected type 'bool' but found 'string'\n | 'less filling' || 'tastes great'\n | ^\nERROR: \u003cinput\u003e:1:19: expected type 'bool' but found 'string'\n | 'less filling' || 'tastes great'\n | ..................^", + }, + ], + }, + { + name: "NOT", + tests: [ + { + original: { + name: "not_true", + expr: "!true", + value: { boolValue: false }, + }, + ast: "!_(\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "!_(\n true~bool\n)~bool^logical_not", + type: "bool", + }, + { + original: { + name: "not_false", + expr: "!false", + value: { boolValue: true }, + }, + ast: "!_(\n false^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "!_(\n false~bool\n)~bool^logical_not", + type: "bool", + }, + { + original: { + name: "no_overload", + expr: "!0", + disableCheck: true, + evalError: { errors: [{ message: "no matching overload" }] }, + }, + ast: "!_(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: found no matching overload for '!_' applied to '(int)'\n | !0\n | ^", + }, + ], + }, + ], + }, + { + name: "macros", + suites: [ + { + name: "exists", + tests: [ + { + original: { + name: "list_elem_all_true", + expr: "[1, 2, 3].exists(e, e \u003e 0)", + value: { boolValue: true }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_elem_some_true", + expr: "[1, 2, 3].exists(e, e == 2)", + value: { boolValue: true }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_elem_none_true", + expr: "[1, 2, 3].exists(e, e \u003e 3)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 3~int\n )~bool^greater_int64\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_elem_type_shortcircuit", + description: "Exists filter is true for the last element.", + expr: "[1, 'foo', 3].exists(e, e != '1')", + value: { boolValue: true }, + }, + ast: '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n e^#*expr.Expr_IdentExpr#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n "foo"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _!=_(\n e~dyn^e,\n "1"~string\n )~bool^not_equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool', + type: "bool", + }, + { + original: { + name: "list_elem_type_exhaustive", + description: + "Exists filter is never true, but heterogenous equality ensure the result is false.", + expr: "[1, 'foo', 3].exists(e, e == '10')", + value: { boolValue: false }, + }, + ast: '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n "10"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n "foo"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~dyn^e,\n "10"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool', + type: "bool", + }, + { + original: { + name: "list_elem_exists_error", + expr: "[1, 2, 3].exists(e, e / 0 == 17)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n _/_(\n e~int^e,\n 0~int\n )~int^divide_int64,\n 17~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_empty", + expr: "[].exists(e, e == 2)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "map_key", + expr: "{'key1':1, 'key2':2}.exists(k, k == 'key2')", + value: { boolValue: true }, + }, + ast: '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"~string:1~int,\n "key2"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~string^k,\n "key2"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool', + type: "bool", + }, + { + original: { + name: "not_map_key", + expr: "!{'key1':1, 'key2':2}.exists(k, k == 'key3')", + value: { boolValue: true }, + }, + ast: '!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key3"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"~string:1~int,\n "key2"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~string^k,\n "key3"~string\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n)~bool^logical_not', + type: "bool", + }, + { + original: { + name: "map_key_type_shortcircuit", + description: "Exists filter is true for the second key", + expr: "{'key':1, 1:21}.exists(k, k != 2)", + value: { boolValue: true }, + }, + ast: '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:21^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key"~string:1~int,\n 1~int:21~int\n }~map(dyn, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _!=_(\n k~dyn^k,\n 2~int\n )~bool^not_equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool', + type: "bool", + }, + { + original: { + name: "map_key_type_exhaustive", + description: + "Exists filter is never true, but heterogeneous equality ensures the result is false.", + expr: "!{'key':1, 1:42}.exists(k, k == 2)", + value: { boolValue: true }, + }, + ast: '!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n "key"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n false^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _||_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '!_(\n __comprehension__(\n // Variable\n k,\n // Target\n {\n "key"~string:1~int,\n 1~int:42~int\n }~map(dyn, int),\n // Accumulator\n @result,\n // Init\n false~bool,\n // LoopCondition\n @not_strictly_false(\n !_(\n @result~bool^@result\n )~bool^logical_not\n )~bool^not_strictly_false,\n // LoopStep\n _||_(\n @result~bool^@result,\n _==_(\n k~dyn^k,\n 2~int\n )~bool^equals\n )~bool^logical_or,\n // Result\n @result~bool^@result)~bool\n)~bool^logical_not', + type: "bool", + }, + ], + }, + { + name: "all", + tests: [ + { + original: { + name: "list_elem_all_true", + expr: "[1, 2, 3].all(e, e \u003e 0)", + value: { boolValue: true }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_elem_some_true", + expr: "[1, 2, 3].all(e, e == 2)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 2~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_elem_none_true", + expr: "[1, 2, 3].all(e, e == 17)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~int^e,\n 17~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_elem_type_shortcircuit", + expr: "[1, 'foo', 3].all(e, e == 1)", + value: { boolValue: false }, + }, + ast: '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n e^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n "foo"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n e~dyn^e,\n 1~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool', + type: "bool", + }, + { + original: { + name: "list_elem_type_exhaustive", + expr: "[1, 'foo', 3].all(e, e % 2 == 1)", + evalError: { errors: [{ message: "no_such_overload" }] }, + }, + ast: '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n e^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n "foo"~string,\n 3~int\n ]~list(dyn),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n _%_(\n e~dyn^e,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool', + type: "bool", + }, + { + original: { + name: "list_elem_error_shortcircuit", + expr: "[1, 2, 3].all(e, 6 / (2 - e) == 6)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n 6^#*expr.Constant_Int64Value#,\n _-_(\n 2^#*expr.Constant_Int64Value#,\n e^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n _/_(\n 6~int,\n _-_(\n 2~int,\n e~int^e\n )~int^subtract_int64\n )~int^divide_int64,\n 6~int\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_elem_error_exhaustive", + expr: "[1, 2, 3].all(e, e / 0 != 17)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _!=_(\n _/_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _!=_(\n _/_(\n e~int^e,\n 0~int\n )~int^divide_int64,\n 17~int\n )~bool^not_equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "list_empty", + expr: "[].all(e, e \u003e 0)", + value: { boolValue: true }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _\u003e_(\n e~int^e,\n 0~int\n )~bool^greater_int64\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool", + type: "bool", + }, + { + original: { + name: "map_key", + expr: "{'key1':1, 'key2':2}.all(k, k == 'key2')", + value: { boolValue: false }, + }, + ast: '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n k,\n // Target\n {\n "key1"~string:1~int,\n "key2"~string:2~int\n }~map(string, int),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n _==_(\n k~string^k,\n "key2"~string\n )~bool^equals\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool', + type: "bool", + }, + ], + }, + { + name: "exists_one", + tests: [ + { + original: { + name: "list_empty", + expr: "[].exists_one(a, a == 7)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n a,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n a,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", + type: "bool", + }, + { + original: { + name: "list_one_true", + expr: "[7].exists_one(a, a == 7)", + value: { boolValue: true }, + }, + ast: "__comprehension__(\n // Variable\n a,\n // Target\n [\n 7^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n a,\n // Target\n [\n 7~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", + type: "bool", + }, + { + original: { + name: "list_one_false", + expr: "[8].exists_one(a, a == 7)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n a,\n // Target\n [\n 8^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n a^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n a,\n // Target\n [\n 8~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n a~int^a,\n 7~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", + type: "bool", + }, + { + original: { + name: "list_none", + expr: "[1, 2, 3].exists_one(x, x \u003e 20)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n x,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n x^#*expr.Expr_IdentExpr#,\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n x,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n x~int^x,\n 20~int\n )~bool^greater_int64,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", + type: "bool", + }, + { + original: { + name: "list_one", + expr: "[6, 7, 8].exists_one(foo, foo % 5 == 2)", + value: { boolValue: true }, + }, + ast: "__comprehension__(\n // Variable\n foo,\n // Target\n [\n 6^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n foo,\n // Target\n [\n 6~int,\n 7~int,\n 8~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo~int^foo,\n 5~int\n )~int^modulo_int64,\n 2~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", + type: "bool", + }, + { + original: { + name: "list_many", + expr: "[0, 1, 2, 3, 4].exists_one(n, n % 2 == 1)", + value: { boolValue: false }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n~int^n,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", + type: "bool", + }, + { + original: { + name: "list_all", + expr: "['foal', 'foo', 'four'].exists_one(n, n.startsWith('fo'))", + value: { boolValue: false }, + }, + ast: '__comprehension__(\n // Variable\n n,\n // Target\n [\n "foal"^#*expr.Constant_StringValue#,\n "foo"^#*expr.Constant_StringValue#,\n "four"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n n^#*expr.Expr_IdentExpr#.startsWith(\n "fo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n n,\n // Target\n [\n "foal"~string,\n "foo"~string,\n "four"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n n~string^n.startsWith(\n "fo"~string\n )~bool^starts_with_string,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool', + type: "bool", + }, + { + original: { + name: "list_no_shortcircuit", + description: + "Errors invalidate everything, even if already false.", + expr: "[3, 2, 1, 0].exists_one(n, 12 / n \u003e 1)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int,\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12~int,\n n~int^n\n )~int^divide_int64,\n 1~int\n )~bool^greater_int64,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool", + type: "bool", + }, + { + original: { + name: "map_one", + expr: "{6: 'six', 7: 'seven', 8: 'eight'}.exists_one(foo, foo % 5 == 2)", + value: { boolValue: true }, + }, + ast: '__comprehension__(\n // Variable\n foo,\n // Target\n {\n 6^#*expr.Constant_Int64Value#:"six"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:"seven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:"eight"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n 0^#*expr.Constant_Int64Value#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n _==_(\n @result^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n foo,\n // Target\n {\n 6~int:"six"~string,\n 7~int:"seven"~string,\n 8~int:"eight"~string\n }~map(int, string),\n // Accumulator\n @result,\n // Init\n 0~int,\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n foo~int^foo,\n 5~int\n )~int^modulo_int64,\n 2~int\n )~bool^equals,\n _+_(\n @result~int^@result,\n 1~int\n )~int^add_int64,\n @result~int^@result\n )~int^conditional,\n // Result\n _==_(\n @result~int^@result,\n 1~int\n )~bool^equals)~bool', + type: "bool", + }, + ], + }, + { + name: "map", + tests: [ + { + original: { + name: "list_empty", + expr: "[].map(n, n / 2)", + value: { listValue: {} }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n n~int^n,\n 2~int\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_one", + expr: "[3].map(n, n * n)", + value: { listValue: { values: [{ int64Value: "9" }] } }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _*_(\n n^#*expr.Expr_IdentExpr#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _*_(\n n~int^n,\n n~int^n\n )~int^multiply_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_many", + expr: "[2, 4, 6].map(n, n / 2)", + value: { + listValue: { + values: [ + { int64Value: "1" }, + { int64Value: "2" }, + { int64Value: "3" }, + ], + }, + }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int,\n 4~int,\n 6~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n n~int^n,\n 2~int\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_error", + expr: "[2, 1, 0].map(n, 4 / n)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n _/_(\n 4^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n _/_(\n 4~int,\n n~int^n\n )~int^divide_int64\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "map_extract_keys", + expr: "{'John': 'smart'}.map(key, key) == ['John']", + value: { boolValue: true }, + }, + ast: '_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n "John"^#*expr.Constant_StringValue#:"smart"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n key^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n [\n "John"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n "John"~string:"smart"~string\n }~map(string, string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(string)^@result,\n [\n key~string^key\n ]~list(string)\n )~list(string)^add_list,\n // Result\n @result~list(string)^@result)~list(string),\n [\n "John"~string\n ]~list(string)\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "filter", + tests: [ + { + original: { + name: "list_empty", + expr: "[].filter(n, n % 2 == 0)", + value: { listValue: {} }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n []~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n n~int^n,\n 2~int\n )~int^modulo_int64,\n 0~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_one_true", + expr: "[2].filter(n, n == 2)", + value: { listValue: { values: [{ int64Value: "2" }] } }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n n^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 2~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n n~int^n,\n 2~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_one_false", + expr: "[1].filter(n, n \u003e 3)", + value: { listValue: {} }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n n^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 1~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n n~int^n,\n 3~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_none", + expr: "[1, 2, 3].filter(e, e \u003e 3)", + value: { listValue: {} }, + }, + ast: "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n e^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n e^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n e,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n e~int^e,\n 3~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n e~int^e\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_some", + expr: "[0, 1, 2, 3, 4].filter(x, x % 2 == 1)", + value: { + listValue: { + values: [{ int64Value: "1" }, { int64Value: "3" }], + }, + }, + }, + ast: "__comprehension__(\n // Variable\n x,\n // Target\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n x^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n x,\n // Target\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n _%_(\n x~int^x,\n 2~int\n )~int^modulo_int64,\n 1~int\n )~bool^equals,\n _+_(\n @result~list(int)^@result,\n [\n x~int^x\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_all", + expr: "[1, 2, 3].filter(n, n \u003e 0)", + value: { + listValue: { + values: [ + { int64Value: "1" }, + { int64Value: "2" }, + { int64Value: "3" }, + ], + }, + }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n n^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 1~int,\n 2~int,\n 3~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n n~int^n,\n 0~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "list_no_shortcircuit", + expr: "[3, 2, 1, 0].filter(n, 12 / n \u003e 4)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12^#*expr.Constant_Int64Value#,\n n^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n n^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n n,\n // Target\n [\n 3~int,\n 2~int,\n 1~int,\n 0~int\n ]~list(int),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _\u003e_(\n _/_(\n 12~int,\n n~int^n\n )~int^divide_int64,\n 4~int\n )~bool^greater_int64,\n _+_(\n @result~list(int)^@result,\n [\n n~int^n\n ]~list(int)\n )~list(int)^add_list,\n @result~list(int)^@result\n )~list(int)^conditional,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "map_filter_keys", + expr: "{'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}.filter(key, key == 'Ringo') == ['Ringo']", + value: { boolValue: true }, + }, + ast: '_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n "John"^#*expr.Constant_StringValue#:"smart"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "Paul"^#*expr.Constant_StringValue#:"cute"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "George"^#*expr.Constant_StringValue#:"quiet"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "Ringo"^#*expr.Constant_StringValue#:"funny"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n _==_(\n key^#*expr.Expr_IdentExpr#,\n "Ringo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n key^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n [\n "Ringo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n __comprehension__(\n // Variable\n key,\n // Target\n {\n "John"~string:"smart"~string,\n "Paul"~string:"cute"~string,\n "George"~string:"quiet"~string,\n "Ringo"~string:"funny"~string\n }~map(string, string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n _==_(\n key~string^key,\n "Ringo"~string\n )~bool^equals,\n _+_(\n @result~list(string)^@result,\n [\n key~string^key\n ]~list(string)\n )~list(string)^add_list,\n @result~list(string)^@result\n )~list(string)^conditional,\n // Result\n @result~list(string)^@result)~list(string),\n [\n "Ringo"~string\n ]~list(string)\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "nested", + tests: [ + { + original: { + name: "filter_all", + expr: "['signer'].filter(signer, ['artifact'].all(artifact, true))", + value: { listValue: { values: [{ stringValue: "signer" }] } }, + }, + ast: '__comprehension__(\n // Variable\n signer,\n // Target\n [\n "signer"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _?_:_(\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n "artifact"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n signer^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n signer,\n // Target\n [\n "signer"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n []~list(string),\n // LoopCondition\n true~bool,\n // LoopStep\n _?_:_(\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n "artifact"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n true~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool,\n _+_(\n @result~list(string)^@result,\n [\n signer~string^signer\n ]~list(string)\n )~list(string)^add_list,\n @result~list(string)^@result\n )~list(string)^conditional,\n // Result\n @result~list(string)^@result)~list(string)', + type: "list(string)", + }, + { + original: { + name: "all_all", + expr: "['signer'].all(signer, ['artifact'].all(artifact, true))", + value: { boolValue: true }, + }, + ast: '__comprehension__(\n // Variable\n signer,\n // Target\n [\n "signer"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n "artifact"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n true^#*expr.Constant_BoolValue#,\n // LoopCondition\n @not_strictly_false(\n @result^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n // LoopStep\n _\u0026\u0026_(\n @result^#*expr.Expr_IdentExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#', + checkedAst: + '__comprehension__(\n // Variable\n signer,\n // Target\n [\n "signer"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n __comprehension__(\n // Variable\n artifact,\n // Target\n [\n "artifact"~string\n ]~list(string),\n // Accumulator\n @result,\n // Init\n true~bool,\n // LoopCondition\n @not_strictly_false(\n @result~bool^@result\n )~bool^not_strictly_false,\n // LoopStep\n _\u0026\u0026_(\n @result~bool^@result,\n true~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool\n )~bool^logical_and,\n // Result\n @result~bool^@result)~bool', + type: "bool", + }, + ], + }, + ], + }, + { + name: "macros2", + suites: [ + { + name: "exists", + tests: [ + { + original: { + name: "list_elem_all_true", + expr: "[1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)", + value: { boolValue: true }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .......................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................................^", + }, + { + original: { + name: "list_elem_some_true", + expr: "[1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)", + value: { boolValue: true }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .......................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i == 1 \u0026\u0026 v == 2)\n | .................................^", + }, + { + original: { + name: "list_elem_none_true", + expr: "[1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)", + value: { boolValue: false }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | .......................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, i \u003e 2 \u0026\u0026 v \u003e 3)\n | ................................^", + }, + { + original: { + name: "list_elem_type_shortcircuit", + expr: "[1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')", + value: { boolValue: true }, + }, + ast: '[\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:21: undeclared reference to 'exists' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ....................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | ...........................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 1 \u0026\u0026 v != '1')\n | .....................................^", + }, + { + original: { + name: "list_elem_type_exhaustive", + expr: "[1, 'foo', 3].exists(i, v, i == 3 || v == '10')", + value: { boolValue: false }, + }, + ast: '[\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n "10"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:21: undeclared reference to 'exists' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ....................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | ...........................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].exists(i, v, i == 3 || v == '10')\n | .....................................^", + }, + { + original: { + name: "list_elem_exists_error", + expr: "[1, 2, 3].exists(i, v, v / i == 17)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'exists' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'i' (in container '')\n | [1, 2, 3].exists(i, v, v / i == 17)\n | ...........................^", + }, + { + original: { + name: "list_empty", + expr: "[].exists(i, v, i == 0 || v == 2)", + value: { boolValue: false }, + }, + ast: "[]^#*expr.Expr_ListExpr#.exists(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:10: undeclared reference to 'exists' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | .........^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'i' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ..........^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'v' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | .............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'i' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [].exists(i, v, i == 0 || v == 2)\n | ..........................^", + }, + { + original: { + name: "map_key", + expr: "{'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)", + value: { boolValue: true }, + }, + ast: '{\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:28: undeclared reference to 'exists' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ..................................^\nERROR: \u003cinput\u003e:1:50: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.exists(k, v, k == 'key2' \u0026\u0026 v == 2)\n | .................................................^", + }, + { + original: { + name: "not_map_key", + expr: "!{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)", + value: { boolValue: true }, + }, + ast: '!_(\n {\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key3"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:29: undeclared reference to 'exists' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ............................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'k' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | .............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ................................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'k' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ...................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'v' (in container '')\n | !{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)\n | ..................................................^", + }, + { + original: { + name: "map_key_type_shortcircuit", + expr: "{'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)", + value: { boolValue: true }, + }, + ast: '{\n "key"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:21^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:23: undeclared reference to 'exists' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | ......................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'k' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'k' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .............................^\nERROR: \u003cinput\u003e:1:40: undeclared reference to 'v' (in container '')\n | {'key':1, 1:21}.exists(k, v, k != 2 \u0026\u0026 v != 22)\n | .......................................^", + }, + { + original: { + name: "map_key_type_exhaustive", + expr: "!{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)", + value: { boolValue: true }, + }, + ast: '!_(\n {\n "key"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.exists(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 43^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'exists' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'k' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'k' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ..............................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'v' (in container '')\n | !{'key':1, 1:42}.exists(k, v, k == 2 \u0026\u0026 v == 43)\n | ........................................^", + }, + ], + }, + { + name: "all", + tests: [ + { + original: { + name: "list_elem_all_true", + expr: "[1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)", + value: { boolValue: true }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i \u003e -1 \u0026\u0026 v \u003e 0)\n | ..............................^", + }, + { + original: { + name: "list_elem_some_true", + expr: "[1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)", + value: { boolValue: false }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 1 \u0026\u0026 v == 2)\n | ..............................^", + }, + { + original: { + name: "list_elem_none_true", + expr: "[1, 2, 3].all(i, v, i == 3 || v == 4)", + value: { boolValue: false }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, i == 3 || v == 4)\n | ..............................^", + }, + { + original: { + name: "list_elem_type_shortcircuit", + expr: "[1, 'foo', 3].all(i, v, i == 0 || v == 1)", + value: { boolValue: false }, + }, + ast: '[\n 1^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ........................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [1, 'foo', 3].all(i, v, i == 0 || v == 1)\n | ..................................^", + }, + { + original: { + name: "list_elem_type_exhaustive", + expr: "[0, 'foo', 3].all(i, v, v % 2 == i)", + value: { boolValue: false }, + }, + ast: '[\n 0^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | ........................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [0, 'foo', 3].all(i, v, v % 2 == i)\n | .................................^", + }, + { + original: { + name: "list_elem_type_error_exhaustive", + expr: "[0, 'foo', 5].all(i, v, v % 3 == i)", + evalError: { errors: [{ message: "no_such_overload" }] }, + }, + ast: '[\n 0^#*expr.Constant_Int64Value#,\n "foo"^#*expr.Constant_StringValue#,\n 5^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'all' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | ........................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [0, 'foo', 5].all(i, v, v % 3 == i)\n | .................................^", + }, + { + original: { + name: "list_elem_error_shortcircuit", + expr: "[1, 2, 3].all(i, v, 6 / (2 - v) == i)", + value: { boolValue: false }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _/_(\n 6^#*expr.Constant_Int64Value#,\n _-_(\n 2^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | .............................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, 6 / (2 - v) == i)\n | ...................................^", + }, + { + original: { + name: "list_elem_error_exhaustive", + expr: "[1, 2, 3].all(i, v, v / i != 17)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _!=_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'all' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [1, 2, 3].all(i, v, v / i != 17)\n | ........................^", + }, + { + original: { + name: "list_empty", + expr: "[].all(i, v, i \u003e -1 || v \u003e 0)", + value: { boolValue: true }, + }, + ast: "[]^#*expr.Expr_ListExpr#.all(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:7: undeclared reference to 'all' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | ......^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'i' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .......^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'v' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | ..........^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'i' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .............^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [].all(i, v, i \u003e -1 || v \u003e 0)\n | .......................^", + }, + { + original: { + name: "map_key", + expr: "{'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)", + value: { boolValue: false }, + }, + ast: '{\n "key1"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.all(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "key2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:25: undeclared reference to 'all' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ........................^\nERROR: \u003cinput\u003e:1:26: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | .........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'k' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ...............................^\nERROR: \u003cinput\u003e:1:47: undeclared reference to 'v' (in container '')\n | {'key1':1, 'key2':2}.all(k, v, k == 'key2' \u0026\u0026 v == 2)\n | ..............................................^", + }, + ], + }, + { + name: "existsOne", + tests: [ + { + original: { + name: "list_empty", + expr: "[].existsOne(i, v, i == 3 || v == 7)", + value: { boolValue: false }, + }, + ast: "[]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:13: undeclared reference to 'existsOne' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ............^\nERROR: \u003cinput\u003e:1:14: undeclared reference to 'i' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'v' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'i' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | ...................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [].existsOne(i, v, i == 3 || v == 7)\n | .............................^", + }, + { + original: { + name: "list_one_true", + expr: "[7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)", + value: { boolValue: true }, + }, + ast: "[\n 7^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'existsOne' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [7].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............................^", + }, + { + original: { + name: "list_one_false", + expr: "[8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)", + value: { boolValue: false }, + }, + ast: "[\n 8^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:14: undeclared reference to 'existsOne' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .............^\nERROR: \u003cinput\u003e:1:15: undeclared reference to 'i' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'v' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ....................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [8].existsOne(i, v, i == 0 \u0026\u0026 v == 7)\n | ..............................^", + }, + { + original: { + name: "list_none", + expr: "[1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)", + value: { boolValue: false }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _||_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _\u003e_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:20: undeclared reference to 'existsOne' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ...................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'i' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ..........................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'v' (in container '')\n | [1, 2, 3].existsOne(i, v, i \u003e 2 || v \u003e 3)\n | ...................................^", + }, + { + original: { + name: "list_one", + expr: "[5, 7, 8].existsOne(i, v, v % 5 == i)", + value: { boolValue: true }, + }, + ast: "[\n 5^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:20: undeclared reference to 'existsOne' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ...................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'i' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'v' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ..........................^\nERROR: \u003cinput\u003e:1:36: undeclared reference to 'i' (in container '')\n | [5, 7, 8].existsOne(i, v, v % 5 == i)\n | ...................................^", + }, + { + original: { + name: "list_many", + expr: "[0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)", + value: { boolValue: false }, + }, + ast: "[\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _==_(\n _%_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:26: undeclared reference to 'existsOne' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .........................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'i' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'v' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | ................................^\nERROR: \u003cinput\u003e:1:42: undeclared reference to 'i' (in container '')\n | [0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)\n | .........................................^", + }, + { + original: { + name: "list_all", + expr: "['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))", + value: { boolValue: false }, + }, + ast: '[\n "foal"^#*expr.Constant_StringValue#,\n "foo"^#*expr.Constant_StringValue#,\n "four"^#*expr.Constant_StringValue#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#.startsWith(\n "fo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:34: undeclared reference to 'existsOne' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | .................................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ..................................^\nERROR: \u003cinput\u003e:1:38: undeclared reference to 'v' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | .....................................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'i' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ........................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'v' (in container '')\n | ['foal', 'foo', 'four'].existsOne(i, v, i \u003e -1 \u0026\u0026 v.startsWith('fo'))\n | ..................................................^", + }, + { + original: { + name: "list_no_shortcircuit", + expr: "[3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "[\n 3^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.existsOne(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:23: undeclared reference to 'existsOne' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | ......................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | ..........................^\nERROR: \u003cinput\u003e:1:30: undeclared reference to 'v' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .............................^\nERROR: \u003cinput\u003e:1:34: undeclared reference to 'i' (in container '')\n | [3, 2, 1, 0].existsOne(i, v, v / i \u003e 1)\n | .................................^", + }, + { + original: { + name: "map_one", + expr: "{6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')", + value: { boolValue: true }, + }, + ast: '{\n 6^#*expr.Constant_Int64Value#:"six"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:"seven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:"eight"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.existsOne(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n _%_(\n k^#*expr.Expr_IdentExpr#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n "seven"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:45: undeclared reference to 'existsOne' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ............................................^\nERROR: \u003cinput\u003e:1:46: undeclared reference to 'k' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | .............................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ................................................^\nERROR: \u003cinput\u003e:1:52: undeclared reference to 'k' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | ...................................................^\nERROR: \u003cinput\u003e:1:66: undeclared reference to 'v' (in container '')\n | {6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 \u0026\u0026 v == 'seven')\n | .................................................................^", + }, + ], + }, + { + name: "transformList", + tests: [ + { + original: { + name: "empty", + expr: "[].transformList(i, v, i / v)", + value: { listValue: {} }, + }, + ast: "[]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'transformList' (in container '')\n | [].transformList(i, v, i / v)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i / v)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i / v)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i / v)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i / v)\n | ...........................^", + }, + { + original: { + name: "empty_filter", + expr: "[].transformList(i, v, i \u003e v, i / v)", + value: { listValue: {} }, + }, + ast: "[]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n _/_(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:17: undeclared reference to 'transformList' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ................^\nERROR: \u003cinput\u003e:1:18: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | .................^\nERROR: \u003cinput\u003e:1:21: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ....................^\nERROR: \u003cinput\u003e:1:24: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | .......................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'i' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [].transformList(i, v, i \u003e v, i / v)\n | ..................................^", + }, + { + original: { + name: "one", + expr: "[3].transformList(i, v, v * v + i)", + value: { listValue: { values: [{ int64Value: "9" }] } }, + }, + ast: "[\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n _*_(\n v^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'transformList' (in container '')\n | [3].transformList(i, v, v * v + i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ............................^\nERROR: \u003cinput\u003e:1:33: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, v * v + i)\n | ................................^", + }, + { + original: { + name: "one_filter", + expr: "[3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)", + value: { listValue: { values: [{ int64Value: "9" }] } }, + }, + ast: "[\n 3^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n i^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _*_(\n v^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:18: undeclared reference to 'transformList' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | .................^\nERROR: \u003cinput\u003e:1:19: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................^\nERROR: \u003cinput\u003e:1:22: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | .....................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ........................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................................^\nERROR: \u003cinput\u003e:1:43: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..........................................^\nERROR: \u003cinput\u003e:1:47: undeclared reference to 'v' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..............................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'i' (in container '')\n | [3].transformList(i, v, i == 0 \u0026\u0026 v == 3, v * v + i)\n | ..................................................^", + }, + { + original: { + name: "many", + expr: "[2, 4, 6].transformList(i, v, v / 2 + i)", + value: { + listValue: { + values: [ + { int64Value: "1" }, + { int64Value: "3" }, + { int64Value: "5" }, + ], + }, + }, + }, + ast: "[\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ..............................^\nERROR: \u003cinput\u003e:1:39: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, v / 2 + i)\n | ......................................^", + }, + { + original: { + name: "many_filter", + expr: "[2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)", + value: { + listValue: { + values: [{ int64Value: "1" }, { int64Value: "5" }], + }, + }, + }, + ast: "[\n 2^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n i^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ..............................^\nERROR: \u003cinput\u003e:1:41: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ................................................^\nERROR: \u003cinput\u003e:1:57: undeclared reference to 'i' (in container '')\n | [2, 4, 6].transformList(i, v, i != 1 \u0026\u0026 v != 4, v / 2 + i)\n | ........................................................^", + }, + { + original: { + name: "error", + expr: "[2, 1, 0].transformList(i, v, v / i)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "[\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i)\n | ..................................^", + }, + { + original: { + name: "error_filter", + expr: "[2, 1, 0].transformList(i, v, v / i \u003e 0, v)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: "[\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#.transformList(\n i^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u003e_(\n _/_(\n v^#*expr.Expr_IdentExpr#,\n i^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: undeclared reference to 'transformList' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | .......................^\nERROR: \u003cinput\u003e:1:25: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ........................^\nERROR: \u003cinput\u003e:1:28: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ...........................^\nERROR: \u003cinput\u003e:1:31: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ..............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'i' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | ..................................^\nERROR: \u003cinput\u003e:1:42: undeclared reference to 'v' (in container '')\n | [2, 1, 0].transformList(i, v, v / i \u003e 0, v)\n | .........................................^", + }, + ], + }, + { + name: "transformMap", + tests: [ + { + original: { + name: "empty", + expr: "{}.transformMap(k, v, k + v)", + value: { mapValue: {} }, + }, + ast: "{}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:16: undeclared reference to 'transformMap' (in container '')\n | {}.transformMap(k, v, k + v)\n | ...............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k + v)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k + v)\n | ...................^\nERROR: \u003cinput\u003e:1:23: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k + v)\n | ......................^\nERROR: \u003cinput\u003e:1:27: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k + v)\n | ..........................^", + }, + { + original: { + name: "empty_filter", + expr: "{}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)", + value: { mapValue: {} }, + }, + ast: '{}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "foo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n "bar"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:16: undeclared reference to 'transformMap' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...............^\nERROR: \u003cinput\u003e:1:17: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................^\nERROR: \u003cinput\u003e:1:20: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...................^\nERROR: \u003cinput\u003e:1:23: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ......................^\nERROR: \u003cinput\u003e:1:37: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ....................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'k' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................^\nERROR: \u003cinput\u003e:1:53: undeclared reference to 'v' (in container '')\n | {}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ....................................................^", + }, + { + original: { + name: "one", + expr: "{'foo': 'bar'}.transformMap(k, v, k + v)", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "foo" }, + value: { stringValue: "foobar" }, + }, + ], + }, + }, + }, + ast: '{\n "foo"^#*expr.Constant_StringValue#:"bar"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:28: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ..................................^\nERROR: \u003cinput\u003e:1:39: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k + v)\n | ......................................^", + }, + { + original: { + name: "one_filter", + expr: "{'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "foo" }, + value: { stringValue: "foobar" }, + }, + ], + }, + }, + }, + ast: '{\n "foo"^#*expr.Constant_StringValue#:"bar"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "foo"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n v^#*expr.Expr_IdentExpr#,\n "bar"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:28: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...........................^\nERROR: \u003cinput\u003e:1:29: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ............................^\nERROR: \u003cinput\u003e:1:32: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ...............................^\nERROR: \u003cinput\u003e:1:35: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ..................................^\nERROR: \u003cinput\u003e:1:49: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:65: undeclared reference to 'v' (in container '')\n | {'foo': 'bar'}.transformMap(k, v, k == 'foo' \u0026\u0026 v == 'bar', k + v)\n | ................................................................^", + }, + { + original: { + name: "many", + expr: "{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "foo" }, + value: { stringValue: "foobar" }, + }, + { + key: { stringValue: "baz" }, + value: { stringValue: "bazbux" }, + }, + { + key: { stringValue: "hello" }, + value: { stringValue: "helloworld" }, + }, + ], + }, + }, + }, + ast: '{\n "foo"^#*expr.Constant_StringValue#:"bar"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "baz"^#*expr.Constant_StringValue#:"bux"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "hello"^#*expr.Constant_StringValue#:"world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:60: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ...........................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:64: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ...............................................................^\nERROR: \u003cinput\u003e:1:67: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ..................................................................^\nERROR: \u003cinput\u003e:1:71: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)\n | ......................................................................^", + }, + { + original: { + name: "many_filter", + expr: "{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "foo" }, + value: { stringValue: "foobar" }, + }, + { + key: { stringValue: "hello" }, + value: { stringValue: "helloworld" }, + }, + ], + }, + }, + }, + ast: '{\n "foo"^#*expr.Constant_StringValue#:"bar"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "baz"^#*expr.Constant_StringValue#:"bux"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "hello"^#*expr.Constant_StringValue#:"world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _!=_(\n k^#*expr.Expr_IdentExpr#,\n "baz"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _!=_(\n v^#*expr.Expr_IdentExpr#,\n "bux"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _+_(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:60: undeclared reference to 'transformMap' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ...........................................................^\nERROR: \u003cinput\u003e:1:61: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ............................................................^\nERROR: \u003cinput\u003e:1:64: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ...............................................................^\nERROR: \u003cinput\u003e:1:67: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ..................................................................^\nERROR: \u003cinput\u003e:1:81: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ................................................................................^\nERROR: \u003cinput\u003e:1:93: undeclared reference to 'k' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ............................................................................................^\nERROR: \u003cinput\u003e:1:97: undeclared reference to 'v' (in container '')\n | {'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' \u0026\u0026 v != 'bux', k + v)\n | ................................................................................................^", + }, + { + original: { + name: "error", + expr: "{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: '{\n "foo"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "bar"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "baz"^#*expr.Constant_StringValue#:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _/_(\n 4^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:44: undeclared reference to 'transformMap' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ...........................................^\nERROR: \u003cinput\u003e:1:45: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ............................................^\nERROR: \u003cinput\u003e:1:48: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ...............................................^\nERROR: \u003cinput\u003e:1:55: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)\n | ......................................................^", + }, + { + original: { + name: "error_filter", + expr: "{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)", + evalError: { errors: [{ message: "divide by zero" }] }, + }, + ast: '{\n "foo"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "bar"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "baz"^#*expr.Constant_StringValue#:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.transformMap(\n k^#*expr.Expr_IdentExpr#,\n v^#*expr.Expr_IdentExpr#,\n _\u0026\u0026_(\n _==_(\n k^#*expr.Expr_IdentExpr#,\n "baz"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n _/_(\n 4^#*expr.Constant_Int64Value#,\n v^#*expr.Expr_IdentExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n v^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:44: undeclared reference to 'transformMap' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ...........................................^\nERROR: \u003cinput\u003e:1:45: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ............................................^\nERROR: \u003cinput\u003e:1:48: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ...............................................^\nERROR: \u003cinput\u003e:1:51: undeclared reference to 'k' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ..................................................^\nERROR: \u003cinput\u003e:1:69: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ....................................................................^\nERROR: \u003cinput\u003e:1:77: undeclared reference to 'v' (in container '')\n | {'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' \u0026\u0026 4 / v == 0, v)\n | ............................................................................^", + }, + ], + }, + ], + }, + { + name: "math_ext", + suites: [ + { + name: "greatest_int_result", + tests: [ + { + original: { + name: "unary_negative", + expr: "math.greatest(-5)", + value: { int64Value: "-5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@max(\n -5~int\n)~int^math_@max_int", + type: "int", + }, + { + original: { + name: "unary_positive", + expr: "math.greatest(5)", + value: { int64Value: "5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@max(\n 5~int\n)~int^math_@max_int", + type: "int", + }, + { + original: { + name: "binary_same_args", + expr: "math.greatest(1, 1)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1~int,\n 1~int\n)~int^math_@max_int_int", + type: "int", + }, + { + original: { + name: "binary_with_decimal", + expr: "math.greatest(1, 1.0) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n 1~int,\n 1~double\n )~dyn^math_@max_int_double,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_with_uint", + expr: "math.greatest(1, 1u) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n 1~int,\n 1u~uint\n )~dyn^math_@max_int_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_first_arg_greater", + expr: "math.greatest(3, -3)", + value: { int64Value: "3" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 3^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 3~int,\n -3~int\n)~int^math_@max_int_int", + type: "int", + }, + { + original: { + name: "binary_second_arg_greater", + expr: "math.greatest(-7, 5)", + value: { int64Value: "5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -7^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n -7~int,\n 5~int\n)~int^math_@max_int_int", + type: "int", + }, + { + original: { + name: "binary_first_arg_int_max", + expr: "math.greatest(9223372036854775807, 1)", + value: { int64Value: "9223372036854775807" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 9223372036854775807~int,\n 1~int\n)~int^math_@max_int_int", + type: "int", + }, + { + original: { + name: "binary_second_arg_int_max", + expr: "math.greatest(1, 9223372036854775807)", + value: { int64Value: "9223372036854775807" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1~int,\n 9223372036854775807~int\n)~int^math_@max_int_int", + type: "int", + }, + { + original: { + name: "binary_first_arg_int_min", + expr: "math.greatest(-9223372036854775808, 1)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n -9223372036854775808~int,\n 1~int\n)~int^math_@max_int_int", + type: "int", + }, + { + original: { + name: "binary_second_arg_int_min", + expr: "math.greatest(1, -9223372036854775808)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1~int,\n -9223372036854775808~int\n)~int^math_@max_int_int", + type: "int", + }, + { + original: { + name: "ternary_same_args", + expr: "math.greatest(1, 1, 1) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1~int,\n 1~int,\n 1~int\n ]~list(int)\n )~int^math_@max_list_int,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_decimal", + expr: "math.greatest(1, 1.0, 1.0) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1~int,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_uint", + expr: "math.greatest(1, 1u, 1u) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1~int,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_first_arg_greatest", + expr: "math.greatest(10, 1, 3) == 10", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 10~int,\n 1~int,\n 3~int\n ]~list(int)\n )~int^math_@max_list_int,\n 10~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_third_arg_greatest", + expr: "math.greatest(1, 3, 10) == 10", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1~int,\n 3~int,\n 10~int\n ]~list(int)\n )~int^math_@max_list_int,\n 10~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_negatives", + expr: "math.greatest(-1, -2, -3) == -1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n -1~int,\n -2~int,\n -3~int\n ]~list(int)\n )~int^math_@max_list_int,\n -1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_int_max", + expr: "math.greatest(9223372036854775807, 1, 5) == 9223372036854775807", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 9223372036854775807~int,\n 1~int,\n 5~int\n ]~list(int)\n )~int^math_@max_list_int,\n 9223372036854775807~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_int_min", + expr: "math.greatest(-9223372036854775807, -1, -5) == -1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -9223372036854775807^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n -9223372036854775807~int,\n -1~int,\n -5~int\n ]~list(int)\n )~int^math_@max_list_int,\n -1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed", + expr: "math.greatest(5.4, 10, 3u, -5.0, 9223372036854775807) == 9223372036854775807", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 9223372036854775807~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 9223372036854775807~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_array", + expr: "math.greatest([5.4, 10, 3u, -5.0, 3.5]) == 10", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_dyn_array", + expr: "math.greatest([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10~int\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10~int\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "greatest_double_result", + tests: [ + { + original: { + name: "unary_negative", + expr: "math.greatest(-5.0)", + value: { doubleValue: -5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@max(\n -5~double\n)~double^math_@max_double", + type: "double", + }, + { + original: { + name: "unary_positive", + expr: "math.greatest(5.0)", + value: { doubleValue: 5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@max(\n 5~double\n)~double^math_@max_double", + type: "double", + }, + { + original: { + name: "binary_same_args", + expr: "math.greatest(1.0, 1.0)", + value: { doubleValue: 1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1~double,\n 1~double\n)~double^math_@max_double_double", + type: "double", + }, + { + original: { + name: "binary_with_int", + expr: "math.greatest(1.0, 1) == 1.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n 1~double,\n 1~int\n )~dyn^math_@max_double_int,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_with_uint", + expr: "math.greatest(1.0, 1u) == 1.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n 1~double,\n 1u~uint\n )~dyn^math_@max_double_uint,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_first_arg_greater", + expr: "math.greatest(5.0, -7.0)", + value: { doubleValue: 5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5^#*expr.Constant_DoubleValue#,\n -7^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 5~double,\n -7~double\n)~double^math_@max_double_double", + type: "double", + }, + { + original: { + name: "binary_second_arg_greater", + expr: "math.greatest(-3.0, 3.0)", + value: { doubleValue: 3 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -3^#*expr.Constant_DoubleValue#,\n 3^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n -3~double,\n 3~double\n)~double^math_@max_double_double", + type: "double", + }, + { + original: { + name: "binary_first_arg_double_max", + expr: "math.greatest(1.797693e308, 1)", + value: { doubleValue: 1.797693e308 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1.797693e+308~double,\n 1~int\n)~dyn^math_@max_double_int", + type: "dyn", + }, + { + original: { + name: "binary_second_arg_double_max", + expr: "math.greatest(1, 1.797693e308)", + value: { doubleValue: 1.797693e308 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_Int64Value#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1~int,\n 1.797693e+308~double\n)~dyn^math_@max_int_double", + type: "dyn", + }, + { + original: { + name: "binary_first_arg_double_min", + expr: "math.greatest(-1.797693e308, 1.5)", + value: { doubleValue: 1.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n -1.797693e+308~double,\n 1.5~double\n)~double^math_@max_double_double", + type: "double", + }, + { + original: { + name: "binary_second_arg_double_min", + expr: "math.greatest(1.5, -1.797693e308)", + value: { doubleValue: 1.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1.5^#*expr.Constant_DoubleValue#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1.5~double,\n -1.797693e+308~double\n)~double^math_@max_double_double", + type: "double", + }, + { + original: { + name: "ternary_same_args", + expr: "math.greatest(1.0, 1.0, 1.0) == 1.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1~double,\n 1~double,\n 1~double\n ]~list(double)\n )~double^math_@max_list_double,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_int", + expr: "math.greatest(1.0, 1, 1) == 1.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1~double,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_uint", + expr: "math.greatest(1.0, 1u, 1u) == 1.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1~double,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_first_arg_greatest", + expr: "math.greatest(10.5, 1.5, 3.5) == 10.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 10.5~double,\n 1.5~double,\n 3.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n 10.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_third_arg_greatest", + expr: "math.greatest(1.5, 3.5, 10.5) == 10.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1.5~double,\n 3.5~double,\n 10.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n 10.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_negatives", + expr: "math.greatest(-1.5, -2.5, -3.5) == -1.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1.5^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#,\n -3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n -1.5~double,\n -2.5~double,\n -3.5~double\n ]~list(double)\n )~double^math_@max_list_double,\n -1.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_double_max", + expr: "math.greatest(1.797693e308, 1, 5) == 1.797693e308", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1.797693e+308~double,\n 1~int,\n 5~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1.797693e+308~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_double_min", + expr: "math.greatest(-1.797693e308, -1, -5) == -1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n -1.797693e+308~double,\n -1~int,\n -5~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n -1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed", + expr: "math.greatest(5.4, 10, 3u, -5.0, 1.797693e308) == 1.797693e308", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 1.797693e+308~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1.797693e+308~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_array", + expr: "math.greatest([5.4, 10.5, 3u, -5.0, 3.5]) == 10.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 5.4~double,\n 10.5~double,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_dyn_array", + expr: "math.greatest([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10.5~double\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10.5~double\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "greatest_uint_result", + tests: [ + { + original: { + name: "unary", + expr: "math.greatest(5u)", + value: { uint64Value: "5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@max(\n 5u~uint\n)~uint^math_@max_uint", + type: "uint", + }, + { + original: { + name: "binary_same_args", + expr: "math.greatest(1u, 1u)", + value: { uint64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1u~uint,\n 1u~uint\n)~uint^math_@max_uint_uint", + type: "uint", + }, + { + original: { + name: "binary_with_decimal", + expr: "math.greatest(1u, 1.0) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n 1u~uint,\n 1~double\n )~dyn^math_@max_uint_double,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_with_int", + expr: "math.greatest(1u, 1) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n 1u~uint,\n 1~int\n )~dyn^math_@max_uint_int,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_first_arg_greater", + expr: "math.greatest(5u, -7)", + value: { uint64Value: "5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 5u^#*expr.Constant_Uint64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 5u~uint,\n -7~int\n)~dyn^math_@max_uint_int", + type: "dyn", + }, + { + original: { + name: "binary_second_arg_greater", + expr: "math.greatest(-3, 3u)", + value: { uint64Value: "3" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n -3^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n -3~int,\n 3u~uint\n)~dyn^math_@max_int_uint", + type: "dyn", + }, + { + original: { + name: "binary_first_arg_uint_max", + expr: "math.greatest(18446744073709551615u, 1u)", + value: { uint64Value: "18446744073709551615" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^math_@max_uint_uint", + type: "uint", + }, + { + original: { + name: "binary_second_arg_uint_max", + expr: "math.greatest(1u, 18446744073709551615u)", + value: { uint64Value: "18446744073709551615" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@max(\n 1u~uint,\n 18446744073709551615u~uint\n)~uint^math_@max_uint_uint", + type: "uint", + }, + { + original: { + name: "ternary_same_args", + expr: "math.greatest(1u, 1u, 1u) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1u~uint,\n 1u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_decimal", + expr: "math.greatest(1u, 1.0, 1.0) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1u~uint,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_int", + expr: "math.greatest(1u, 1, 1) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1u~uint,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_first_arg_greatest", + expr: "math.greatest(10u, 1u, 3u) == 10u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 10u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 10u~uint,\n 1u~uint,\n 3u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 10u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_third_arg_greatest", + expr: "math.greatest(1u, 3u, 10u) == 10u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 1u~uint,\n 3u~uint,\n 10u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 10u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_int_max", + expr: "math.greatest(18446744073709551615u, 1u, 5u) == 18446744073709551615u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 18446744073709551615u~uint,\n 1u~uint,\n 5u~uint\n ]~list(uint)\n )~uint^math_@max_list_uint,\n 18446744073709551615u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed", + expr: "math.greatest(5.4, 10, 3u, -5.0, 18446744073709551615u) == 18446744073709551615u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 18446744073709551615u~uint\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 18446744073709551615u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_array", + expr: "math.greatest([5.4, 10u, 3u, -5.0, 3.5]) == 10u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n 5.4~double,\n 10u~uint,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_dyn_array", + expr: "math.greatest([dyn(5.4), dyn(10u), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.greatest(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 10u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@max(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10u~uint\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@max_list_double|math_@max_list_int|math_@max_list_uint,\n 10u~uint\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "least_int_result", + tests: [ + { + original: { + name: "unary_negative", + expr: "math.least(-5)", + value: { int64Value: "-5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n -5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@min(\n -5~int\n)~int^math_@min_int", + type: "int", + }, + { + original: { + name: "unary_positive", + expr: "math.least(5)", + value: { int64Value: "5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@min(\n 5~int\n)~int^math_@min_int", + type: "int", + }, + { + original: { + name: "binary_same_args", + expr: "math.least(1, 1)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1~int,\n 1~int\n)~int^math_@min_int_int", + type: "int", + }, + { + original: { + name: "binary_with_decimal", + expr: "math.least(1, 1.0) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n 1~int,\n 1~double\n )~dyn^math_@min_int_double,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_with_uint", + expr: "math.least(1, 1u) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n 1~int,\n 1u~uint\n )~dyn^math_@min_int_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_first_arg_least", + expr: "math.least(-3, 3)", + value: { int64Value: "-3" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n -3^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n -3~int,\n 3~int\n)~int^math_@min_int_int", + type: "int", + }, + { + original: { + name: "binary_second_arg_least", + expr: "math.least(5, -7)", + value: { int64Value: "-7" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 5^#*expr.Constant_Int64Value#,\n -7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 5~int,\n -7~int\n)~int^math_@min_int_int", + type: "int", + }, + { + original: { + name: "binary_first_arg_int_max", + expr: "math.least(9223372036854775807, 1)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 9223372036854775807~int,\n 1~int\n)~int^math_@min_int_int", + type: "int", + }, + { + original: { + name: "binary_second_arg_int_max", + expr: "math.least(1, 9223372036854775807)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1~int,\n 9223372036854775807~int\n)~int^math_@min_int_int", + type: "int", + }, + { + original: { + name: "binary_first_arg_int_min", + expr: "math.least(-9223372036854775808, 1)", + value: { int64Value: "-9223372036854775808" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n -9223372036854775808~int,\n 1~int\n)~int^math_@min_int_int", + type: "int", + }, + { + original: { + name: "binary_second_arg_int_min", + expr: "math.least(1, -9223372036854775808)", + value: { int64Value: "-9223372036854775808" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1~int,\n -9223372036854775808~int\n)~int^math_@min_int_int", + type: "int", + }, + { + original: { + name: "ternary_same_args", + expr: "math.least(1, 1, 1) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1~int,\n 1~int,\n 1~int\n ]~list(int)\n )~int^math_@min_list_int,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_decimal", + expr: "math.least(1, 1.0, 1.0) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1~int,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_uint", + expr: "math.least(1, 1u, 1u) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1~int,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_first_arg_least", + expr: "math.least(0, 1, 3) == 0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 0~int,\n 1~int,\n 3~int\n ]~list(int)\n )~int^math_@min_list_int,\n 0~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_third_arg_least", + expr: "math.least(1, 3, 0) == 0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1~int,\n 3~int,\n 0~int\n ]~list(int)\n )~int^math_@min_list_int,\n 0~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_negatives", + expr: "math.least(-1, -2, -3) == -3", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#,\n -3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n -1~int,\n -2~int,\n -3~int\n ]~list(int)\n )~int^math_@min_list_int,\n -3~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_int_max", + expr: "math.least(9223372036854775807, 1, 5) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 9223372036854775807^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 9223372036854775807~int,\n 1~int,\n 5~int\n ]~list(int)\n )~int^math_@min_list_int,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_int_min", + expr: "math.least(-9223372036854775808, -1, -5) == -9223372036854775808", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -9223372036854775808^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n -9223372036854775808~int,\n -1~int,\n -5~int\n ]~list(int)\n )~int^math_@min_list_int,\n -9223372036854775808~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed", + expr: "math.least(5.4, 10, 3u, -5.0, 9223372036854775807) == -5.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 9223372036854775807^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 9223372036854775807~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_array", + expr: "math.least([5.4, 10, 3u, -5.0, 3.5]) == -5.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_dyn_array", + expr: "math.least([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10~int\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "least_double_result", + tests: [ + { + original: { + name: "unary_negative", + expr: "math.least(-5.5)", + value: { doubleValue: -5.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n -5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n -5.5~double\n)~double^math_@min_double", + type: "double", + }, + { + original: { + name: "unary_positive", + expr: "math.least(5.5)", + value: { doubleValue: 5.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 5.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@min(\n 5.5~double\n)~double^math_@min_double", + type: "double", + }, + { + original: { + name: "binary_same_args", + expr: "math.least(1.5, 1.5)", + value: { doubleValue: 1.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1.5~double,\n 1.5~double\n)~double^math_@min_double_double", + type: "double", + }, + { + original: { + name: "binary_with_int", + expr: "math.least(1.0, 1) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n 1~double,\n 1~int\n )~dyn^math_@min_double_int,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_with_uint", + expr: "math.least(1, 1u) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_Int64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n 1~int,\n 1u~uint\n )~dyn^math_@min_int_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_first_arg_least", + expr: "math.least(-3.5, 3.5)", + value: { doubleValue: -3.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n -3.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n -3.5~double,\n 3.5~double\n)~double^math_@min_double_double", + type: "double", + }, + { + original: { + name: "binary_second_arg_least", + expr: "math.least(5.5, -7.5)", + value: { doubleValue: -7.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 5.5^#*expr.Constant_DoubleValue#,\n -7.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 5.5~double,\n -7.5~double\n)~double^math_@min_double_double", + type: "double", + }, + { + original: { + name: "binary_first_arg_double_max", + expr: "math.least(1.797693e308, 1.5)", + value: { doubleValue: 1.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1.797693e+308~double,\n 1.5~double\n)~double^math_@min_double_double", + type: "double", + }, + { + original: { + name: "binary_second_arg_double_max", + expr: "math.least(1.5, 1.797693e308)", + value: { doubleValue: 1.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1.5~double,\n 1.797693e+308~double\n)~double^math_@min_double_double", + type: "double", + }, + { + original: { + name: "binary_first_arg_double_min", + expr: "math.least(-1.797693e308, 1.5)", + value: { doubleValue: -1.797693e308 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n -1.797693e+308~double,\n 1.5~double\n)~double^math_@min_double_double", + type: "double", + }, + { + original: { + name: "binary_second_arg_double_min", + expr: "math.least(1.5, -1.797693e308)", + value: { doubleValue: -1.797693e308 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1.5~double,\n -1.797693e+308~double\n)~double^math_@min_double_double", + type: "double", + }, + { + original: { + name: "ternary_same_args", + expr: "math.least(1.5, 1.5, 1.5) == 1.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1.5~double,\n 1.5~double,\n 1.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 1.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_int", + expr: "math.least(1.0, 1, 1) == 1.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1~double,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_uint", + expr: "math.least(1.0, 1u, 1u) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1^#*expr.Constant_DoubleValue#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1~double,\n 1u~uint,\n 1u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_first_arg_least", + expr: "math.least(0.5, 1.5, 3.5) == 0.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 0.5^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 0.5~double,\n 1.5~double,\n 3.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 0.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_third_arg_least", + expr: "math.least(1.5, 3.5, 0.5) == 0.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#,\n 0.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 0.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1.5~double,\n 3.5~double,\n 0.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n 0.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_negatives", + expr: "math.least(-1.5, -2.5, -3.5) == -3.5", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1.5^#*expr.Constant_DoubleValue#,\n -2.5^#*expr.Constant_DoubleValue#,\n -3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -3.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n -1.5~double,\n -2.5~double,\n -3.5~double\n ]~list(double)\n )~double^math_@min_list_double,\n -3.5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_double_max", + expr: "math.least(1.797693e308, 1, 5) == 1", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1.797693e+308^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1.797693e+308~double,\n 1~int,\n 5~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_double_min", + expr: "math.least(-1.797693e308, -1, -5) == -1.797693e308", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n -1.797693e+308^#*expr.Constant_DoubleValue#,\n -1^#*expr.Constant_Int64Value#,\n -5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1.797693e+308^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n -1.797693e+308~double,\n -1~int,\n -5~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -1.797693e+308~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed", + expr: "math.least(5.4, 10, 3u, -5.0, 1.797693e308) == -5.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 1.797693e+308^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n -5~double,\n 1.797693e+308~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_array", + expr: "math.least([5.4, 10.5, 3u, -5.0, 3.5]) == -5.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10.5^#*expr.Constant_DoubleValue#,\n 3u^#*expr.Constant_Uint64Value#,\n -5^#*expr.Constant_DoubleValue#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 5.4~double,\n 10.5~double,\n 3u~uint,\n -5~double,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_dyn_array", + expr: "math.least([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n -5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n -5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10.5~double\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n -5~double\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n -5~double\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "least_uint_result", + tests: [ + { + original: { + name: "unary", + expr: "math.least(5u)", + value: { uint64Value: "5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 5u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.@min(\n 5u~uint\n)~uint^math_@min_uint", + type: "uint", + }, + { + original: { + name: "binary_same_args", + expr: "math.least(1u, 1u)", + value: { uint64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1u~uint,\n 1u~uint\n)~uint^math_@min_uint_uint", + type: "uint", + }, + { + original: { + name: "binary_with_decimal", + expr: "math.least(1u, 1.0) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n 1u~uint,\n 1~double\n )~dyn^math_@min_uint_double,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_with_int", + expr: "math.least(1u, 1) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n 1u~uint,\n 1~int\n )~dyn^math_@min_uint_int,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "binary_first_arg_least", + expr: "math.least(1u, 3u)", + value: { uint64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1u~uint,\n 3u~uint\n)~uint^math_@min_uint_uint", + type: "uint", + }, + { + original: { + name: "binary_second_arg_least", + expr: "math.least(5u, 2u)", + value: { uint64Value: "2" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 5u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 5u~uint,\n 2u~uint\n)~uint^math_@min_uint_uint", + type: "uint", + }, + { + original: { + name: "binary_first_arg_uint_max", + expr: "math.least(18446744073709551615u, 1u)", + value: { uint64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 18446744073709551615u~uint,\n 1u~uint\n)~uint^math_@min_uint_uint", + type: "uint", + }, + { + original: { + name: "binary_second_arg_uint_max", + expr: "math.least(1u, 18446744073709551615u)", + value: { uint64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.@min(\n 1u~uint,\n 18446744073709551615u~uint\n)~uint^math_@min_uint_uint", + type: "uint", + }, + { + original: { + name: "ternary_same_args", + expr: "math.least(1u, 1u, 1u) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1u~uint,\n 1u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_decimal", + expr: "math.least(1u, 1.0, 1.0) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_DoubleValue#,\n 1^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1u~uint,\n 1~double,\n 1~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_with_int", + expr: "math.least(1u, 1, 1) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1u~uint,\n 1~int,\n 1~int\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_first_arg_least", + expr: "math.least(1u, 10u, 3u) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 1u^#*expr.Constant_Uint64Value#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 1u~uint,\n 10u~uint,\n 3u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_third_arg_least", + expr: "math.least(10u, 3u, 1u) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 10u~uint,\n 3u~uint,\n 1u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_uint_max", + expr: "math.least(18446744073709551615u, 1u, 5u) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 18446744073709551615u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 5u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 18446744073709551615u~uint,\n 1u~uint,\n 5u~uint\n ]~list(uint)\n )~uint^math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed", + expr: "math.least(5.4, 10, 3u, 1u, 18446744073709551615u) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n 5.4^#*expr.Constant_DoubleValue#,\n 10^#*expr.Constant_Int64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 18446744073709551615u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 5.4~double,\n 10~int,\n 3u~uint,\n 1u~uint,\n 18446744073709551615u~uint\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_array", + expr: "math.least([5.4, 10u, 3u, 1u, 3.5]) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n 5.4^#*expr.Constant_DoubleValue#,\n 10u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#,\n 1u^#*expr.Constant_Uint64Value#,\n 3.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n 5.4~double,\n 10u~uint,\n 3u~uint,\n 1u~uint,\n 3.5~double\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "quaternary_mixed_dyn_array", + expr: "math.least([dyn(5.4), dyn(10u), dyn(3u), dyn(1u), dyn(3.5)]) == 1u", + }, + ast: "_==_(\n math^#*expr.Expr_IdentExpr#.least(\n [\n dyn(\n 5.4^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 10u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 1u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n math.@min(\n [\n dyn(\n 5.4~double\n )~dyn^to_dyn,\n dyn(\n 10u~uint\n )~dyn^to_dyn,\n dyn(\n 3u~uint\n )~dyn^to_dyn,\n dyn(\n 1u~uint\n )~dyn^to_dyn,\n dyn(\n 3.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n )~dyn^math_@min_list_double|math_@min_list_int|math_@min_list_uint,\n 1u~uint\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "ceil", + tests: [ + { + original: { + name: "negative", + expr: "math.ceil(-1.2)", + value: { doubleValue: -1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.ceil(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.ceil(\n -1.2~double\n)~double^math_ceil_double", + type: "double", + }, + { + original: { + name: "positive", + expr: "math.ceil(1.2)", + value: { doubleValue: 2 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.ceil(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.ceil(\n 1.2~double\n)~double^math_ceil_double", + type: "double", + }, + { + original: { + name: "dyn_error", + expr: "math.ceil(dyn(1))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.ceil(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.ceil(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_ceil_double", + type: "double", + }, + ], + }, + { + name: "floor", + tests: [ + { + original: { + name: "negative", + expr: "math.floor(-1.2)", + value: { doubleValue: -2 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.floor(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.floor(\n -1.2~double\n)~double^math_floor_double", + type: "double", + }, + { + original: { + name: "positive", + expr: "math.floor(1.2)", + value: { doubleValue: 1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.floor(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.floor(\n 1.2~double\n)~double^math_floor_double", + type: "double", + }, + { + original: { + name: "dyn_error", + expr: "math.floor(dyn(1))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.floor(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.floor(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_floor_double", + type: "double", + }, + ], + }, + { + name: "round", + tests: [ + { + original: { + name: "negative_down", + expr: "math.round(-1.6)", + value: { doubleValue: -2 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.round(\n -1.6^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.round(\n -1.6~double\n)~double^math_round_double", + type: "double", + }, + { + original: { + name: "negative_up", + expr: "math.round(-1.4)", + value: { doubleValue: -1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.round(\n -1.4^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.round(\n -1.4~double\n)~double^math_round_double", + type: "double", + }, + { + original: { + name: "negative_mid", + expr: "math.round(-1.5)", + value: { doubleValue: -2 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.round(\n -1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.round(\n -1.5~double\n)~double^math_round_double", + type: "double", + }, + { + original: { + name: "positive_down", + expr: "math.round(1.2)", + value: { doubleValue: 1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.round(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.round(\n 1.2~double\n)~double^math_round_double", + type: "double", + }, + { + original: { + name: "positive_up", + expr: "math.round(1.5)", + value: { doubleValue: 2 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.round(\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.round(\n 1.5~double\n)~double^math_round_double", + type: "double", + }, + { + original: { + name: "nan", + expr: "math.isNaN(math.round(0.0/0.0))", + }, + ast: "math^#*expr.Expr_IdentExpr#.isNaN(\n math^#*expr.Expr_IdentExpr#.round(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.isNaN(\n math.round(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~double^math_round_double\n)~bool^math_isNaN_double", + type: "bool", + }, + { + original: { + name: "dyn_error", + expr: "math.round(dyn(1))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.round(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.round(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_round_double", + type: "double", + }, + ], + }, + { + name: "trunc", + tests: [ + { + original: { + name: "negative", + expr: "math.trunc(-1.2)", + value: { doubleValue: -1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.trunc(\n -1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.trunc(\n -1.2~double\n)~double^math_trunc_double", + type: "double", + }, + { + original: { + name: "positive", + expr: "math.trunc(1.2)", + value: { doubleValue: 1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.trunc(\n 1.2^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.trunc(\n 1.2~double\n)~double^math_trunc_double", + type: "double", + }, + { + original: { + name: "nan", + expr: "math.isNaN(math.trunc(0.0/0.0))", + }, + ast: "math^#*expr.Expr_IdentExpr#.isNaN(\n math^#*expr.Expr_IdentExpr#.trunc(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.isNaN(\n math.trunc(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~double^math_trunc_double\n)~bool^math_isNaN_double", + type: "bool", + }, + { + original: { + name: "dyn_error", + expr: "math.trunc(dyn(1))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.trunc(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.trunc(\n dyn(\n 1~int\n )~dyn^to_dyn\n)~double^math_trunc_double", + type: "double", + }, + ], + }, + { + name: "abs", + tests: [ + { + original: { + name: "uint", + expr: "math.abs(1u)", + value: { uint64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.abs(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.abs(\n 1u~uint\n)~uint^math_abs_uint", + type: "uint", + }, + { + original: { + name: "positive_int", + expr: "math.abs(1)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.abs(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.abs(\n 1~int\n)~int^math_abs_int", + type: "int", + }, + { + original: { + name: "negative_int", + expr: "math.abs(-11)", + value: { int64Value: "11" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.abs(\n -11^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.abs(\n -11~int\n)~int^math_abs_int", + type: "int", + }, + { + original: { + name: "positive_double", + expr: "math.abs(1.5)", + value: { doubleValue: 1.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.abs(\n 1.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.abs(\n 1.5~double\n)~double^math_abs_double", + type: "double", + }, + { + original: { + name: "negative_double", + expr: "math.abs(-11.5)", + value: { doubleValue: 11.5 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.abs(\n -11.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.abs(\n -11.5~double\n)~double^math_abs_double", + type: "double", + }, + { + original: { + name: "int_overflow", + expr: "math.abs(-9223372036854775808)", + evalError: { errors: [{ message: "overflow" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.abs(\n -9223372036854775808^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.abs(\n -9223372036854775808~int\n)~int^math_abs_int", + type: "int", + }, + ], + }, + { + name: "sign", + tests: [ + { + original: { + name: "positive_uint", + expr: "math.sign(100u)", + value: { uint64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n 100u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.sign(\n 100u~uint\n)~uint^math_sign_uint", + type: "uint", + }, + { + original: { + name: "zero_uint", + expr: "math.sign(0u)", + value: { uint64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.sign(\n 0u~uint\n)~uint^math_sign_uint", + type: "uint", + }, + { + original: { + name: "positive_int", + expr: "math.sign(100)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n 100^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.sign(\n 100~int\n)~int^math_sign_int", + type: "int", + }, + { + original: { + name: "negative_int", + expr: "math.sign(-11)", + value: { int64Value: "-1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n -11^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.sign(\n -11~int\n)~int^math_sign_int", + type: "int", + }, + { + original: { + name: "zero_int", + expr: "math.sign(0)", + value: { int64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.sign(\n 0~int\n)~int^math_sign_int", + type: "int", + }, + { + original: { + name: "positive_double", + expr: "math.sign(100.5)", + value: { doubleValue: 1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n 100.5^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.sign(\n 100.5~double\n)~double^math_sign_double", + type: "double", + }, + { + original: { + name: "negative_double", + expr: "math.sign(-32.0)", + value: { doubleValue: -1 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n -32^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.sign(\n -32~double\n)~double^math_sign_double", + type: "double", + }, + { + original: { + name: "zero_double", + expr: "math.sign(0.0)", + value: { doubleValue: 0 }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n 0^#*expr.Constant_DoubleValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.sign(\n 0~double\n)~double^math_sign_double", + type: "double", + }, + { + original: { + name: "dyn_error", + expr: "math.sign(dyn(true))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.sign(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.sign(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~dyn^math_sign_double|math_sign_int|math_sign_uint", + type: "dyn", + }, + ], + }, + { + name: "isNaN", + tests: [ + { + original: { name: "true", expr: "math.isNaN(0.0/0.0)" }, + ast: "math^#*expr.Expr_IdentExpr#.isNaN(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.isNaN(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n)~bool^math_isNaN_double", + type: "bool", + }, + { + original: { name: "false", expr: "!math.isNaN(1.0/0.0)" }, + ast: "!_(\n math^#*expr.Expr_IdentExpr#.isNaN(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "!_(\n math.isNaN(\n _/_(\n 1~double,\n 0~double\n )~double^divide_double\n )~bool^math_isNaN_double\n)~bool^logical_not", + type: "bool", + }, + { + original: { + name: "dyn_error", + expr: "math.isNaN(dyn(true))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.isNaN(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.isNaN(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isNaN_double", + type: "bool", + }, + ], + }, + { + name: "isInf", + tests: [ + { + original: { name: "true", expr: "math.isInf(1.0/0.0)" }, + ast: "math^#*expr.Expr_IdentExpr#.isInf(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.isInf(\n _/_(\n 1~double,\n 0~double\n )~double^divide_double\n)~bool^math_isInf_double", + type: "bool", + }, + { + original: { name: "false", expr: "!math.isInf(0.0/0.0)" }, + ast: "!_(\n math^#*expr.Expr_IdentExpr#.isInf(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "!_(\n math.isInf(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~bool^math_isInf_double\n)~bool^logical_not", + type: "bool", + }, + { + original: { + name: "dyn_error", + expr: "math.isInf(dyn(true))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.isInf(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.isInf(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isInf_double", + type: "bool", + }, + ], + }, + { + name: "isFinite", + tests: [ + { + original: { name: "true", expr: "math.isFinite(1.0/1.5)" }, + ast: "math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n 1^#*expr.Constant_DoubleValue#,\n 1.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.isFinite(\n _/_(\n 1~double,\n 1.5~double\n )~double^divide_double\n)~bool^math_isFinite_double", + type: "bool", + }, + { + original: { name: "false_nan", expr: "!math.isFinite(0.0/0.0)" }, + ast: "!_(\n math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n 0^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "!_(\n math.isFinite(\n _/_(\n 0~double,\n 0~double\n )~double^divide_double\n )~bool^math_isFinite_double\n)~bool^logical_not", + type: "bool", + }, + { + original: { name: "false_inf", expr: "!math.isFinite(-1.0/0.0)" }, + ast: "!_(\n math^#*expr.Expr_IdentExpr#.isFinite(\n _/_(\n -1^#*expr.Constant_DoubleValue#,\n 0^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "!_(\n math.isFinite(\n _/_(\n -1~double,\n 0~double\n )~double^divide_double\n )~bool^math_isFinite_double\n)~bool^logical_not", + type: "bool", + }, + { + original: { + name: "dyn_error", + expr: "math.isFinite(dyn(true))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.isFinite(\n dyn(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.isFinite(\n dyn(\n true~bool\n )~dyn^to_dyn\n)~bool^math_isFinite_double", + type: "bool", + }, + ], + }, + { + name: "bit_and", + tests: [ + { + original: { + name: "int_int_non_intersect", + expr: "math.bitAnd(1, 2)", + value: { int64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitAnd(\n 1~int,\n 2~int\n)~int^math_bitAnd_int_int", + type: "int", + }, + { + original: { + name: "int_int_intersect", + expr: "math.bitAnd(1, 3)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitAnd(\n 1~int,\n 3~int\n)~int^math_bitAnd_int_int", + type: "int", + }, + { + original: { + name: "int_int_intersect_neg", + expr: "math.bitAnd(1, -1)", + value: { int64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1^#*expr.Constant_Int64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitAnd(\n 1~int,\n -1~int\n)~int^math_bitAnd_int_int", + type: "int", + }, + { + original: { + name: "uint_uint_non_intersect", + expr: "math.bitAnd(1u, 2u)", + value: { uint64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1u^#*expr.Constant_Uint64Value#,\n 2u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitAnd(\n 1u~uint,\n 2u~uint\n)~uint^math_bitAnd_uint_uint", + type: "uint", + }, + { + original: { + name: "uint_uint_intersect", + expr: "math.bitAnd(1u, 3u)", + value: { uint64Value: "1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitAnd(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitAnd(\n 1u~uint,\n 3u~uint\n)~uint^math_bitAnd_uint_uint", + type: "uint", + }, + { + original: { + name: "int_dyn_error", + expr: "math.bitAnd(2u, dyn(''))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: 'math^#*expr.Expr_IdentExpr#.bitAnd(\n 2u^#*expr.Constant_Uint64Value#,\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'math.bitAnd(\n 2u~uint,\n dyn(\n ""~string\n )~dyn^to_dyn\n)~uint^math_bitAnd_uint_uint', + type: "uint", + }, + ], + }, + { + name: "bit_or", + tests: [ + { + original: { + name: "int_int_positive", + expr: "math.bitOr(1, 2)", + value: { int64Value: "3" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitOr(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitOr(\n 1~int,\n 2~int\n)~int^math_bitOr_int_int", + type: "int", + }, + { + original: { + name: "int_int_positive_negative", + expr: "math.bitOr(4, -2)", + value: { int64Value: "-2" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitOr(\n 4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitOr(\n 4~int,\n -2~int\n)~int^math_bitOr_int_int", + type: "int", + }, + { + original: { + name: "uint_uint", + expr: "math.bitOr(1u, 4u)", + value: { uint64Value: "5" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitOr(\n 1u^#*expr.Constant_Uint64Value#,\n 4u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitOr(\n 1u~uint,\n 4u~uint\n)~uint^math_bitOr_uint_uint", + type: "uint", + }, + { + original: { + name: "dyn_int_error", + expr: "math.bitOr(dyn(1.2), 1)", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitOr(\n dyn(\n 1.2^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitOr(\n dyn(\n 1.2~double\n )~dyn^to_dyn,\n 1~int\n)~int^math_bitOr_int_int", + type: "int", + }, + ], + }, + { + name: "bit_xor", + tests: [ + { + original: { + name: "int_int_positive", + expr: "math.bitXor(1, 3)", + value: { int64Value: "2" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitXor(\n 1^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitXor(\n 1~int,\n 3~int\n)~int^math_bitXor_int_int", + type: "int", + }, + { + original: { + name: "int_int_positive_negative", + expr: "math.bitXor(4, -2)", + value: { int64Value: "-6" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitXor(\n 4^#*expr.Constant_Int64Value#,\n -2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitXor(\n 4~int,\n -2~int\n)~int^math_bitXor_int_int", + type: "int", + }, + { + original: { + name: "uint_uint", + expr: "math.bitXor(1u, 3u)", + value: { uint64Value: "2" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitXor(\n 1u^#*expr.Constant_Uint64Value#,\n 3u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitXor(\n 1u~uint,\n 3u~uint\n)~uint^math_bitXor_uint_uint", + type: "uint", + }, + { + original: { + name: "dyn_dyn_error", + expr: "math.bitXor(dyn([]), dyn([1]))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitXor(\n dyn(\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n dyn(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitXor(\n dyn(\n []~list(dyn)\n )~dyn^to_dyn,\n dyn(\n [\n 1~int\n ]~list(int)\n )~dyn^to_dyn\n)~dyn^math_bitXor_int_int|math_bitXor_uint_uint", + type: "dyn", + }, + ], + }, + { + name: "bit_not", + tests: [ + { + original: { + name: "int_positive", + expr: "math.bitNot(1)", + value: { int64Value: "-2" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.bitNot(\n 1~int\n)~int^math_bitNot_int_int", + type: "int", + }, + { + original: { + name: "int_negative", + expr: "math.bitNot(-1)", + value: { int64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.bitNot(\n -1~int\n)~int^math_bitNot_int_int", + type: "int", + }, + { + original: { + name: "int_zero", + expr: "math.bitNot(0)", + value: { int64Value: "-1" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "math.bitNot(\n 0~int\n)~int^math_bitNot_int_int", + type: "int", + }, + { + original: { + name: "uint_positive", + expr: "math.bitNot(1u)", + value: { uint64Value: "18446744073709551614" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n 1u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitNot(\n 1u~uint\n)~uint^math_bitNot_uint_uint", + type: "uint", + }, + { + original: { + name: "uint_zero", + expr: "math.bitNot(0u)", + value: { uint64Value: "18446744073709551615" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitNot(\n 0u^#*expr.Constant_Uint64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitNot(\n 0u~uint\n)~uint^math_bitNot_uint_uint", + type: "uint", + }, + { + original: { + name: "dyn_error", + expr: "math.bitNot(dyn(''))", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: 'math^#*expr.Expr_IdentExpr#.bitNot(\n dyn(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'math.bitNot(\n dyn(\n ""~string\n )~dyn^to_dyn\n)~dyn^math_bitNot_int_int|math_bitNot_uint_uint', + type: "dyn", + }, + ], + }, + { + name: "bit_shift_left", + tests: [ + { + original: { + name: "int", + expr: "math.bitShiftLeft(1, 2)", + value: { int64Value: "4" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftLeft(\n 1~int,\n 2~int\n)~int^math_bitShiftLeft_int_int", + type: "int", + }, + { + original: { + name: "int_large_shift", + expr: "math.bitShiftLeft(1, 200)", + value: { int64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1^#*expr.Constant_Int64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftLeft(\n 1~int,\n 200~int\n)~int^math_bitShiftLeft_int_int", + type: "int", + }, + { + original: { + name: "int_negative_large_shift", + expr: "math.bitShiftLeft(-1, 200)", + value: { int64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n -1^#*expr.Constant_Int64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftLeft(\n -1~int,\n 200~int\n)~int^math_bitShiftLeft_int_int", + type: "int", + }, + { + original: { + name: "uint", + expr: "math.bitShiftLeft(1u, 2)", + value: { uint64Value: "4" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftLeft(\n 1u~uint,\n 2~int\n)~uint^math_bitShiftLeft_uint_int", + type: "uint", + }, + { + original: { + name: "uint_large_shift", + expr: "math.bitShiftLeft(1u, 200)", + value: { uint64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftLeft(\n 1u~uint,\n 200~int\n)~uint^math_bitShiftLeft_uint_int", + type: "uint", + }, + { + original: { + name: "bad_shift", + expr: "math.bitShiftLeft(1u, -1)", + evalError: { errors: [{ message: "negative offset" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n 1u^#*expr.Constant_Uint64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftLeft(\n 1u~uint,\n -1~int\n)~uint^math_bitShiftLeft_uint_int", + type: "uint", + }, + { + original: { + name: "dyn_int_error", + expr: "math.bitShiftLeft(dyn(4.3), 1)", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftLeft(\n dyn(\n 4.3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftLeft(\n dyn(\n 4.3~double\n )~dyn^to_dyn,\n 1~int\n)~dyn^math_bitShiftLeft_int_int|math_bitShiftLeft_uint_int", + type: "dyn", + }, + ], + }, + { + name: "bit_shift_right", + tests: [ + { + original: { + name: "int", + expr: "math.bitShiftRight(1024, 2)", + value: { int64Value: "256" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftRight(\n 1024~int,\n 2~int\n)~int^math_bitShiftRight_int_int", + type: "int", + }, + { + original: { + name: "int_large_shift", + expr: "math.bitShiftRight(1024, 64)", + value: { int64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024^#*expr.Constant_Int64Value#,\n 64^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftRight(\n 1024~int,\n 64~int\n)~int^math_bitShiftRight_int_int", + type: "int", + }, + { + original: { + name: "int_negative", + expr: "math.bitShiftRight(-1024, 3)", + value: { int64Value: "2305843009213693824" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n -1024^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftRight(\n -1024~int,\n 3~int\n)~int^math_bitShiftRight_int_int", + type: "int", + }, + { + original: { + name: "int_negative_large_shift", + expr: "math.bitShiftRight(-1024, 64)", + value: { int64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n -1024^#*expr.Constant_Int64Value#,\n 64^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftRight(\n -1024~int,\n 64~int\n)~int^math_bitShiftRight_int_int", + type: "int", + }, + { + original: { + name: "uint", + expr: "math.bitShiftRight(1024u, 2)", + value: { uint64Value: "256" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024u^#*expr.Constant_Uint64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftRight(\n 1024u~uint,\n 2~int\n)~uint^math_bitShiftRight_uint_int", + type: "uint", + }, + { + original: { + name: "uint_large_shift", + expr: "math.bitShiftRight(1024u, 200)", + value: { uint64Value: "0" }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1024u^#*expr.Constant_Uint64Value#,\n 200^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftRight(\n 1024u~uint,\n 200~int\n)~uint^math_bitShiftRight_uint_int", + type: "uint", + }, + { + original: { + name: "bad_shift", + expr: "math.bitShiftRight(1u, -1)", + evalError: { errors: [{ message: "negative offset" }] }, + }, + ast: "math^#*expr.Expr_IdentExpr#.bitShiftRight(\n 1u^#*expr.Constant_Uint64Value#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "math.bitShiftRight(\n 1u~uint,\n -1~int\n)~uint^math_bitShiftRight_uint_int", + type: "uint", + }, + { + original: { + name: "dyn_int_error", + expr: "math.bitShiftRight(dyn(b'123'), 1)", + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: 'math^#*expr.Expr_IdentExpr#.bitShiftRight(\n dyn(\n b"123"^#*expr.Constant_BytesValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'math.bitShiftRight(\n dyn(\n b"123"~bytes\n )~dyn^to_dyn,\n 1~int\n)~dyn^math_bitShiftRight_int_int|math_bitShiftRight_uint_int', + type: "dyn", + }, + ], + }, + ], + }, + { + name: "namespace", + suites: [ + { + name: "qualified", + tests: [ + { + original: { + name: "self_eval_qualified_lookup", + expr: "x.y", + typeEnv: [ + { name: "x.y", ident: { type: { primitive: "BOOL" } } }, + ], + bindings: { "x.y": { value: { boolValue: true } } }, + value: { boolValue: true }, + }, + ast: "x^#*expr.Expr_IdentExpr#.y^#*expr.Expr_SelectExpr#", + checkedAst: "x.y~bool^x.y", + type: "bool", + }, + ], + }, + { + name: "namespace", + tests: [ + { + original: { + name: "self_eval_container_lookup", + expr: "y", + typeEnv: [ + { name: "x.y", ident: { type: { primitive: "BOOL" } } }, + { name: "y", ident: { type: { primitive: "STRING" } } }, + ], + container: "x", + bindings: { + "x.y": { value: { boolValue: true } }, + y: { value: { stringValue: "false" } }, + }, + value: { boolValue: true }, + }, + ast: "y^#*expr.Expr_IdentExpr#", + checkedAst: "x.y~bool^x.y", + type: "bool", + }, + { + original: { + name: "self_eval_container_lookup_unchecked", + expr: "y", + disableCheck: true, + typeEnv: [ + { name: "x.y", ident: { type: { primitive: "BOOL" } } }, + { name: "y", ident: { type: { primitive: "BOOL" } } }, + ], + container: "x", + bindings: { + "x.y": { value: { boolValue: true } }, + y: { value: { boolValue: false } }, + }, + value: { boolValue: true }, + }, + ast: "y^#*expr.Expr_IdentExpr#", + checkedAst: "x.y~bool^x.y", + type: "bool", + }, + ], + }, + ], + }, + { + name: "optionals", + suites: [ + { + name: "optionals", + tests: [ + { + original: { + name: "null", + expr: "optional.of(null).hasValue()", + value: { boolValue: true }, + }, + ast: "optional^#*expr.Expr_IdentExpr#.of(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#", + checkedAst: + "optional.of(\n null~null\n)~optional_type(null)^optional_of.hasValue()~bool^optional_hasValue", + type: "bool", + }, + { + original: { + name: "null_non_zero_value", + expr: "optional.ofNonZeroValue(null).hasValue()", + value: { boolValue: false }, + }, + ast: "optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#", + checkedAst: + "optional.ofNonZeroValue(\n null~null\n)~optional_type(null)^optional_ofNonZeroValue.hasValue()~bool^optional_hasValue", + type: "bool", + }, + { + original: { + name: "none_or_none_or_value", + expr: "optional.none().or(optional.none()).orValue(42)", + value: { int64Value: "42" }, + }, + ast: "optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "optional.none()~optional_type(int)^optional_none.or(\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^optional_or_optional.orValue(\n 42~int\n)~int^optional_orValue_value", + type: "int", + }, + { + original: { + name: "none_optMap_hasValue", + expr: "optional.none().optMap(y, y + 1).hasValue()", + value: { boolValue: false }, + }, + ast: "optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#.optMap(\n y^#*expr.Expr_IdentExpr#,\n _+_(\n y^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n optional.none()~optional_type(dyn)^optional_none.hasValue()~bool^optional_hasValue,\n optional.of(\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n y,\n // Init\n optional.none()~optional_type(int)^optional_none.value()~int^optional_value,\n // LoopCondition\n false~bool,\n // LoopStep\n y~int^y,\n // Result\n _+_(\n y~int^y,\n 1~int\n )~int^add_int64)~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^conditional.hasValue()~bool^optional_hasValue", + type: "bool", + }, + { + original: { + name: "empty_map_optFlatMap_hasValue", + expr: "{}.?key.optFlatMap(k, k.?subkey).hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: empty_map_optFlatMap_hasValue:1:3: unsupported syntax '.?'\n | {}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ..^\nERROR: empty_map_optFlatMap_hasValue:1:24: unsupported syntax '.?'\n | {}.?key.optFlatMap(k, k.?subkey).hasValue()\n | .......................^", + }, + { + original: { + name: "map_empty_submap_optFlatMap_hasValue", + expr: "{'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: map_empty_submap_optFlatMap_hasValue:1:12: unsupported syntax '.?'\n | {'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ...........^\nERROR: map_empty_submap_optFlatMap_hasValue:1:33: unsupported syntax '.?'\n | {'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()\n | ................................^", + }, + { + original: { + name: "map_null_entry_hasValue", + expr: "{'null_key': dyn(null)}.?null_key.hasValue()", + value: { boolValue: true }, + }, + error: + "ERROR: map_null_entry_hasValue:1:24: unsupported syntax '.?'\n | {'null_key': dyn(null)}.?null_key.hasValue()\n | .......................^", + }, + { + original: { + name: "map_null_entry_no_such_key", + expr: "{'null_key': dyn(null)}.?null_key.invalid.hasValue()", + evalError: { errors: [{ message: "no such key" }] }, + }, + error: + "ERROR: map_null_entry_no_such_key:1:24: unsupported syntax '.?'\n | {'null_key': dyn(null)}.?null_key.invalid.hasValue()\n | .......................^", + }, + { + original: { + name: "map_absent_key_absent_field_none", + expr: "{true: dyn(0)}[?false].absent.hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: map_absent_key_absent_field_none:1:15: unsupported syntax '[?'\n | {true: dyn(0)}[?false].absent.hasValue()\n | ..............^", + }, + { + original: { + name: "map_present_key_invalid_field", + expr: "{true: dyn(0)}[?true].absent.hasValue()", + evalError: { errors: [{ message: "no such key" }] }, + }, + error: + "ERROR: map_present_key_invalid_field:1:15: unsupported syntax '[?'\n | {true: dyn(0)}[?true].absent.hasValue()\n | ..............^", + }, + { + original: { + name: "map_undefined_entry_hasValue", + expr: "{}.?null_key.invalid.hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: map_undefined_entry_hasValue:1:3: unsupported syntax '.?'\n | {}.?null_key.invalid.hasValue()\n | ..^", + }, + { + original: { + name: "map_submap_subkey_optFlatMap_value", + expr: "{'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()", + value: { stringValue: "subvalue" }, + }, + error: + "ERROR: map_submap_subkey_optFlatMap_value:1:32: unsupported syntax '.?'\n | {'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()\n | ...............................^\nERROR: map_submap_subkey_optFlatMap_value:1:53: unsupported syntax '.?'\n | {'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()\n | ....................................................^", + }, + { + original: { + name: "map_submap_optFlatMap_value", + expr: "{'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()", + value: { stringValue: "" }, + }, + error: + "ERROR: map_submap_optFlatMap_value:1:24: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()\n | .......................^\nERROR: map_submap_optFlatMap_value:1:45: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()\n | ............................................^", + }, + { + original: { + name: "map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue", + expr: "{'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue:1:24: unsupported syntax '.?'\n | {'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()\n | .......................^", + }, + { + original: { + name: "optional_of_optMap_value", + expr: "optional.of(42).optMap(y, y + 1).value()", + value: { int64Value: "43" }, + }, + ast: "optional^#*expr.Expr_IdentExpr#.of(\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.optMap(\n y^#*expr.Expr_IdentExpr#,\n _+_(\n y^#*expr.Expr_IdentExpr#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.value()^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n optional.of(\n 42~int\n )~optional_type(int)^optional_of.hasValue()~bool^optional_hasValue,\n optional.of(\n __comprehension__(\n // Variable\n #unused,\n // Target\n []~list(dyn),\n // Accumulator\n y,\n // Init\n optional.of(\n 42~int\n )~optional_type(int)^optional_of.value()~int^optional_value,\n // LoopCondition\n false~bool,\n // LoopStep\n y~int^y,\n // Result\n _+_(\n y~int^y,\n 1~int\n )~int^add_int64)~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~optional_type(int)^conditional.value()~int^optional_value", + type: "int", + }, + { + original: { + name: "optional_ofNonZeroValue_or_optional_value", + expr: "optional.ofNonZeroValue(42).or(optional.of(20)).value() == 42", + value: { boolValue: true }, + }, + ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n 42^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.of(\n 20^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#.value()^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n optional.ofNonZeroValue(\n 42~int\n )~optional_type(int)^optional_ofNonZeroValue.or(\n optional.of(\n 20~int\n )~optional_type(int)^optional_of\n )~optional_type(int)^optional_or_optional.value()~int^optional_value,\n 42~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "ternary_optional_hasValue", + expr: "(has({}.x) ? optional.of({}.x) : optional.none()).hasValue()", + value: { boolValue: false }, + }, + ast: "_?_:_(\n {}^#*expr.Expr_StructExpr#.x~test-only~^#*expr.Expr_SelectExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n {}^#*expr.Expr_StructExpr#.x^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.hasValue()^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n {}~map(dyn, dyn).x~test-only~~bool,\n optional.of(\n {}~map(dyn, dyn).x~dyn\n )~optional_type(dyn)^optional_of,\n optional.none()~optional_type(dyn)^optional_none\n)~optional_type(dyn)^conditional.hasValue()~bool^optional_hasValue", + type: "bool", + }, + { + original: { + name: "map_optindex_hasValue", + expr: "{}.?x.hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: map_optindex_hasValue:1:3: unsupported syntax '.?'\n | {}.?x.hasValue()\n | ..^", + }, + { + original: { + name: "has_map_optindex", + expr: "has({}.?x.y)", + value: { boolValue: false }, + }, + error: + "ERROR: has_map_optindex:1:7: unsupported syntax '.?'\n | has({}.?x.y)\n | ......^", + }, + { + original: { + name: "has_map_optindex_field", + expr: "has({'x': {'y': 'z'}}.?x.y)", + value: { boolValue: true }, + }, + error: + "ERROR: has_map_optindex_field:1:22: unsupported syntax '.?'\n | has({'x': {'y': 'z'}}.?x.y)\n | .....................^", + }, + { + original: { + name: "type", + expr: "type(optional.none()) == optional_type", + value: { boolValue: true }, + }, + ast: "_==_(\n type(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional_type^#*expr.Expr_IdentExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n type(\n optional.none()~optional_type(dyn)^optional_none\n )~type(optional_type(dyn))^type,\n optional_type~type(optional_type)^optional_type\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "optional_chaining_1", + expr: "optional.ofNonZeroValue('').or(optional.of({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])).orValue('default value')", + value: { stringValue: "goodbye" }, + }, + ast: 'optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.or(\n optional^#*expr.Expr_IdentExpr#.of(\n _[_](\n {\n "c"^#*expr.Constant_StringValue#:{\n "dashed-index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.c^#*expr.Expr_SelectExpr#,\n "dashed-index"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'optional.ofNonZeroValue(\n ""~string\n)~optional_type(string)^optional_ofNonZeroValue.or(\n optional.of(\n _[_](\n {\n "c"~string:{\n "dashed-index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string)).c~map(string, string),\n "dashed-index"~string\n )~string^index_map\n )~optional_type(string)^optional_of\n)~optional_type(string)^optional_or_optional.orValue(\n "default value"~string\n)~string^optional_orValue_value', + type: "string", + }, + { + original: { + name: "optional_chaining_2", + expr: "{'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')", + value: { stringValue: "goodbye" }, + }, + error: + "ERROR: optional_chaining_2:1:37: unsupported syntax '[?'\n | {'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')\n | ....................................^", + }, + { + original: { + name: "optional_chaining_3", + expr: "{'c': {}}.c[?'missing-index'].orValue('default value')", + value: { stringValue: "default value" }, + }, + error: + "ERROR: optional_chaining_3:1:12: unsupported syntax '[?'\n | {'c': {}}.c[?'missing-index'].orValue('default value')\n | ...........^", + }, + { + original: { + name: "optional_chaining_4", + expr: "optional.of({'c': {'index': 'goodbye'}}).c.index.orValue('default value')", + value: { stringValue: "goodbye" }, + }, + ast: 'optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{\n "index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.index^#*expr.Expr_SelectExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'optional.of(\n {\n "c"~string:{\n "index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string))\n)~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)).index~optional_type(string).orValue(\n "default value"~string\n)~string^optional_orValue_value', + type: "string", + }, + { + original: { + name: "optional_chaining_5", + expr: "optional.of({'c': {}}).c.missing.or(optional.none()[0]).orValue('default value')", + value: { stringValue: "default value" }, + }, + ast: 'optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing^#*expr.Expr_SelectExpr#.or(\n _[_](\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'optional.of(\n {\n "c"~string:{}~map(dyn, string)\n }~map(string, map(dyn, string))\n)~optional_type(map(string, map(dyn, string)))^optional_of.c~optional_type(map(dyn, string)).missing~optional_type(string).or(\n _[_](\n optional.none()~optional_type(list(string))^optional_none,\n 0~int\n )~optional_type(string)^optional_list_index_int\n)~optional_type(string)^optional_or_optional.orValue(\n "default value"~string\n)~string^optional_orValue_value', + type: "string", + }, + { + original: { + name: "optional_chaining_6", + expr: "optional.of({'c': {}}).c.missing.or(optional.of(['list-value'])[0]).orValue('default value')", + value: { stringValue: "list-value" }, + }, + ast: 'optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing^#*expr.Expr_SelectExpr#.or(\n _[_](\n optional^#*expr.Expr_IdentExpr#.of(\n [\n "list-value"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'optional.of(\n {\n "c"~string:{}~map(dyn, string)\n }~map(string, map(dyn, string))\n)~optional_type(map(string, map(dyn, string)))^optional_of.c~optional_type(map(dyn, string)).missing~optional_type(string).or(\n _[_](\n optional.of(\n [\n "list-value"~string\n ]~list(string)\n )~optional_type(list(string))^optional_of,\n 0~int\n )~optional_type(string)^optional_list_index_int\n)~optional_type(string)^optional_or_optional.orValue(\n "default value"~string\n)~string^optional_orValue_value', + type: "string", + }, + { + original: { + name: "optional_chaining_7", + expr: "optional.of({'c': {'index': 'goodbye'}}).c['index'].orValue('default value')", + value: { stringValue: "goodbye" }, + }, + ast: '_[_](\n optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{\n "index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#,\n "index"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n optional.of(\n {\n "c"~string:{\n "index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)),\n "index"~string\n)~optional_type(string)^optional_map_index_value.orValue(\n "default value"~string\n)~string^optional_orValue_value', + type: "string", + }, + { + original: { + name: "optional_chaining_8", + expr: "optional.of({'c': {}}).c['missing'].orValue('default value')", + value: { stringValue: "default value" }, + }, + ast: '_[_](\n optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#,\n "missing"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.orValue(\n "default value"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n optional.of(\n {\n "c"~string:{}~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)),\n "missing"~string\n)~optional_type(string)^optional_map_index_value.orValue(\n "default value"~string\n)~string^optional_orValue_value', + type: "string", + }, + { + original: { + name: "optional_chaining_9", + expr: "has(optional.of({'c': {'entry': 'hello world'}}).c) \u0026\u0026 !has(optional.of({'c': {'entry': 'hello world'}}).c.missing)", + value: { boolValue: true }, + }, + ast: '_\u0026\u0026_(\n optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{\n "entry"^#*expr.Constant_StringValue#:"hello world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c~test-only~^#*expr.Expr_SelectExpr#,\n !_(\n optional^#*expr.Expr_IdentExpr#.of(\n {\n "c"^#*expr.Constant_StringValue#:{\n "entry"^#*expr.Constant_StringValue#:"hello world"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#.c^#*expr.Expr_SelectExpr#.missing~test-only~^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u0026\u0026_(\n optional.of(\n {\n "c"~string:{\n "entry"~string:"hello world"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~test-only~~bool,\n !_(\n optional.of(\n {\n "c"~string:{\n "entry"~string:"hello world"~string\n }~map(string, string)\n }~map(string, map(string, string))\n )~optional_type(map(string, map(string, string)))^optional_of.c~optional_type(map(string, string)).missing~test-only~~bool\n )~bool^logical_not\n)~bool^logical_and', + type: "bool", + }, + { + original: { + name: "optional_chaining_10", + expr: "optional.ofNonZeroValue({'c': {'dashed-index': 'goodbye'}}.a.z).orValue({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])", + evalError: { errors: [{ message: "no such key" }] }, + }, + ast: 'optional^#*expr.Expr_IdentExpr#.ofNonZeroValue(\n {\n "c"^#*expr.Constant_StringValue#:{\n "dashed-index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.a^#*expr.Expr_SelectExpr#.z^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#.orValue(\n _[_](\n {\n "c"^#*expr.Constant_StringValue#:{\n "dashed-index"^#*expr.Constant_StringValue#:"goodbye"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.c^#*expr.Expr_SelectExpr#,\n "dashed-index"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'optional.ofNonZeroValue(\n {\n "c"~string:{\n "dashed-index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string)).a~map(string, string).z~string\n)~optional_type(string)^optional_ofNonZeroValue.orValue(\n _[_](\n {\n "c"~string:{\n "dashed-index"~string:"goodbye"~string\n }~map(string, string)\n }~map(string, map(string, string)).c~map(string, string),\n "dashed-index"~string\n )~string^index_map\n)~string^optional_orValue_value', + type: "string", + }, + { + original: { + name: "optional_chaining_11", + expr: "{'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()", + value: { int64Value: "7" }, + }, + error: + "ERROR: optional_chaining_11:1:35: unsupported syntax '.?'\n | {'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()\n | ..................................^\nERROR: optional_chaining_11:1:84: unsupported syntax '.?'\n | {'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()\n | ...................................................................................^", + }, + { + original: { + name: "optional_chaining_12", + expr: "{?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "nested_map" }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "map" }, + value: { + mapValue: { + entries: [ + { + key: { stringValue: "dashed-index" }, + value: { stringValue: "goodbye" }, + }, + ], + }, + }, + }, + ], + }, + }, + }, + ], + }, + }, + }, + error: + "ERROR: optional_chaining_12:1:2: unsupported syntax '?'\n | {?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}\n | .^", + }, + { + original: { + name: "optional_chaining_13", + expr: "{?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "singleton" }, + value: { boolValue: true }, + }, + ], + }, + }, + }, + error: + "ERROR: optional_chaining_13:1:2: unsupported syntax '?'\n | {?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}\n | .^", + }, + { + original: { + name: "optional_chaining_14", + expr: "[?{}.?c, ?optional.of(42), ?optional.none()]", + value: { listValue: { values: [{ int64Value: "42" }] } }, + }, + error: + "ERROR: optional_chaining_14:1:2: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | .^\nERROR: optional_chaining_14:1:5: unsupported syntax '.?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | ....^\nERROR: optional_chaining_14:1:10: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | .........^\nERROR: optional_chaining_14:1:28: unsupported syntax '?'\n | [?{}.?c, ?optional.of(42), ?optional.none()]\n | ...........................^", + }, + { + original: { + name: "optional_chaining_15", + expr: "[?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]", + value: { listValue: {} }, + }, + error: + "ERROR: optional_chaining_15:1:2: unsupported syntax '?'\n | [?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]\n | .^\nERROR: optional_chaining_15:1:36: unsupported syntax '.?'\n | [?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]\n | ...................................^", + }, + { + original: { + name: "optional_chaining_16", + expr: "optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: optional_chaining_16:1:26: unsupported syntax '?'\n | optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()\n | .........................^", + }, + { + original: { + name: "has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field", + expr: "has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + error: + "ERROR: has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field:1:18: unsupported syntax '?'\n | has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)\n | .................^", + }, + { + original: { + name: "optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field", + expr: "optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + error: + "ERROR: optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field:1:38: unsupported syntax '?'\n | optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()\n | .....................................^", + }, + { + original: { + name: "struct_map_optindex_field", + expr: "TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string", + container: "cel.expr.conformance.proto2", + value: { mapValue: {} }, + }, + error: + "ERROR: struct_map_optindex_field:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string\n | .............^", + }, + { + original: { + name: "struct_optional_ofNonZeroValue_map_optindex_field", + expr: "TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string", + container: "cel.expr.conformance.proto2", + value: { mapValue: {} }, + }, + error: + "ERROR: struct_optional_ofNonZeroValue_map_optindex_field:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string\n | .............^", + }, + { + original: { + name: "struct_map_optindex_field_nested", + expr: "TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string", + container: "cel.expr.conformance.proto2", + value: { + mapValue: { + entries: [ + { + key: { stringValue: "hello" }, + value: { stringValue: "world" }, + }, + ], + }, + }, + }, + error: + "ERROR: struct_map_optindex_field_nested:1:14: unsupported syntax '?'\n | TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string\n | .............^", + }, + { + original: { + name: "struct_list_optindex_field", + expr: "TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string", + container: "cel.expr.conformance.proto2", + value: { + listValue: { + values: [ + { stringValue: "greetings" }, + { stringValue: "world" }, + ], + }, + }, + }, + error: + "ERROR: struct_list_optindex_field:1:45: unsupported syntax '?'\n | TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string\n | ............................................^\nERROR: struct_list_optindex_field:1:83: unsupported syntax '.?'\n | TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string\n | ..................................................................................^", + }, + { + original: { + name: "optional_empty_map_optindex_hasValue", + expr: "optional.of({}).?c.hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: optional_empty_map_optindex_hasValue:1:16: unsupported syntax '.?'\n | optional.of({}).?c.hasValue()\n | ...............^", + }, + { + original: { + name: "empty_struct_optindex_hasValue", + expr: "TestAllTypes{}.?repeated_string.hasValue()", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + error: + "ERROR: empty_struct_optindex_hasValue:1:15: unsupported syntax '.?'\n | TestAllTypes{}.?repeated_string.hasValue()\n | ..............^", + }, + { + original: { + name: "optional_empty_struct_optindex_hasValue", + expr: "optional.of(TestAllTypes{}).?repeated_string.hasValue()", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + error: + "ERROR: optional_empty_struct_optindex_hasValue:1:28: unsupported syntax '.?'\n | optional.of(TestAllTypes{}).?repeated_string.hasValue()\n | ...........................^", + }, + { + original: { + name: "optional_none_optselect_hasValue", + expr: "optional.none().?repeated_string.hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: optional_none_optselect_hasValue:1:16: unsupported syntax '.?'\n | optional.none().?repeated_string.hasValue()\n | ...............^", + }, + { + original: { + name: "struct_optindex_value", + expr: "TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()", + container: "cel.expr.conformance.proto2", + value: { listValue: { values: [{ stringValue: "foo" }] } }, + }, + error: + "ERROR: struct_optindex_value:1:39: unsupported syntax '.?'\n | TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()\n | ......................................^", + }, + { + original: { + name: "optional_struct_optindex_value", + expr: "optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()", + container: "cel.expr.conformance.proto2", + value: { listValue: { values: [{ stringValue: "foo" }] } }, + }, + error: + "ERROR: optional_struct_optindex_value:1:52: unsupported syntax '.?'\n | optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()\n | ...................................................^", + }, + { + original: { + name: "optional_struct_optindex_index_value", + expr: "optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()", + container: "cel.expr.conformance.proto2", + value: { stringValue: "foo" }, + }, + error: + "ERROR: optional_struct_optindex_index_value:1:52: unsupported syntax '.?'\n | optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()\n | ...................................................^", + }, + { + original: { + name: "empty_list_optindex_hasValue", + expr: "[][?0].hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: empty_list_optindex_hasValue:1:3: unsupported syntax '[?'\n | [][?0].hasValue()\n | ..^", + }, + { + original: { + name: "optional_empty_list_optindex_hasValue", + expr: "optional.of([])[?0].hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: optional_empty_list_optindex_hasValue:1:16: unsupported syntax '[?'\n | optional.of([])[?0].hasValue()\n | ...............^", + }, + { + original: { + name: "optional_none_optindex_hasValue", + expr: "optional.none()[?0].hasValue()", + value: { boolValue: false }, + }, + error: + "ERROR: optional_none_optindex_hasValue:1:16: unsupported syntax '[?'\n | optional.none()[?0].hasValue()\n | ...............^", + }, + { + original: { + name: "list_optindex_value", + expr: "['foo'][?0].value()", + value: { stringValue: "foo" }, + }, + error: + "ERROR: list_optindex_value:1:8: unsupported syntax '[?'\n | ['foo'][?0].value()\n | .......^", + }, + { + original: { + name: "optional_list_optindex_value", + expr: "optional.of(['foo'])[?0].value()", + value: { stringValue: "foo" }, + }, + error: + "ERROR: optional_list_optindex_value:1:21: unsupported syntax '[?'\n | optional.of(['foo'])[?0].value()\n | ....................^", + }, + { + original: { + name: "map_key_mixed_type_optindex_value", + expr: "{true: 1, 2: 2, 5u: 3}[?true].value()", + value: { int64Value: "1" }, + }, + error: + "ERROR: map_key_mixed_type_optindex_value:1:23: unsupported syntax '[?'\n | {true: 1, 2: 2, 5u: 3}[?true].value()\n | ......................^", + }, + { + original: { + name: "map_key_mixed_numbers_double_key_optindex_value", + expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()", + value: { doubleValue: 3 }, + }, + error: + "ERROR: map_key_mixed_numbers_double_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()\n | ..........................^", + }, + { + original: { + name: "map_key_mixed_numbers_uint_key_optindex_value", + expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()", + value: { doubleValue: 2 }, + }, + error: + "ERROR: map_key_mixed_numbers_uint_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()\n | ..........................^", + }, + { + original: { + name: "map_key_mixed_numbers_int_key_optindex_value", + expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()", + value: { doubleValue: 1 }, + }, + error: + "ERROR: map_key_mixed_numbers_int_key_optindex_value:1:27: unsupported syntax '[?'\n | {1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()\n | ..........................^", + }, + { + original: { + name: "optional_eq_none_none", + expr: "optional.none() == optional.none()", + value: { boolValue: true }, + }, + ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n optional.none()~optional_type(dyn)^optional_none,\n optional.none()~optional_type(dyn)^optional_none\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "optional_eq_none_int", + expr: "optional.none() == optional.of(1)", + value: { boolValue: false }, + }, + ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "optional_eq_int_none", + expr: "optional.of(1) == optional.none()", + value: { boolValue: false }, + }, + ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "optional_eq_int_int", + expr: "optional.of(1) == optional.of(1)", + value: { boolValue: true }, + }, + ast: "_==_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "optional_ne_none_none", + expr: "optional.none() != optional.none()", + value: { boolValue: false }, + }, + ast: "_!=_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n optional.none()~optional_type(dyn)^optional_none,\n optional.none()~optional_type(dyn)^optional_none\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "optional_ne_none_int", + expr: "optional.none() != optional.of(1)", + value: { boolValue: true }, + }, + ast: "_!=_(\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "optional_ne_int_none", + expr: "optional.of(1) != optional.none()", + value: { boolValue: true }, + }, + ast: "_!=_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "optional_ne_int_int", + expr: "optional.of(1) != optional.of(1)", + value: { boolValue: false }, + }, + ast: "_!=_(\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_!=_(\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~bool^not_equals", + type: "bool", + }, + { + original: { + name: "map_optional_has", + expr: "has({'foo': optional.none()}.foo)", + value: { boolValue: true }, + }, + ast: '{\n "foo"^#*expr.Constant_StringValue#:optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.foo~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "foo"~string:optional.none()~optional_type(dyn)^optional_none\n}~map(string, optional_type(dyn)).foo~test-only~~bool', + type: "bool", + }, + { + original: { + name: "map_optional_select_has", + expr: "has({'foo': optional.none()}.foo.bar)", + value: { boolValue: false }, + }, + ast: '{\n "foo"^#*expr.Constant_StringValue#:optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.foo^#*expr.Expr_SelectExpr#.bar~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "foo"~string:optional.none()~optional_type(dyn)^optional_none\n}~map(string, optional_type(dyn)).foo~optional_type(dyn).bar~test-only~~bool', + type: "bool", + }, + { + original: { + name: "map_optional_entry_has", + expr: "has({?'foo': optional.none()}.foo)", + value: { boolValue: false }, + }, + error: + "ERROR: map_optional_entry_has:1:6: unsupported syntax '?'\n | has({?'foo': optional.none()}.foo)\n | .....^", + }, + ], + }, + ], + }, + { + name: "parse", + suites: [ + { + name: "nest", + tests: [ + { + original: { + name: "list_index", + description: + "Member = Member '[' Expr ']'. Nested indices are supported up to 12 times.", + expr: "a[a[a[a[a[a[a[a[a[a[a[a[0]]]]]]]]]]]]", + typeEnv: [ + { + name: "a", + ident: { + type: { listType: { elemType: { primitive: "INT64" } } }, + }, + }, + ], + bindings: { + a: { + value: { listValue: { values: [{ int64Value: "0" }] } }, + }, + }, + value: { int64Value: "0" }, + }, + ast: "_[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n _[_](\n a^#*expr.Expr_IdentExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n _[_](\n a~list(int)^a,\n 0~int\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n )~int^index_list\n)~int^index_list", + type: "int", + }, + { + original: { + name: "message_literal", + description: + "Member = Member '{' [FieldInits] '}'. Nested messages supported up to 12 levels deep.", + expr: "NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{payload: TestAllTypes{single_int64: 137}}}}}}}}}}}}.payload.single_int64", + container: "cel.expr.conformance.proto3", + value: { int64Value: "0" }, + }, + ast: "NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n child:NestedTestAllTypes{\n payload:TestAllTypes{\n single_int64:137^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.payload^#*expr.Expr_SelectExpr#.single_int64^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n child:cel.expr.conformance.proto3.NestedTestAllTypes{\n payload:cel.expr.conformance.proto3.TestAllTypes{\n single_int64:137~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n }~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes\n}~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes.payload~cel.expr.conformance.proto3.TestAllTypes.single_int64~int", + type: "int", + }, + { + original: { + name: "funcall", + description: + "Primary = ['.'] IDENT ['(' [ExprList] ')']. Nested function calls supported up to 12 levels deep.", + expr: "int(uint(int(uint(int(uint(int(uint(int(uint(int(uint(7))))))))))))", + value: { int64Value: "7" }, + }, + ast: "int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n int(\n uint(\n 7~int\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n )~int^uint64_to_int64\n )~uint^int64_to_uint64\n)~int^uint64_to_int64", + type: "int", + }, + { + original: { + name: "list_literal", + description: + "Primary = '[' [ExprList] ']'. Nested list literals up to 12 levels deep.", + expr: "size([[[[[[[[[[[[0]]]]]]]]]]]])", + value: { int64Value: "1" }, + }, + ast: "size(\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n 0^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "size(\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n 0~int\n ]~list(int)\n ]~list(list(int))\n ]~list(list(list(int)))\n ]~list(list(list(list(int))))\n ]~list(list(list(list(list(int)))))\n ]~list(list(list(list(list(list(int))))))\n ]~list(list(list(list(list(list(list(int)))))))\n ]~list(list(list(list(list(list(list(list(int))))))))\n ]~list(list(list(list(list(list(list(list(list(int)))))))))\n ]~list(list(list(list(list(list(list(list(list(list(int))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(int)))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(list(int))))))))))))\n)~int^size_list", + type: "int", + }, + { + original: { + name: "map_literal", + description: + "Primary = '{' [MapInits] '}'. Nested map literals up to 12 levels deep.", + expr: "size({0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: 'foo'}}}}}}}}}}}})", + value: { int64Value: "1" }, + }, + ast: 'size(\n {\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:{\n 0^#*expr.Constant_Int64Value#:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'size(\n {\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:{\n 0~int:"foo"~string\n }~map(int, string)\n }~map(int, map(int, string))\n }~map(int, map(int, map(int, string)))\n }~map(int, map(int, map(int, map(int, string))))\n }~map(int, map(int, map(int, map(int, map(int, string)))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, string))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string)))))))))))\n }~map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, map(int, string))))))))))))\n)~int^size_map', + type: "int", + }, + { + original: { + name: "parens", + description: "Primary = '(' Expr ')'", + expr: "((((((((((((((((((((((((((((((((7))))))))))))))))))))))))))))))))", + value: { int64Value: "7" }, + }, + error: + "ERROR: parens:-1:0: expression recursion limit exceeded: 32", + }, + ], + }, + { + name: "repeat", + tests: [ + { + original: { + name: "conditional", + description: + "Expr = ConditionalOr ['?' ConditionalOr ':' Expr]. Chained ternary operators up to 24 levels.", + expr: "true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : false", + value: { boolValue: true }, + }, + ast: "_?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n _?_:_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n _?_:_(\n true~bool,\n true~bool,\n false~bool\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n )~bool^conditional\n)~bool^conditional", + type: "bool", + }, + { + original: { + name: "or", + description: + "ConditionalOr = [ConditionalOr '||'] ConditionalAnd. Logical OR statements with 32 conditions.", + expr: "false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || true", + value: { boolValue: true }, + }, + ast: "_||_(\n _||_(\n _||_(\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _||_(\n _||_(\n false^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _||_(\n false^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_||_(\n _||_(\n _||_(\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or\n )~bool^logical_or,\n _||_(\n _||_(\n false~bool,\n false~bool\n )~bool^logical_or,\n _||_(\n false~bool,\n true~bool\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n )~bool^logical_or\n)~bool^logical_or", + type: "bool", + }, + { + original: { + name: "and", + description: + "ConditionalAnd = [ConditionalAnd '\u0026\u0026'] Relation. Logical AND statements with 32 conditions.", + expr: "true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 true \u0026\u0026 false", + value: { boolValue: false }, + }, + ast: "_\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n _\u0026\u0026_(\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and\n )~bool^logical_and,\n _\u0026\u0026_(\n _\u0026\u0026_(\n true~bool,\n true~bool\n )~bool^logical_and,\n _\u0026\u0026_(\n true~bool,\n false~bool\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n )~bool^logical_and\n)~bool^logical_and", + type: "bool", + }, + { + original: { + name: "add_sub", + description: + "Addition = [Addition ('+' | '-')] Multiplication. Addition operators are supported up to 24 times consecutively.", + expr: "3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3", + value: { int64Value: "3" }, + }, + ast: "_+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n 3^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n _+_(\n _-_(\n 3~int,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n )~int^add_int64,\n 3~int\n )~int^subtract_int64,\n 3~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "mul_div", + description: + "Multiplication = [Multiplication ('*' | '/' | '%')] Unary. Multiplication operators are supported up to 24 times consecutively.", + expr: "4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4", + value: { int64Value: "4" }, + }, + ast: "_/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n 4^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n _/_(\n _*_(\n 4~int,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n )~int^divide_int64,\n 4~int\n )~int^multiply_int64,\n 4~int\n)~int^divide_int64", + type: "int", + }, + { + original: { + name: "not", + description: "Unary = '!' {'!'} Member", + expr: "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!true", + value: { boolValue: true }, + }, + ast: "true^#*expr.Constant_BoolValue#", + checkedAst: "true~bool", + type: "bool", + }, + { + original: { + name: "unary_neg", + description: "Unary = '-' {'-'} Member", + expr: "--------------------------------19", + value: { int64Value: "19" }, + }, + ast: "19^#*expr.Constant_Int64Value#", + checkedAst: "19~int", + type: "int", + }, + { + original: { + name: "select", + description: + "Member = Member '.' IDENT ['(' [ExprList] ')']. Selection is supported up to 12 times consecutively.", + expr: "NestedTestAllTypes{}.child.child.child.child.child.child.child.child.child.child.payload.single_int32", + container: "cel.expr.conformance.proto3", + value: { int64Value: "0" }, + }, + ast: "NestedTestAllTypes{}^#*expr.Expr_StructExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.child^#*expr.Expr_SelectExpr#.payload^#*expr.Expr_SelectExpr#.single_int32^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.NestedTestAllTypes{}~cel.expr.conformance.proto3.NestedTestAllTypes^cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.child~cel.expr.conformance.proto3.NestedTestAllTypes.payload~cel.expr.conformance.proto3.TestAllTypes.single_int32~int", + type: "int", + }, + { + original: { + name: "index", + description: + "Member = Member '[' Expr ']'. Indexing is supported up to 12 times consecutively.", + expr: "[[[[[[[[[[[['foo']]]]]]]]]]]][0][0][0][0][0][0][0][0][0][0][0][0]", + value: { stringValue: "foo" }, + }, + ast: '_[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n "foo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n _[_](\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n [\n "foo"~string\n ]~list(string)\n ]~list(list(string))\n ]~list(list(list(string)))\n ]~list(list(list(list(string))))\n ]~list(list(list(list(list(string)))))\n ]~list(list(list(list(list(list(string))))))\n ]~list(list(list(list(list(list(list(string)))))))\n ]~list(list(list(list(list(list(list(list(string))))))))\n ]~list(list(list(list(list(list(list(list(list(string)))))))))\n ]~list(list(list(list(list(list(list(list(list(list(string))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(string)))))))))))\n ]~list(list(list(list(list(list(list(list(list(list(list(list(string)))))))))))),\n 0~int\n )~list(list(list(list(list(list(list(list(list(list(list(string)))))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(list(list(string))))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(list(string)))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(list(string))))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(list(string)))))))^index_list,\n 0~int\n )~list(list(list(list(list(list(string))))))^index_list,\n 0~int\n )~list(list(list(list(list(string)))))^index_list,\n 0~int\n )~list(list(list(list(string))))^index_list,\n 0~int\n )~list(list(list(string)))^index_list,\n 0~int\n )~list(list(string))^index_list,\n 0~int\n )~list(string)^index_list,\n 0~int\n)~string^index_list', + type: "string", + }, + { + original: { + name: "list_literal", + description: + "Primary = '[' [ExprList] ']'. List literals with up to 32 elements.", + expr: "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31][17]", + value: { int64Value: "17" }, + }, + ast: "_[_](\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 9^#*expr.Constant_Int64Value#,\n 10^#*expr.Constant_Int64Value#,\n 11^#*expr.Constant_Int64Value#,\n 12^#*expr.Constant_Int64Value#,\n 13^#*expr.Constant_Int64Value#,\n 14^#*expr.Constant_Int64Value#,\n 15^#*expr.Constant_Int64Value#,\n 16^#*expr.Constant_Int64Value#,\n 17^#*expr.Constant_Int64Value#,\n 18^#*expr.Constant_Int64Value#,\n 19^#*expr.Constant_Int64Value#,\n 20^#*expr.Constant_Int64Value#,\n 21^#*expr.Constant_Int64Value#,\n 22^#*expr.Constant_Int64Value#,\n 23^#*expr.Constant_Int64Value#,\n 24^#*expr.Constant_Int64Value#,\n 25^#*expr.Constant_Int64Value#,\n 26^#*expr.Constant_Int64Value#,\n 27^#*expr.Constant_Int64Value#,\n 28^#*expr.Constant_Int64Value#,\n 29^#*expr.Constant_Int64Value#,\n 30^#*expr.Constant_Int64Value#,\n 31^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n 0~int,\n 1~int,\n 2~int,\n 3~int,\n 4~int,\n 5~int,\n 6~int,\n 7~int,\n 8~int,\n 9~int,\n 10~int,\n 11~int,\n 12~int,\n 13~int,\n 14~int,\n 15~int,\n 16~int,\n 17~int,\n 18~int,\n 19~int,\n 20~int,\n 21~int,\n 22~int,\n 23~int,\n 24~int,\n 25~int,\n 26~int,\n 27~int,\n 28~int,\n 29~int,\n 30~int,\n 31~int\n ]~list(int),\n 17~int\n)~int^index_list", + type: "int", + }, + { + original: { + name: "map_literal", + description: + "Primary = '{' [MapInits] '}'. Map literals with up to 32 entries.", + expr: "{0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 21: 'twenty-one', 22: 'twenty-two', 23: 'twenty-three', 24: 'twenty-four', 25: 'twenty-five', 26: 'twenty-six', 27: 'twenty-seven', 28: 'twenty-eight', 29: 'twenty-nine', 30: 'thirty', 31: 'thirty-one'}[17]", + value: { stringValue: "seventeen" }, + }, + ast: '_[_](\n {\n 0^#*expr.Constant_Int64Value#:"zero"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 1^#*expr.Constant_Int64Value#:"one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:"two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 3^#*expr.Constant_Int64Value#:"three"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 4^#*expr.Constant_Int64Value#:"four"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 5^#*expr.Constant_Int64Value#:"five"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 6^#*expr.Constant_Int64Value#:"six"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 7^#*expr.Constant_Int64Value#:"seven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 8^#*expr.Constant_Int64Value#:"eight"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 9^#*expr.Constant_Int64Value#:"nine"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 10^#*expr.Constant_Int64Value#:"ten"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 11^#*expr.Constant_Int64Value#:"eleven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 12^#*expr.Constant_Int64Value#:"twelve"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 13^#*expr.Constant_Int64Value#:"thirteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 14^#*expr.Constant_Int64Value#:"fourteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 15^#*expr.Constant_Int64Value#:"fifteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 16^#*expr.Constant_Int64Value#:"sixteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 17^#*expr.Constant_Int64Value#:"seventeen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 18^#*expr.Constant_Int64Value#:"eighteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 19^#*expr.Constant_Int64Value#:"nineteen"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 20^#*expr.Constant_Int64Value#:"twenty"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 21^#*expr.Constant_Int64Value#:"twenty-one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 22^#*expr.Constant_Int64Value#:"twenty-two"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 23^#*expr.Constant_Int64Value#:"twenty-three"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 24^#*expr.Constant_Int64Value#:"twenty-four"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 25^#*expr.Constant_Int64Value#:"twenty-five"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 26^#*expr.Constant_Int64Value#:"twenty-six"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 27^#*expr.Constant_Int64Value#:"twenty-seven"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 28^#*expr.Constant_Int64Value#:"twenty-eight"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 29^#*expr.Constant_Int64Value#:"twenty-nine"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 30^#*expr.Constant_Int64Value#:"thirty"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 31^#*expr.Constant_Int64Value#:"thirty-one"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n 17^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n 0~int:"zero"~string,\n 1~int:"one"~string,\n 2~int:"two"~string,\n 3~int:"three"~string,\n 4~int:"four"~string,\n 5~int:"five"~string,\n 6~int:"six"~string,\n 7~int:"seven"~string,\n 8~int:"eight"~string,\n 9~int:"nine"~string,\n 10~int:"ten"~string,\n 11~int:"eleven"~string,\n 12~int:"twelve"~string,\n 13~int:"thirteen"~string,\n 14~int:"fourteen"~string,\n 15~int:"fifteen"~string,\n 16~int:"sixteen"~string,\n 17~int:"seventeen"~string,\n 18~int:"eighteen"~string,\n 19~int:"nineteen"~string,\n 20~int:"twenty"~string,\n 21~int:"twenty-one"~string,\n 22~int:"twenty-two"~string,\n 23~int:"twenty-three"~string,\n 24~int:"twenty-four"~string,\n 25~int:"twenty-five"~string,\n 26~int:"twenty-six"~string,\n 27~int:"twenty-seven"~string,\n 28~int:"twenty-eight"~string,\n 29~int:"twenty-nine"~string,\n 30~int:"thirty"~string,\n 31~int:"thirty-one"~string\n }~map(int, string),\n 17~int\n)~string^index_map', + type: "string", + }, + { + original: { + name: "message_literal", + description: + "Member = Member '{' [FieldInits] '}'. Message literals with up to 32 fields.", + expr: "TestAllTypes{single_int32: 5, single_int64: 10, single_uint32: 15u, single_uint64: 20u, single_sint32: 25, single_sint64: 30, single_fixed32: 35u, single_fixed64: 40u, single_float: 45.0, single_double: 50.0, single_bool: true, single_string: 'sixty', single_bytes: b'sixty-five', single_value: 70.0, single_int64_wrapper: 75, single_int32_wrapper: 80, single_double_wrapper: 85.0, single_float_wrapper: 90.0, single_uint64_wrapper: 95u, single_uint32_wrapper: 100u, single_string_wrapper: 'one hundred five', single_bool_wrapper: true, repeated_int32: [115], repeated_int64: [120], repeated_uint32: [125u], repeated_uint64: [130u], repeated_sint32: [135], repeated_sint64: [140], repeated_fixed32: [145u], repeated_fixed64: [150u], repeated_sfixed32: [155], repeated_float: [160.0]}.single_sint64", + container: "cel.expr.conformance.proto3", + value: { int64Value: "30" }, + }, + ast: 'TestAllTypes{\n single_int32:5^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_int64:10^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint32:15u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint64:20u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_sint32:25^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_sint64:30^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_fixed32:35u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_fixed64:40u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_float:45^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_double:50^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n single_string:"sixty"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bytes:b"sixty-five"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#,\n single_value:70^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_int64_wrapper:75^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_int32_wrapper:80^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_double_wrapper:85^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_float_wrapper:90^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#,\n single_uint64_wrapper:95u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_uint32_wrapper:100u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#,\n single_string_wrapper:"one hundred five"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n repeated_int32:[\n 115^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_int64:[\n 120^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_uint32:[\n 125u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_uint64:[\n 130u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sint32:[\n 135^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sint64:[\n 140^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_fixed32:[\n 145u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_fixed64:[\n 150u^#*expr.Constant_Uint64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_sfixed32:[\n 155^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#,\n repeated_float:[\n 160^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_sint64^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_int32:5~int,\n single_int64:10~int,\n single_uint32:15u~uint,\n single_uint64:20u~uint,\n single_sint32:25~int,\n single_sint64:30~int,\n single_fixed32:35u~uint,\n single_fixed64:40u~uint,\n single_float:45~double,\n single_double:50~double,\n single_bool:true~bool,\n single_string:"sixty"~string,\n single_bytes:b"sixty-five"~bytes,\n single_value:70~double,\n single_int64_wrapper:75~int,\n single_int32_wrapper:80~int,\n single_double_wrapper:85~double,\n single_float_wrapper:90~double,\n single_uint64_wrapper:95u~uint,\n single_uint32_wrapper:100u~uint,\n single_string_wrapper:"one hundred five"~string,\n single_bool_wrapper:true~bool,\n repeated_int32:[\n 115~int\n ]~list(int),\n repeated_int64:[\n 120~int\n ]~list(int),\n repeated_uint32:[\n 125u~uint\n ]~list(uint),\n repeated_uint64:[\n 130u~uint\n ]~list(uint),\n repeated_sint32:[\n 135~int\n ]~list(int),\n repeated_sint64:[\n 140~int\n ]~list(int),\n repeated_fixed32:[\n 145u~uint\n ]~list(uint),\n repeated_fixed64:[\n 150u~uint\n ]~list(uint),\n repeated_sfixed32:[\n 155~int\n ]~list(int),\n repeated_float:[\n 160~double\n ]~list(double)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_sint64~int', + type: "int", + }, + ], + }, + { + name: "string_literals", + tests: [ + { + original: { + name: "single_quoted", + expr: "'hello'", + value: { stringValue: "hello" }, + }, + ast: '"hello"^#*expr.Constant_StringValue#', + checkedAst: '"hello"~string', + type: "string", + }, + { + original: { + name: "double_quoted", + expr: '"hello"', + value: { stringValue: "hello" }, + }, + ast: '"hello"^#*expr.Constant_StringValue#', + checkedAst: '"hello"~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted", + expr: "'''hello'''", + value: { stringValue: "hello" }, + }, + ast: '"hello"^#*expr.Constant_StringValue#', + checkedAst: '"hello"~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted", + expr: '"""hello"""', + value: { stringValue: "hello" }, + }, + ast: '"hello"^#*expr.Constant_StringValue#', + checkedAst: '"hello"~string', + type: "string", + }, + { + original: { + name: "single_quoted_escaped_punctuation", + expr: "' \\\\ \\? \\\" \\' \\` '", + value: { stringValue: " \\ ? \" ' ` " }, + }, + ast: '" \\\\ ? \\" \' ` "^#*expr.Constant_StringValue#', + checkedAst: '" \\\\ ? \\" \' ` "~string', + type: "string", + }, + { + original: { + name: "double_quoted_escaped_punctuation", + expr: '" \\\\ \\? \\" \\\' \\` "', + value: { stringValue: " \\ ? \" ' ` " }, + }, + ast: '" \\\\ ? \\" \' ` "^#*expr.Constant_StringValue#', + checkedAst: '" \\\\ ? \\" \' ` "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_escaped_punctuation", + expr: "''' \\\\ \\? \\\" \\' \\` '''", + value: { stringValue: " \\ ? \" ' ` " }, + }, + ast: '" \\\\ ? \\" \' ` "^#*expr.Constant_StringValue#', + checkedAst: '" \\\\ ? \\" \' ` "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_escaped_punctuation", + expr: '""" \\\\ \\? \\" \\\' \\` """', + value: { stringValue: " \\ ? \" ' ` " }, + }, + ast: '" \\\\ ? \\" \' ` "^#*expr.Constant_StringValue#', + checkedAst: '" \\\\ ? \\" \' ` "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_unescaped_punctuation", + expr: "''' ? \" ' ` '''", + value: { stringValue: " ? \" ' ` " }, + }, + ast: '" ? \\" \' ` "^#*expr.Constant_StringValue#', + checkedAst: '" ? \\" \' ` "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_unescaped_punctuation", + expr: '""" ? " \' ` """', + value: { stringValue: " ? \" ' ` " }, + }, + ast: '" ? \\" \' ` "^#*expr.Constant_StringValue#', + checkedAst: '" ? \\" \' ` "~string', + type: "string", + }, + { + original: { + name: "single_quoted_escaped_special_control_characters", + expr: "' \\a \\b \\f \\t \\v '", + value: { stringValue: " \u0007 \b \f \t \u000b " }, + }, + ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', + checkedAst: '" \\a \\b \\f \\t \\v "~string', + type: "string", + }, + { + original: { + name: "double_quoted_escaped_special_control_characters", + expr: '" \\a \\b \\f \\t \\v "', + value: { stringValue: " \u0007 \b \f \t \u000b " }, + }, + ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', + checkedAst: '" \\a \\b \\f \\t \\v "~string', + type: "string", + }, + { + original: { + name: "single_quoted_unescaped_special_control_characters", + expr: "' \u0007 \b \f \t \u000b '", + value: { stringValue: " \u0007 \b \f \t \u000b " }, + }, + ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', + checkedAst: '" \\a \\b \\f \\t \\v "~string', + type: "string", + }, + { + original: { + name: "double_quoted_unescaped_special_control_characters", + expr: '" \u0007 \b \f \t \u000b "', + value: { stringValue: " \u0007 \b \f \t \u000b " }, + }, + ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', + checkedAst: '" \\a \\b \\f \\t \\v "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_escaped_special_control_characters", + expr: "''' \\a \\b \\f \\t \\v '''", + value: { stringValue: " \u0007 \b \f \t \u000b " }, + }, + ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', + checkedAst: '" \\a \\b \\f \\t \\v "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_escaped_special_control_characters", + expr: '""" \\a \\b \\f \\t \\v """', + value: { stringValue: " \u0007 \b \f \t \u000b " }, + }, + ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', + checkedAst: '" \\a \\b \\f \\t \\v "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_unescaped_special_control_characters", + expr: "''' \u0007 \b \f \t \u000b '''", + value: { stringValue: " \u0007 \b \f \t \u000b " }, + }, + ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', + checkedAst: '" \\a \\b \\f \\t \\v "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_unescaped_special_control_characters", + expr: '""" \u0007 \b \f \t \u000b """', + value: { stringValue: " \u0007 \b \f \t \u000b " }, + }, + ast: '" \\a \\b \\f \\t \\v "^#*expr.Constant_StringValue#', + checkedAst: '" \\a \\b \\f \\t \\v "~string', + type: "string", + }, + { + original: { + name: "single_quoted_escaped_line_feed", + expr: "' \\n '", + value: { stringValue: " \n " }, + }, + ast: '" \\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\n "~string', + type: "string", + }, + { + original: { + name: "double_quoted_escaped_line_feed", + expr: '" \\n "', + value: { stringValue: " \n " }, + }, + ast: '" \\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\n "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_escaped_line_feed", + expr: "''' \\n '''", + value: { stringValue: " \n " }, + }, + ast: '" \\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\n "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_escaped_line_feed", + expr: '""" \\n """', + value: { stringValue: " \n " }, + }, + ast: '" \\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\n "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_unescaped_line_feed", + expr: "''' \n '''", + value: { stringValue: " \n " }, + }, + ast: '" \\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\n "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_unescaped_line_feed", + expr: '""" \n """', + value: { stringValue: " \n " }, + }, + ast: '" \\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\n "~string', + type: "string", + }, + { + original: { + name: "single_quoted_escaped_carriage_return", + expr: "' \\r '", + value: { stringValue: " \r " }, + }, + ast: '" \\r "^#*expr.Constant_StringValue#', + checkedAst: '" \\r "~string', + type: "string", + }, + { + original: { + name: "double_quoted_escaped_carriage_return", + expr: '" \\r "', + value: { stringValue: " \r " }, + }, + ast: '" \\r "^#*expr.Constant_StringValue#', + checkedAst: '" \\r "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_escaped_carriage_return", + expr: "''' \\r '''", + value: { stringValue: " \r " }, + }, + ast: '" \\r "^#*expr.Constant_StringValue#', + checkedAst: '" \\r "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_escaped_carriage_return", + expr: '""" \\r """', + value: { stringValue: " \r " }, + }, + ast: '" \\r "^#*expr.Constant_StringValue#', + checkedAst: '" \\r "~string', + type: "string", + }, + { + original: { + name: "single_quoted_escaped_windows_line_end", + expr: "' \\r\\n '", + value: { stringValue: " \r\n " }, + }, + ast: '" \\r\\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\r\\n "~string', + type: "string", + }, + { + original: { + name: "double_quoted_escaped_windows_line_end", + expr: '" \\r\\n "', + value: { stringValue: " \r\n " }, + }, + ast: '" \\r\\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\r\\n "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_escaped_windows_line_end", + expr: "''' \\r\\n '''", + value: { stringValue: " \r\n " }, + }, + ast: '" \\r\\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\r\\n "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_escaped_windows_line_end", + expr: '""" \\r\\n """', + value: { stringValue: " \r\n " }, + }, + ast: '" \\r\\n "^#*expr.Constant_StringValue#', + checkedAst: '" \\r\\n "~string', + type: "string", + }, + { + original: { + name: "single_quoted_escaped_all_control_characters", + expr: "' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '", + value: { + stringValue: + " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", + }, + }, + ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', + checkedAst: + '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', + type: "string", + }, + { + original: { + name: "double_quoted_escaped_all_control_characters", + expr: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F "', + value: { + stringValue: + " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", + }, + }, + ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', + checkedAst: + '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', + type: "string", + }, + { + original: { + name: "single_quoted_unescaped_all_control_characters", + expr: "' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '", + value: { + stringValue: + " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", + }, + }, + ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', + checkedAst: + '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', + type: "string", + }, + { + original: { + name: "double_quoted_unescaped_all_control_characters", + expr: '" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "', + value: { + stringValue: + " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", + }, + }, + ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', + checkedAst: + '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_escaped_all_control_characters", + expr: "''' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '''", + value: { + stringValue: + " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", + }, + }, + ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', + checkedAst: + '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_escaped_all_control_characters", + expr: '""" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F """', + value: { + stringValue: + " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", + }, + }, + ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', + checkedAst: + '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_unescaped_all_control_characters", + expr: "''' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '''", + value: { + stringValue: + " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", + }, + }, + ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', + checkedAst: + '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_unescaped_all_control_characters", + expr: '""" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  """', + value: { + stringValue: + " \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  ", + }, + }, + ast: '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_StringValue#', + checkedAst: + '" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~string', + type: "string", + }, + { + original: { + name: "single_quoted_octal_escapes", + expr: "' \\000 \\012 \\177 '", + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "double_quoted_octal_escapes", + expr: '" \\000 \\012 \\177 "', + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_octal_escapes", + expr: "''' \\000 \\012 \\177 '''", + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_octal_escapes", + expr: '""" \\000 \\012 \\177 """', + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "single_quoted_lower_x_escapes", + expr: "' \\x00 \\x0A \\x7F '", + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "double_quoted_lower_x_escapes", + expr: '" \\x00 \\x0A \\x7F "', + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_lower_x_escapes", + expr: "''' \\x00 \\x0A \\x7F '''", + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_lower_x_escapes", + expr: '""" \\x00 \\x0A \\x7F """', + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "single_quoted_upper_x_escapes", + expr: "' \\X00 \\X0A \\X7F '", + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "double_quoted_upper_x_escapes", + expr: '" \\X00 \\X0A \\X7F "', + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_upper_x_escapes", + expr: "''' \\X00 \\X0A \\X7F '''", + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_upper_x_escapes", + expr: '""" \\X00 \\X0A \\X7F """', + value: { stringValue: " \u0000 \n  " }, + }, + ast: '" \\x00 \\n \\x7f "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f "~string', + type: "string", + }, + { + original: { + name: "single_quoted_lower_u_escapes", + expr: "' \\u0000 \\u000A \\u007F \\u0100 \\uFFFB '", + value: { stringValue: " \u0000 \n  Ā  " }, + }, + ast: '" \\x00 \\n \\x7f Ā \\ufffb "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb "~string', + type: "string", + }, + { + original: { + name: "double_quoted_lower_u_escapes", + expr: '" \\u0000 \\u000A \\u007F \\u0100 \\uFFFB "', + value: { stringValue: " \u0000 \n  Ā  " }, + }, + ast: '" \\x00 \\n \\x7f Ā \\ufffb "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_lower_u_escapes", + expr: "''' \\u0000 \\u000A \\u007F \\u0100 \\uFFFB '''", + value: { stringValue: " \u0000 \n  Ā  " }, + }, + ast: '" \\x00 \\n \\x7f Ā \\ufffb "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_lower_u_escapes", + expr: '""" \\u0000 \\u000A \\u007F \\u0100 \\uFFFB """', + value: { stringValue: " \u0000 \n  Ā  " }, + }, + ast: '" \\x00 \\n \\x7f Ā \\ufffb "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb "~string', + type: "string", + }, + { + original: { + name: "single_quoted_upper_u_escapes", + expr: "' \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C '", + value: { stringValue: " \u0000 \n  Ā  𐀀 😬 " }, + }, + ast: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "~string', + type: "string", + }, + { + original: { + name: "double_quoted_upper_u_escapes", + expr: '" \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C "', + value: { stringValue: " \u0000 \n  Ā  𐀀 😬 " }, + }, + ast: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "~string', + type: "string", + }, + { + original: { + name: "triple_single_quoted_upper_u_escapes", + expr: "''' \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C '''", + value: { stringValue: " \u0000 \n  Ā  𐀀 😬 " }, + }, + ast: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "~string', + type: "string", + }, + { + original: { + name: "triple_double_quoted_upper_u_escapes", + expr: '""" \\U00000000 \\U0000000A \\U0000007F \\U00000100 \\U0000FFFB \\U00010000 \\U0001F62C """', + value: { stringValue: " \u0000 \n  Ā  𐀀 😬 " }, + }, + ast: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "^#*expr.Constant_StringValue#', + checkedAst: '" \\x00 \\n \\x7f Ā \\ufffb 𐀀 😬 "~string', + type: "string", + }, + { + original: { + name: "mixed_case_hex_single_quoted_escapes", + expr: "' \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB '", + value: { stringValue: " J K L M ƫ ƫ " }, + }, + ast: '" J K L M ƫ ƫ "^#*expr.Constant_StringValue#', + checkedAst: '" J K L M ƫ ƫ "~string', + type: "string", + }, + { + original: { + name: "mixed_case_hex_double_quoted_escapes", + expr: '" \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB "', + value: { stringValue: " J K L M ƫ ƫ " }, + }, + ast: '" J K L M ƫ ƫ "^#*expr.Constant_StringValue#', + checkedAst: '" J K L M ƫ ƫ "~string', + type: "string", + }, + { + original: { + name: "mixed_case_hex_triple_single_quoted_escapes", + expr: "''' \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB '''", + value: { stringValue: " J K L M ƫ ƫ " }, + }, + ast: '" J K L M ƫ ƫ "^#*expr.Constant_StringValue#', + checkedAst: '" J K L M ƫ ƫ "~string', + type: "string", + }, + { + original: { + name: "mixed_case_hex_triple_double_quoted_escapes", + expr: '""" \\x4a \\x4B \\X4c \\X4D \\u01aB \\U000001aB """', + value: { stringValue: " J K L M ƫ ƫ " }, + }, + ast: '" J K L M ƫ ƫ "^#*expr.Constant_StringValue#', + checkedAst: '" J K L M ƫ ƫ "~string', + type: "string", + }, + { + original: { + name: "unassigned_code_point_single_quoted_escapes", + expr: "' \\U00088888 '", + value: { stringValue: " 򈢈 " }, + }, + ast: '" \\U00088888 "^#*expr.Constant_StringValue#', + checkedAst: '" \\U00088888 "~string', + type: "string", + }, + { + original: { + name: "unassigned_code_point_double_quoted_escapes", + expr: '" \\U00088888 "', + value: { stringValue: " 򈢈 " }, + }, + ast: '" \\U00088888 "^#*expr.Constant_StringValue#', + checkedAst: '" \\U00088888 "~string', + type: "string", + }, + { + original: { + name: "unassigned_code_point_triple_single_quoted_escapes", + expr: "''' \\U00088888 '''", + value: { stringValue: " 򈢈 " }, + }, + ast: '" \\U00088888 "^#*expr.Constant_StringValue#', + checkedAst: '" \\U00088888 "~string', + type: "string", + }, + { + original: { + name: "unassigned_code_point_triple_double_quoted_escapes", + expr: '""" \\U00088888 """', + value: { stringValue: " 򈢈 " }, + }, + ast: '" \\U00088888 "^#*expr.Constant_StringValue#', + checkedAst: '" \\U00088888 "~string', + type: "string", + }, + { + original: { + name: "unassigned_code_point_single_quoted_unescaped", + expr: "' 򈢈 '", + value: { stringValue: " 򈢈 " }, + }, + ast: '" \\U00088888 "^#*expr.Constant_StringValue#', + checkedAst: '" \\U00088888 "~string', + type: "string", + }, + { + original: { + name: "unassigned_code_point_double_quoted_unescaped", + expr: '" 򈢈 "', + value: { stringValue: " 򈢈 " }, + }, + ast: '" \\U00088888 "^#*expr.Constant_StringValue#', + checkedAst: '" \\U00088888 "~string', + type: "string", + }, + { + original: { + name: "unassigned_code_point_triple_single_quoted_unescaped", + expr: "''' 򈢈 '''", + value: { stringValue: " 򈢈 " }, + }, + ast: '" \\U00088888 "^#*expr.Constant_StringValue#', + checkedAst: '" \\U00088888 "~string', + type: "string", + }, + { + original: { + name: "unassigned_code_point_triple_double_quoted_unescaped", + expr: '""" 򈢈 """', + value: { stringValue: " 򈢈 " }, + }, + ast: '" \\U00088888 "^#*expr.Constant_StringValue#', + checkedAst: '" \\U00088888 "~string', + type: "string", + }, + { + original: { + name: "raw_single_quoted_escapes", + expr: "r' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '", + value: { + stringValue: + ' \\\\ \\? \\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ', + }, + }, + ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', + checkedAst: + '" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', + type: "string", + }, + { + original: { + name: "raw_double_quoted_escapes", + expr: 'r" \\\\ \\? \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "', + value: { + stringValue: + " \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", + }, + }, + ast: '" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', + checkedAst: + '" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', + type: "string", + }, + { + original: { + name: "raw_triple_single_quoted_escapes", + expr: "r''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''", + value: { + stringValue: + " \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", + }, + }, + ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', + checkedAst: + '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', + type: "string", + }, + { + original: { + name: "raw_triple_double_quoted_escapes", + expr: 'r""" \\\\ \\? \\" \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 """', + value: { + stringValue: + " \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", + }, + }, + ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', + checkedAst: + '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', + type: "string", + }, + { + original: { + name: "upper_raw_single_quoted_escapes", + expr: "R' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '", + value: { + stringValue: + ' \\\\ \\? \\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ', + }, + }, + ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', + checkedAst: + '" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', + type: "string", + }, + { + original: { + name: "upper_raw_double_quoted_escapes", + expr: 'R" \\\\ \\? \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "', + value: { + stringValue: + " \\\\ \\? \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", + }, + }, + ast: '" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', + checkedAst: + '" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', + type: "string", + }, + { + original: { + name: "upper_raw_triple_single_quoted_escapes", + expr: "R''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''", + value: { + stringValue: + " \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", + }, + }, + ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', + checkedAst: + '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', + type: "string", + }, + { + original: { + name: "upper_raw_triple_double_quoted_escapes", + expr: 'R""" \\\\ \\? \\" \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 """', + value: { + stringValue: + " \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 ", + }, + }, + ast: '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_StringValue#', + checkedAst: + '" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~string', + type: "string", + }, + ], + }, + { + name: "bytes_literals", + tests: [ + { + original: { + name: "single_quoted", + expr: "b'hello'", + value: { bytesValue: "aGVsbG8=" }, + }, + ast: 'b"hello"^#*expr.Constant_BytesValue#', + checkedAst: 'b"hello"~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted", + expr: 'b"hello"', + value: { bytesValue: "aGVsbG8=" }, + }, + ast: 'b"hello"^#*expr.Constant_BytesValue#', + checkedAst: 'b"hello"~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted", + expr: "b'''hello'''", + value: { bytesValue: "aGVsbG8=" }, + }, + ast: 'b"hello"^#*expr.Constant_BytesValue#', + checkedAst: 'b"hello"~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted", + expr: 'b"""hello"""', + value: { bytesValue: "aGVsbG8=" }, + }, + ast: 'b"hello"^#*expr.Constant_BytesValue#', + checkedAst: 'b"hello"~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_escaped_punctuation", + expr: "b' \\\\ \\? \\\" \\' \\` '", + value: { bytesValue: "IFwgPyAiICcgYCA=" }, + }, + ast: 'b" \\\\ ? \\" \' ` "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\\\ ? \\" \' ` "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_escaped_punctuation", + expr: 'b" \\\\ \\? \\" \\\' \\` "', + value: { bytesValue: "IFwgPyAiICcgYCA=" }, + }, + ast: 'b" \\\\ ? \\" \' ` "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\\\ ? \\" \' ` "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_escaped_punctuation", + expr: "b''' \\\\ \\? \\\" \\' \\` '''", + value: { bytesValue: "IFwgPyAiICcgYCA=" }, + }, + ast: 'b" \\\\ ? \\" \' ` "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\\\ ? \\" \' ` "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_escaped_punctuation", + expr: 'b""" \\\\ \\? \\" \\\' \\` """', + value: { bytesValue: "IFwgPyAiICcgYCA=" }, + }, + ast: 'b" \\\\ ? \\" \' ` "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\\\ ? \\" \' ` "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_unescaped_punctuation", + expr: "b''' ? \" ' ` '''", + value: { bytesValue: "ID8gIiAnIGAg" }, + }, + ast: 'b" ? \\" \' ` "^#*expr.Constant_BytesValue#', + checkedAst: 'b" ? \\" \' ` "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_unescaped_punctuation", + expr: 'b""" ? " \' ` """', + value: { bytesValue: "ID8gIiAnIGAg" }, + }, + ast: 'b" ? \\" \' ` "^#*expr.Constant_BytesValue#', + checkedAst: 'b" ? \\" \' ` "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_escaped_special_control_characters", + expr: "b' \\a \\b \\f \\t \\v '", + value: { bytesValue: "IAcgCCAMIAkgCyA=" }, + }, + ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_escaped_special_control_characters", + expr: 'b" \\a \\b \\f \\t \\v "', + value: { bytesValue: "IAcgCCAMIAkgCyA=" }, + }, + ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_unescaped_special_control_characters", + expr: "b' \u0007 \b \f \t \u000b '", + value: { bytesValue: "IAcgCCAMIAkgCyA=" }, + }, + ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_unescaped_special_control_characters", + expr: 'b" \u0007 \b \f \t \u000b "', + value: { bytesValue: "IAcgCCAMIAkgCyA=" }, + }, + ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_escaped_special_control_characters", + expr: "b''' \\a \\b \\f \\t \\v '''", + value: { bytesValue: "IAcgCCAMIAkgCyA=" }, + }, + ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_escaped_special_control_characters", + expr: 'b""" \\a \\b \\f \\t \\v """', + value: { bytesValue: "IAcgCCAMIAkgCyA=" }, + }, + ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_unescaped_special_control_characters", + expr: "b''' \u0007 \b \f \t \u000b '''", + value: { bytesValue: "IAcgCCAMIAkgCyA=" }, + }, + ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_unescaped_special_control_characters", + expr: 'b""" \u0007 \b \f \t \u000b """', + value: { bytesValue: "IAcgCCAMIAkgCyA=" }, + }, + ast: 'b" \\a \\b \\f \\t \\v "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\a \\b \\f \\t \\v "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_escaped_line_feed", + expr: "b' \\n '", + value: { bytesValue: "IAog" }, + }, + ast: 'b" \\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\n "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_escaped_line_feed", + expr: 'b" \\n "', + value: { bytesValue: "IAog" }, + }, + ast: 'b" \\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\n "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_escaped_line_feed", + expr: "b''' \\n '''", + value: { bytesValue: "IAog" }, + }, + ast: 'b" \\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\n "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_escaped_line_feed", + expr: 'b""" \\n """', + value: { bytesValue: "IAog" }, + }, + ast: 'b" \\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\n "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_unescaped_line_feed", + expr: "b''' \n '''", + value: { bytesValue: "IAog" }, + }, + ast: 'b" \\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\n "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_unescaped_line_feed", + expr: 'b""" \n """', + value: { bytesValue: "IAog" }, + }, + ast: 'b" \\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\n "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_escaped_carriage_return", + expr: "b' \\r '", + value: { bytesValue: "IA0g" }, + }, + ast: 'b" \\r "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\r "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_escaped_carriage_return", + expr: 'b" \\r "', + value: { bytesValue: "IA0g" }, + }, + ast: 'b" \\r "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\r "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_escaped_carriage_return", + expr: "b''' \\r '''", + value: { bytesValue: "IA0g" }, + }, + ast: 'b" \\r "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\r "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_escaped_carriage_return", + expr: 'b""" \\r """', + value: { bytesValue: "IA0g" }, + }, + ast: 'b" \\r "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\r "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_escaped_windows_line_end", + expr: "b' \\r\\n '", + value: { bytesValue: "IA0KIA==" }, + }, + ast: 'b" \\r\\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\r\\n "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_escaped_windows_line_end", + expr: 'b" \\r\\n "', + value: { bytesValue: "IA0KIA==" }, + }, + ast: 'b" \\r\\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\r\\n "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_escaped_windows_line_end", + expr: "b''' \\r\\n '''", + value: { bytesValue: "IA0KIA==" }, + }, + ast: 'b" \\r\\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\r\\n "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_escaped_windows_line_end", + expr: 'b""" \\r\\n """', + value: { bytesValue: "IA0KIA==" }, + }, + ast: 'b" \\r\\n "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\r\\n "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_escaped_all_control_characters", + expr: "b' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '", + value: { + bytesValue: + "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", + }, + }, + ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_escaped_all_control_characters", + expr: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F "', + value: { + bytesValue: + "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", + }, + }, + ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_unescaped_all_control_characters", + expr: "b' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '", + value: { + bytesValue: + "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", + }, + }, + ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_unescaped_all_control_characters", + expr: 'b" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  "', + value: { + bytesValue: + "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", + }, + }, + ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_escaped_all_control_characters", + expr: "b''' \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F '''", + value: { + bytesValue: + "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", + }, + }, + ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_escaped_all_control_characters", + expr: 'b""" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0B \\x0C \\x0E \\x0F \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1A \\x1B \\x1C \\x1D \\x1E \\x1f \\x7F """', + value: { + bytesValue: + "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", + }, + }, + ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_unescaped_all_control_characters", + expr: "b''' \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  '''", + value: { + bytesValue: + "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", + }, + }, + ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_unescaped_all_control_characters", + expr: 'b""" \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \b \t \u000b \f \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f  """', + value: { + bytesValue: + "IAEgAiADIAQgBSAGIAcgCCAJIAsgDCAOIA8gECARIBIgEyAUIBUgFiAXIBggGSAaIBsgHCAdIB4gHyB/IA==", + }, + }, + ast: 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\a \\b \\t \\v \\f \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_octal_escapes", + expr: "b' \\000 \\012 \\177 \\377 '", + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_octal_escapes", + expr: 'b" \\000 \\012 \\177 \\377 "', + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_octal_escapes", + expr: "b''' \\000 \\012 \\177 \\377 '''", + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_octal_escapes", + expr: 'b""" \\000 \\012 \\177 \\377 """', + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_lower_x_escapes", + expr: "b' \\x00 \\x0A \\x7F \\xFF '", + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_lower_x_escapes", + expr: 'b" \\x00 \\x0A \\x7F \\xFF "', + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_lower_x_escapes", + expr: "b''' \\x00 \\x0A \\x7F \\xFF '''", + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_lower_x_escapes", + expr: 'b""" \\x00 \\x0A \\x7F \\xFF """', + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "single_quoted_upper_x_escapes", + expr: "b' \\X00 \\X0A \\X7F \\XFF '", + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "double_quoted_upper_x_escapes", + expr: 'b" \\X00 \\X0A \\X7F \\XFF "', + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_single_quoted_upper_x_escapes", + expr: "b''' \\X00 \\X0A \\X7F \\XFF '''", + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "triple_double_quoted_upper_x_escapes", + expr: 'b""" \\X00 \\X0A \\X7F \\XFF """', + value: { bytesValue: "IAAgCiB/IP8g" }, + }, + ast: 'b" \\x00 \\n \\x7f \\xff "^#*expr.Constant_BytesValue#', + checkedAst: 'b" \\x00 \\n \\x7f \\xff "~bytes', + type: "bytes", + }, + { + original: { + name: "mixed_case_hex_single_quoted_escapes", + expr: "B' \\x4a \\x4B \\X4c \\X4D '", + value: { bytesValue: "IEogSyBMIE0g" }, + }, + ast: 'b" J K L M "^#*expr.Constant_BytesValue#', + checkedAst: 'b" J K L M "~bytes', + type: "bytes", + }, + { + original: { + name: "mixed_case_hex_double_quoted_escapes", + expr: 'B" \\x4a \\x4B \\X4c \\X4D "', + value: { bytesValue: "IEogSyBMIE0g" }, + }, + ast: 'b" J K L M "^#*expr.Constant_BytesValue#', + checkedAst: 'b" J K L M "~bytes', + type: "bytes", + }, + { + original: { + name: "mixed_case_hex_triple_single_quoted_escapes", + expr: "B''' \\x4a \\x4B \\X4c \\X4D '''", + value: { bytesValue: "IEogSyBMIE0g" }, + }, + ast: 'b" J K L M "^#*expr.Constant_BytesValue#', + checkedAst: 'b" J K L M "~bytes', + type: "bytes", + }, + { + original: { + name: "mixed_case_hex_triple_double_quoted_escapes", + expr: 'B""" \\x4a \\x4B \\X4c \\X4D """', + value: { bytesValue: "IEogSyBMIE0g" }, + }, + ast: 'b" J K L M "^#*expr.Constant_BytesValue#', + checkedAst: 'b" J K L M "~bytes', + type: "bytes", + }, + { + original: { + name: "raw_single_quoted_escapes", + expr: "br' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '", + value: { + bytesValue: + "IFxcIFw/IFwiIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", + }, + }, + ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', + type: "bytes", + }, + { + original: { + name: "raw_double_quoted_escapes", + expr: 'br" \\\\ \\? \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "', + value: { + bytesValue: + "IFxcIFw/IFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", + }, + }, + ast: 'b" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', + type: "bytes", + }, + { + original: { + name: "raw_triple_single_quoted_escapes", + expr: "br''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''", + value: { + bytesValue: + "IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", + }, + }, + ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', + type: "bytes", + }, + { + original: { + name: "raw_triple_double_quoted_escapes", + expr: 'br""" \\\\ \\? \\" \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 """', + value: { + bytesValue: + "IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", + }, + }, + ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', + type: "bytes", + }, + { + original: { + name: "upper_raw_single_quoted_escapes", + expr: "bR' \\\\ \\? \\\" \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '", + value: { + bytesValue: + "IFxcIFw/IFwiIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", + }, + }, + ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\\\\\\\ \\\\? \\\\\\" \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', + type: "bytes", + }, + { + original: { + name: "upper_raw_double_quoted_escapes", + expr: 'bR" \\\\ \\? \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 "', + value: { + bytesValue: + "IFxcIFw/IFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", + }, + }, + ast: 'b" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\\\\\\\ \\\\? \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', + type: "bytes", + }, + { + original: { + name: "upper_raw_triple_single_quoted_escapes", + expr: "bR''' \\\\ \\? \\\" \\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 '''", + value: { + bytesValue: + "IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", + }, + }, + ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', + type: "bytes", + }, + { + original: { + name: "upper_raw_triple_double_quoted_escapes", + expr: 'bR""" \\\\ \\? \\" \\\' \\` \\a \\b \\f \\t \\v \\n \\r \\000 \\x00 \\X00 \\u0000 \\U00000000 """', + value: { + bytesValue: + "IFxcIFw/IFwiIFwnIFxgIFxhIFxiIFxmIFx0IFx2IFxuIFxyIFwwMDAgXHgwMCBcWDAwIFx1MDAwMCBcVTAwMDAwMDAwIA==", + }, + }, + ast: 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "^#*expr.Constant_BytesValue#', + checkedAst: + 'b" \\\\\\\\ \\\\? \\\\\\" \\\\\' \\\\` \\\\a \\\\b \\\\f \\\\t \\\\v \\\\n \\\\r \\\\000 \\\\x00 \\\\X00 \\\\u0000 \\\\U00000000 "~bytes', + type: "bytes", + }, + ], + }, + { + name: "whitespace", + tests: [ + { + original: { + name: "spaces", + description: "Check that spaces are ignored.", + expr: "[ . cel. expr .conformance. proto3. TestAllTypes { single_int64 : int ( 17 ) } . single_int64 ] [ 0 ] == ( 18 - 1 ) \u0026\u0026 ! false ? 1 : 2", + value: { int64Value: "1" }, + }, + ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", + type: "int", + }, + { + original: { + name: "tabs", + description: "Check that tabs (`\\t`) are ignored.", + expr: "[\t.\tcel.\texpr\t.conformance.\tproto3.\tTestAllTypes\t{\tsingle_int64\t:\tint\t(\t17\t)\t}\t.\tsingle_int64\t]\t[\t0\t]\t==\t(\t18\t-\t1\t)\t\u0026\u0026\t!\tfalse\t?\t1\t:\t2", + value: { int64Value: "1" }, + }, + ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", + type: "int", + }, + { + original: { + name: "new_lines", + description: "Check that new lines (`\\n`) are ignored.", + expr: "[\n.\ncel.\nexpr\n.conformance.\nproto3.\nTestAllTypes\n{\nsingle_int64\n:\nint\n(\n17\n)\n}\n.\nsingle_int64\n]\n[\n0\n]\n==\n(\n18\n-\n1\n)\n\u0026\u0026\n!\nfalse\n?\n1\n:\n2", + value: { int64Value: "1" }, + }, + ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", + type: "int", + }, + { + original: { + name: "new_pages", + description: "Check that new pages (`\\f`) are ignored.", + expr: "[\f.\fcel.\fexpr\f.conformance.\fproto3.\fTestAllTypes\f{\fsingle_int64\f:\fint\f(\f17\f)\f}\f.\fsingle_int64\f]\f[\f0\f]\f==\f(\f18\f-\f1\f)\f\u0026\u0026\f!\ffalse\f?\f1\f:\f2", + value: { int64Value: "1" }, + }, + ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", + type: "int", + }, + { + original: { + name: "carriage_returns", + description: "Check that carriage returns (`\\r`) are ignored.", + expr: "[\r.\rcel.\rexpr\r.conformance.\rproto3.\rTestAllTypes\r{\rsingle_int64\r:\rint\r(\r17\r)\r}\r.\rsingle_int64\r]\r[\r0\r]\r==\r(\r18\r-\r1\r)\r\u0026\u0026\r!\rfalse\r?\r1\r:\r2", + value: { int64Value: "1" }, + }, + ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", + type: "int", + }, + ], + }, + { + name: "comments", + tests: [ + { + original: { + name: "new_line_terminated", + description: + "Check that new-line-terminated comments are ignored.", + expr: "[// @\n.// @\ncel.// @\nexpr// @\n.conformance.// @\nproto3.// @\nTestAllTypes// @\n{// @\nsingle_int64// @\n:// @\nint// @\n(// @\n17// @\n)// @\n}// @\n.// @\nsingle_int64// @\n]// @\n[// @\n0// @\n]// @\n==// @\n(// @\n18// @\n-// @\n1// @\n)// @\n\u0026\u0026// @\n!// @\nfalse// @\n?// @\n1// @\n:// @\n2", + value: { int64Value: "1" }, + }, + ast: "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n .cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n _-_(\n 18^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n !_(\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n _\u0026\u0026_(\n _==_(\n _[_](\n [\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64:int(\n 17~int\n )~int^int64_to_int64\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int\n ]~list(int),\n 0~int\n )~int^index_list,\n _-_(\n 18~int,\n 1~int\n )~int^subtract_int64\n )~bool^equals,\n !_(\n false~bool\n )~bool^logical_not\n )~bool^logical_and,\n 1~int,\n 2~int\n)~int^conditional", + type: "int", + }, + ], + }, + { + name: "selectors", + tests: [ + { + original: { + name: "as", + description: "Check that `as` can be used as a selector.", + expr: "{ 'as': 1 }.as", + value: { int64Value: "1" }, + }, + ast: '{\n "as"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.as^#*expr.Expr_SelectExpr#', + checkedAst: '{\n "as"~string:1~int\n}~map(string, int).as~int', + type: "int", + }, + { + original: { + name: "break", + description: "Check that `break` can be used as a selector.", + expr: "{ 'break': 1 }.break", + value: { int64Value: "1" }, + }, + ast: '{\n "break"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.break^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "break"~string:1~int\n}~map(string, int).break~int', + type: "int", + }, + { + original: { + name: "const", + description: "Check that `const` can be used as a selector.", + expr: "{ 'const': 1 }.const", + value: { int64Value: "1" }, + }, + ast: '{\n "const"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.const^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "const"~string:1~int\n}~map(string, int).const~int', + type: "int", + }, + { + original: { + name: "continue", + description: "Check that `continue` can be used as a selector.", + expr: "{ 'continue': 1 }.continue", + value: { int64Value: "1" }, + }, + ast: '{\n "continue"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.continue^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "continue"~string:1~int\n}~map(string, int).continue~int', + type: "int", + }, + { + original: { + name: "else", + description: "Check that `else` can be used as a selector.", + expr: "{ 'else': 1 }.else", + value: { int64Value: "1" }, + }, + ast: '{\n "else"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.else^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "else"~string:1~int\n}~map(string, int).else~int', + type: "int", + }, + { + original: { + name: "for", + description: "Check that `for` can be used as a selector.", + expr: "{ 'for': 1 }.for", + value: { int64Value: "1" }, + }, + ast: '{\n "for"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.for^#*expr.Expr_SelectExpr#', + checkedAst: '{\n "for"~string:1~int\n}~map(string, int).for~int', + type: "int", + }, + { + original: { + name: "function", + description: "Check that `function` can be used as a selector.", + expr: "{ 'function': 1 }.function", + value: { int64Value: "1" }, + }, + ast: '{\n "function"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.function^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "function"~string:1~int\n}~map(string, int).function~int', + type: "int", + }, + { + original: { + name: "if", + description: "Check that `if` can be used as a selector.", + expr: "{ 'if': 1 }.if", + value: { int64Value: "1" }, + }, + ast: '{\n "if"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.if^#*expr.Expr_SelectExpr#', + checkedAst: '{\n "if"~string:1~int\n}~map(string, int).if~int', + type: "int", + }, + { + original: { + name: "import", + description: "Check that `import` can be used as a selector.", + expr: "{ 'import': 1 }.import", + value: { int64Value: "1" }, + }, + ast: '{\n "import"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.import^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "import"~string:1~int\n}~map(string, int).import~int', + type: "int", + }, + { + original: { + name: "let", + description: "Check that `let` can be used as a selector.", + expr: "{ 'let': 1 }.let", + value: { int64Value: "1" }, + }, + ast: '{\n "let"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.let^#*expr.Expr_SelectExpr#', + checkedAst: '{\n "let"~string:1~int\n}~map(string, int).let~int', + type: "int", + }, + { + original: { + name: "loop", + description: "Check that `loop` can be used as a selector.", + expr: "{ 'loop': 1 }.loop", + value: { int64Value: "1" }, + }, + ast: '{\n "loop"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.loop^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "loop"~string:1~int\n}~map(string, int).loop~int', + type: "int", + }, + { + original: { + name: "package", + description: "Check that `package` can be used as a selector.", + expr: "{ 'package': 1 }.package", + value: { int64Value: "1" }, + }, + ast: '{\n "package"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.package^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "package"~string:1~int\n}~map(string, int).package~int', + type: "int", + }, + { + original: { + name: "namespace", + description: + "Check that `namespace` can be used as a selector.", + expr: "{ 'namespace': 1 }.namespace", + value: { int64Value: "1" }, + }, + ast: '{\n "namespace"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.namespace^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "namespace"~string:1~int\n}~map(string, int).namespace~int', + type: "int", + }, + { + original: { + name: "return", + description: "Check that `return` can be used as a selector.", + expr: "{ 'return': 1 }.return", + value: { int64Value: "1" }, + }, + ast: '{\n "return"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.return^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "return"~string:1~int\n}~map(string, int).return~int', + type: "int", + }, + { + original: { + name: "var", + description: "Check that `var` can be used as a selector.", + expr: "{ 'var': 1 }.var", + value: { int64Value: "1" }, + }, + ast: '{\n "var"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.var^#*expr.Expr_SelectExpr#', + checkedAst: '{\n "var"~string:1~int\n}~map(string, int).var~int', + type: "int", + }, + { + original: { + name: "void", + description: "Check that `void` can be used as a selector.", + expr: "{ 'void': 1 }.void", + value: { int64Value: "1" }, + }, + ast: '{\n "void"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.void^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "void"~string:1~int\n}~map(string, int).void~int', + type: "int", + }, + { + original: { + name: "while", + description: "Check that `while` can be used as a selector.", + expr: "{ 'while': 1 }.while", + value: { int64Value: "1" }, + }, + ast: '{\n "while"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.while^#*expr.Expr_SelectExpr#', + checkedAst: + '{\n "while"~string:1~int\n}~map(string, int).while~int', + type: "int", + }, + ], + }, + { + name: "receiver_function_names", + tests: [ + { + original: { + name: "as", + description: + "Check that `as` can be used as a receiver function.", + expr: "a.as() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.as()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.as() || true\n | ^\nERROR: \u003cinput\u003e:1:5: undeclared reference to 'as' (in container '')\n | a.as() || true\n | ....^", + }, + { + original: { + name: "break", + description: + "Check that `break` can be used as a receiver function.", + expr: "a.break() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.break()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.break() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'break' (in container '')\n | a.break() || true\n | .......^", + }, + { + original: { + name: "const", + description: + "Check that `const` can be used as a receiver function.", + expr: "a.const() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.const()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.const() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'const' (in container '')\n | a.const() || true\n | .......^", + }, + { + original: { + name: "continue", + description: + "Check that `continue` can be used as a receiver function.", + expr: "a.continue() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.continue()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.continue() || true\n | ^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'continue' (in container '')\n | a.continue() || true\n | ..........^", + }, + { + original: { + name: "else", + description: + "Check that `else` can be used as a receiver function.", + expr: "a.else() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.else()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.else() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'else' (in container '')\n | a.else() || true\n | ......^", + }, + { + original: { + name: "for", + description: + "Check that `for` can be used as a receiver function.", + expr: "a.for() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.for()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.for() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'for' (in container '')\n | a.for() || true\n | .....^", + }, + { + original: { + name: "function", + description: + "Check that `function` can be used as a receiver function.", + expr: "a.function() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.function()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.function() || true\n | ^\nERROR: \u003cinput\u003e:1:11: undeclared reference to 'function' (in container '')\n | a.function() || true\n | ..........^", + }, + { + original: { + name: "if", + description: + "Check that `if` can be used as a receiver function.", + expr: "a.if() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.if()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.if() || true\n | ^\nERROR: \u003cinput\u003e:1:5: undeclared reference to 'if' (in container '')\n | a.if() || true\n | ....^", + }, + { + original: { + name: "import", + description: + "Check that `import` can be used as a receiver function.", + expr: "a.import() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.import()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.import() || true\n | ^\nERROR: \u003cinput\u003e:1:9: undeclared reference to 'import' (in container '')\n | a.import() || true\n | ........^", + }, + { + original: { + name: "let", + description: + "Check that `let` can be used as a receiver function.", + expr: "a.let() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.let()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.let() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'let' (in container '')\n | a.let() || true\n | .....^", + }, + { + original: { + name: "loop", + description: + "Check that `loop` can be used as a receiver function.", + expr: "a.loop() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.loop()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.loop() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'loop' (in container '')\n | a.loop() || true\n | ......^", + }, + { + original: { + name: "package", + description: + "Check that `package` can be used as a receiver function.", + expr: "a.package() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.package()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.package() || true\n | ^\nERROR: \u003cinput\u003e:1:10: undeclared reference to 'package' (in container '')\n | a.package() || true\n | .........^", + }, + { + original: { + name: "namespace", + description: + "Check that `namespace` can be used as a receiver function.", + expr: "a.namespace() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.namespace()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.namespace() || true\n | ^\nERROR: \u003cinput\u003e:1:12: undeclared reference to 'namespace' (in container '')\n | a.namespace() || true\n | ...........^", + }, + { + original: { + name: "return", + description: + "Check that `return` can be used as a receiver function.", + expr: "a.return() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.return()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.return() || true\n | ^\nERROR: \u003cinput\u003e:1:9: undeclared reference to 'return' (in container '')\n | a.return() || true\n | ........^", + }, + { + original: { + name: "var", + description: + "Check that `var` can be used as a receiver function.", + expr: "a.var() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.var()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.var() || true\n | ^\nERROR: \u003cinput\u003e:1:6: undeclared reference to 'var' (in container '')\n | a.var() || true\n | .....^", + }, + { + original: { + name: "void", + description: + "Check that `void` can be used as a receiver function.", + expr: "a.void() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.void()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.void() || true\n | ^\nERROR: \u003cinput\u003e:1:7: undeclared reference to 'void' (in container '')\n | a.void() || true\n | ......^", + }, + { + original: { + name: "while", + description: + "Check that `while` can be used as a receiver function.", + expr: "a.while() || true", + disableCheck: true, + value: { boolValue: true }, + }, + ast: "_||_(\n a^#*expr.Expr_IdentExpr#.while()^#*expr.Expr_CallExpr#,\n true^#*expr.Constant_BoolValue#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:1: undeclared reference to 'a' (in container '')\n | a.while() || true\n | ^\nERROR: \u003cinput\u003e:1:8: undeclared reference to 'while' (in container '')\n | a.while() || true\n | .......^", + }, + ], + }, + { + name: "struct_field_names", + tests: [ + { + original: { + name: "as", + description: + "Check that `as` can be used as a struct field name.", + expr: "TestAllTypes{ as: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + as: true, + }, + }, + }, + ast: "TestAllTypes{\n as:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n as:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "break", + description: + "Check that `break` can be used as a struct field name.", + expr: "TestAllTypes{ break: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + break: true, + }, + }, + }, + ast: "TestAllTypes{\n break:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n break:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "const", + description: + "Check that `const` can be used as a struct field name.", + expr: "TestAllTypes{ const: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + const: true, + }, + }, + }, + ast: "TestAllTypes{\n const:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n const:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "continue", + description: + "Check that `continue` can be used as a struct field name.", + expr: "TestAllTypes{ continue: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + continue: true, + }, + }, + }, + ast: "TestAllTypes{\n continue:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n continue:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "else", + description: + "Check that `else` can be used as a struct field name.", + expr: "TestAllTypes{ else: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + else: true, + }, + }, + }, + ast: "TestAllTypes{\n else:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n else:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "for", + description: + "Check that `for` can be used as a struct field name.", + expr: "TestAllTypes{ for: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + for: true, + }, + }, + }, + ast: "TestAllTypes{\n for:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n for:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "function", + description: + "Check that `function` can be used as a struct field name.", + expr: "TestAllTypes{ function: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + function: true, + }, + }, + }, + ast: "TestAllTypes{\n function:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n function:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "if", + description: + "Check that `if` can be used as a struct field name.", + expr: "TestAllTypes{ if: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + if: true, + }, + }, + }, + ast: "TestAllTypes{\n if:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n if:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "import", + description: + "Check that `import` can be used as a struct field name.", + expr: "TestAllTypes{ import: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + import: true, + }, + }, + }, + ast: "TestAllTypes{\n import:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n import:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "let", + description: + "Check that `let` can be used as a struct field name.", + expr: "TestAllTypes{ let: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + let: true, + }, + }, + }, + ast: "TestAllTypes{\n let:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n let:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "loop", + description: + "Check that `loop` can be used as a struct field name.", + expr: "TestAllTypes{ loop: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + loop: true, + }, + }, + }, + ast: "TestAllTypes{\n loop:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n loop:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "package", + description: + "Check that `package` can be used as a struct field name.", + expr: "TestAllTypes{ package: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + package: true, + }, + }, + }, + ast: "TestAllTypes{\n package:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n package:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "namespace", + description: + "Check that `namespace` can be used as a struct field name.", + expr: "TestAllTypes{ namespace: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + namespace: true, + }, + }, + }, + ast: "TestAllTypes{\n namespace:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n namespace:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "return", + description: + "Check that `return` can be used as a struct field name.", + expr: "TestAllTypes{ return: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + return: true, + }, + }, + }, + ast: "TestAllTypes{\n return:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n return:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "var", + description: + "Check that `var` can be used as a struct field name.", + expr: "TestAllTypes{ var: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + var: true, + }, + }, + }, + ast: "TestAllTypes{\n var:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n var:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "void", + description: + "Check that `void` can be used as a struct field name.", + expr: "TestAllTypes{ void: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + void: true, + }, + }, + }, + ast: "TestAllTypes{\n void:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n void:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "while", + description: + "Check that `while` can be used as a struct field name.", + expr: "TestAllTypes{ while: true }", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + while: true, + }, + }, + }, + ast: "TestAllTypes{\n while:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n while:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + ], + }, + { + name: "plumbing", + suites: [ + { + name: "min", + tests: [ + { + original: { + name: "min_program", + description: "Smallest functionality: expr in, result out.", + expr: "17", + value: { int64Value: "17" }, + }, + ast: "17^#*expr.Constant_Int64Value#", + checkedAst: "17~int", + type: "int", + }, + ], + }, + { + name: "eval_results", + tests: [ + { + original: { + name: "error_result", + description: "Check that error results go through.", + expr: "1 / 0", + evalError: { errors: [{ message: "foo" }] }, + }, + ast: "_/_(\n 1^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: "_/_(\n 1~int,\n 0~int\n)~int^divide_int64", + type: "int", + }, + { + original: { + name: "eval_map_results", + description: + "Check that map literals results are order independent.", + expr: '{"k1":"v1","k":"v"}', + value: { + mapValue: { + entries: [ + { + key: { stringValue: "k" }, + value: { stringValue: "v" }, + }, + { + key: { stringValue: "k1" }, + value: { stringValue: "v1" }, + }, + ], + }, + }, + }, + ast: '{\n "k1"^#*expr.Constant_StringValue#:"v1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "k"^#*expr.Constant_StringValue#:"v"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + '{\n "k1"~string:"v1"~string,\n "k"~string:"v"~string\n}~map(string, string)', + type: "map(string, string)", + }, + ], + }, + { + name: "check_inputs", + tests: [ + { + original: { + name: "skip_check", + description: "Make sure we can skip type checking.", + expr: "[17, 'pancakes']", + disableCheck: true, + value: { + listValue: { + values: [{ int64Value: "17" }, { stringValue: "pancakes" }], + }, + }, + }, + ast: '[\n 17^#*expr.Constant_Int64Value#,\n "pancakes"^#*expr.Constant_StringValue#\n]^#*expr.Expr_ListExpr#', + checkedAst: '[\n 17~int,\n "pancakes"~string\n]~list(dyn)', + type: "list(dyn)", + }, + ], + }, + { + name: "eval_inputs", + tests: [ + { + original: { + name: "one_ignored_value_arg", + description: + "Check that value bindings can be given, even if ignored.", + expr: "'foo'", + bindings: { x: { value: { int64Value: "17" } } }, + value: { stringValue: "foo" }, + }, + ast: '"foo"^#*expr.Constant_StringValue#', + checkedAst: '"foo"~string', + type: "string", + }, + ], + }, + ], + }, + { + name: "proto2", + suites: [ + { + name: "literal_singular", + tests: [ + { + original: { + name: "int64_nocontainer", + expr: "cel.expr.conformance.proto2.TestAllTypes{single_int64: 17}", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt64: "17", + }, + }, + }, + ast: "cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "int32", + expr: "TestAllTypes{single_int32: -34}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32: -34, + }, + }, + }, + ast: "TestAllTypes{\n single_int32:-34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32:-34~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "int32_eq_uint", + expr: "Int32Value{value: 34} == dyn(UInt64Value{value: 34u})", + container: "google.protobuf", + value: { boolValue: true }, + }, + ast: "_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.UInt64Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_int32_eq_uint", + expr: "Int32Value{value: 34} == dyn(UInt64Value{value: 18446744073709551615u})", + container: "google.protobuf", + value: { boolValue: false }, + }, + ast: "_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "int32_eq_double", + expr: "Int32Value{value: 34} == dyn(DoubleValue{value: 34.0})", + container: "google.protobuf", + value: { boolValue: true }, + }, + ast: "_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:34~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_int32_eq_double", + expr: "Int32Value{value: 34} == dyn(DoubleValue{value: -9223372036854775809.0})", + container: "google.protobuf", + value: { boolValue: false }, + }, + ast: "_==_(\n Int32Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:-9.223372036854776e+18^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.Int32Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:-9.223372036854776e+18~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "int64", + expr: "TestAllTypes{single_int64: 17}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt64: "17", + }, + }, + }, + ast: "TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "uint32", + expr: "TestAllTypes{single_uint32: 1u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint32: 1, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32:1u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "uint32_eq_int", + expr: "UInt32Value{value: 34u} == dyn(Int64Value{value: 34})", + container: "google.protobuf", + value: { boolValue: true }, + }, + ast: "_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.Int64Value{\n value:34~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_uint32_eq_int", + expr: "UInt32Value{value: 34u} == dyn(Int64Value{value: -1})", + container: "google.protobuf", + value: { boolValue: false }, + }, + ast: "_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.Int64Value{\n value:-1~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "uint32_eq_double", + expr: "UInt32Value{value: 34u} == dyn(DoubleValue{value: 34.0})", + container: "google.protobuf", + value: { boolValue: true }, + }, + ast: "_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:34~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_uint32_eq_double", + expr: "UInt32Value{value: 34u} == dyn(DoubleValue{value: 18446744073709551616.0})", + container: "google.protobuf", + value: { boolValue: false }, + }, + ast: "_==_(\n UInt32Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n DoubleValue{\n value:1.8446744073709552e+19^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.UInt32Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value,\n dyn(\n google.protobuf.DoubleValue{\n value:1.8446744073709552e+19~double\n }~wrapper(double)^google.protobuf.DoubleValue\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "uint64", + expr: "TestAllTypes{single_uint64: 9999u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint64: "9999", + }, + }, + }, + ast: "TestAllTypes{\n single_uint64:9999u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64:9999u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "sint32", + expr: "TestAllTypes{single_sint32: -3}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleSint32: -3, + }, + }, + }, + ast: "TestAllTypes{\n single_sint32:-3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_sint32:-3~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "sint64", + expr: "TestAllTypes{single_sint64: 255}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleSint64: "255", + }, + }, + }, + ast: "TestAllTypes{\n single_sint64:255^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_sint64:255~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "fixed32", + expr: "TestAllTypes{single_fixed32: 43u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFixed32: 43, + }, + }, + }, + ast: "TestAllTypes{\n single_fixed32:43u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_fixed32:43u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "fixed64", + expr: "TestAllTypes{single_fixed64: 1880u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFixed64: "1880", + }, + }, + }, + ast: "TestAllTypes{\n single_fixed64:1880u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_fixed64:1880u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "sfixed32", + expr: "TestAllTypes{single_sfixed32: -404}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleSfixed32: -404, + }, + }, + }, + ast: "TestAllTypes{\n single_sfixed32:-404^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_sfixed32:-404~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "sfixed64", + expr: "TestAllTypes{single_sfixed64: -1}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleSfixed64: "-1", + }, + }, + }, + ast: "TestAllTypes{\n single_sfixed64:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_sfixed64:-1~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "float", + expr: "TestAllTypes{single_float: 3.1416}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFloat: 3.1416, + }, + }, + }, + ast: "TestAllTypes{\n single_float:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float:3.1416~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "float_eq_int", + expr: "FloatValue{value: 3.0} == dyn(Int64Value{value: 3})", + container: "google.protobuf", + value: { boolValue: true }, + }, + ast: "_==_(\n FloatValue{\n value:3^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.FloatValue{\n value:3~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.Int64Value{\n value:3~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_float_eq_int", + expr: "FloatValue{value: -1.14} == dyn(Int64Value{value: -1})", + container: "google.protobuf", + value: { boolValue: false }, + }, + ast: "_==_(\n FloatValue{\n value:-1.14^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n Int64Value{\n value:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.FloatValue{\n value:-1.14~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.Int64Value{\n value:-1~int\n }~wrapper(int)^google.protobuf.Int64Value\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "float_eq_uint", + expr: "FloatValue{value: 34.0} == dyn(UInt64Value{value: 34u})", + container: "google.protobuf", + value: { boolValue: true }, + }, + ast: "_==_(\n FloatValue{\n value:34^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:34u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.FloatValue{\n value:34~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.UInt64Value{\n value:34u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "not_float_eq_uint", + expr: "FloatValue{value: -1.0} == dyn(UInt64Value{value: 18446744073709551615u})", + container: "google.protobuf", + value: { boolValue: false }, + }, + ast: "_==_(\n FloatValue{\n value:-1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n dyn(\n UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n google.protobuf.FloatValue{\n value:-1~double\n }~wrapper(double)^google.protobuf.FloatValue,\n dyn(\n google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n )~dyn^to_dyn\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "double", + expr: "TestAllTypes{single_double: 6.022e23}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleDouble: 6.022e23, + }, + }, + }, + ast: "TestAllTypes{\n single_double:6.022e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_double:6.022e+23~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "bool", + expr: "TestAllTypes{single_bool: true}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleBool: true, + }, + }, + }, + ast: "TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "string", + expr: "TestAllTypes{single_string: 'foo'}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleString: "foo", + }, + }, + }, + ast: 'TestAllTypes{\n single_string:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_string:"foo"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "bytes", + expr: "TestAllTypes{single_bytes: b'\\377'}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleBytes: "/w==", + }, + }, + }, + ast: 'TestAllTypes{\n single_bytes:b"\\xff"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_bytes:b"\\xff"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + ], + }, + { + name: "literal_wellknown", + tests: [ + { + original: { + name: "any", + expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 1}}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleAny: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32: 1, + }, + }, + }, + }, + ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_any:cel.expr.conformance.proto2.TestAllTypes{\n single_int32:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "duration", + expr: "TestAllTypes{single_duration: duration('123s')}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleDuration: "123s", + }, + }, + }, + ast: 'TestAllTypes{\n single_duration:duration(\n "123s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_duration:duration(\n "123s"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "timestamp", + expr: "TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleTimestamp: "2009-02-13T23:31:30Z", + }, + }, + }, + ast: 'TestAllTypes{\n single_timestamp:timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_timestamp:timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "struct", + expr: "TestAllTypes{single_struct: {'one': 1, 'two': 2}}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleStruct: { one: 1, two: 2 }, + }, + }, + }, + ast: 'TestAllTypes{\n single_struct:{\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "two"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_struct:{\n "one"~string:1~int,\n "two"~string:2~int\n }~map(string, int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "value", + expr: "TestAllTypes{single_value: 'foo'}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleValue: "foo", + }, + }, + }, + ast: 'TestAllTypes{\n single_value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_value:"foo"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "int64_wrapper", + expr: "TestAllTypes{single_int64_wrapper: -321}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt64Wrapper: "-321", + }, + }, + }, + ast: "TestAllTypes{\n single_int64_wrapper:-321^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int64_wrapper:-321~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "int32_wrapper", + expr: "TestAllTypes{single_int32_wrapper: -456}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32Wrapper: -456, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:-456^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32_wrapper:-456~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "double_wrapper", + expr: "TestAllTypes{single_double_wrapper: 2.71828}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleDoubleWrapper: 2.71828, + }, + }, + }, + ast: "TestAllTypes{\n single_double_wrapper:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_double_wrapper:2.71828~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "float_wrapper", + expr: "TestAllTypes{single_float_wrapper: 2.99792e8}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleFloatWrapper: 299792000, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:2.99792e+08^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_float_wrapper:2.99792e+08~double\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "uint64_wrapper", + expr: "TestAllTypes{single_uint64_wrapper: 8675309u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint64Wrapper: "8675309", + }, + }, + }, + ast: "TestAllTypes{\n single_uint64_wrapper:8675309u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint64_wrapper:8675309u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "uint32_wrapper", + expr: "TestAllTypes{single_uint32_wrapper: 987u}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleUint32Wrapper: 987, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:987u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_uint32_wrapper:987u~uint\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "string_wrapper", + expr: "TestAllTypes{single_string_wrapper: 'hubba'}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleStringWrapper: "hubba", + }, + }, + }, + ast: 'TestAllTypes{\n single_string_wrapper:"hubba"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_string_wrapper:"hubba"~string\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "bool_wrapper", + expr: "TestAllTypes{single_bool_wrapper: true}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleBoolWrapper: true, + }, + }, + }, + ast: "TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes", + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + { + original: { + name: "bytes_wrapper", + expr: "TestAllTypes{single_bytes_wrapper: b'\\301\\103'}", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleBytesWrapper: "wUM=", + }, + }, + }, + ast: 'TestAllTypes{\n single_bytes_wrapper:b"\\xc1C"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n single_bytes_wrapper:b"\\xc1C"~bytes\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes', + type: "cel.expr.conformance.proto2.TestAllTypes", + }, + ], + }, + { + name: "singular_bind", + tests: [ + { + original: { + name: "int32", + expr: "x.single_int32", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt32: 17, + }, + }, + }, + }, + value: { int64Value: "17" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto2.TestAllTypes^x.single_int32~int", + type: "int", + }, + { + original: { + name: "int64", + expr: "x.single_int64", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + singleInt64: "-99", + }, + }, + }, + }, + value: { int64Value: "-99" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto2.TestAllTypes^x.single_int64~int", + type: "int", + }, + ], + }, + { + name: "empty_field", + tests: [ + { + original: { + name: "scalar_with_default", + expr: "TestAllTypes{}.single_int32", + container: "cel.expr.conformance.proto2", + value: { int64Value: "-32" }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~int", + type: "int", + }, + { + original: { + name: "scalar_no_default", + expr: "TestAllTypes{}.single_fixed32", + container: "cel.expr.conformance.proto2", + value: { uint64Value: "0" }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_fixed32^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_fixed32~uint", + type: "uint", + }, + { + original: { + name: "nested_message", + expr: "TestAllTypes{}.single_nested_message", + container: "cel.expr.conformance.proto2", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes.NestedMessage", + }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~cel.expr.conformance.proto2.TestAllTypes.NestedMessage", + type: "cel.expr.conformance.proto2.TestAllTypes.NestedMessage", + }, + { + original: { + name: "nested_message_subfield", + expr: "TestAllTypes{}.single_nested_message.bb", + container: "cel.expr.conformance.proto2", + value: { int64Value: "0" }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#.bb^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~cel.expr.conformance.proto2.TestAllTypes.NestedMessage.bb~int", + type: "int", + }, + { + original: { + name: "wkt", + expr: "TestAllTypes{}.single_int64_wrapper", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + { + original: { + name: "repeated_scalar", + expr: "TestAllTypes{}.repeated_int64", + container: "cel.expr.conformance.proto2", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int64~list(int)", + type: "list(int)", + }, + { + original: { + name: "repeated_enum", + expr: "TestAllTypes{}.repeated_nested_enum", + container: "cel.expr.conformance.proto3", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)", + type: "list(int)", + }, + { + original: { + name: "repeated_nested", + expr: "TestAllTypes{}.repeated_nested_message", + container: "cel.expr.conformance.proto2", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_nested_message~list(cel.expr.conformance.proto2.TestAllTypes.NestedMessage)", + type: "list(cel.expr.conformance.proto2.TestAllTypes.NestedMessage)", + }, + { + original: { + name: "map", + expr: "TestAllTypes{}.map_string_string", + container: "cel.expr.conformance.proto2", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~map(string, string)", + type: "map(string, string)", + }, + ], + }, + { + name: "has", + tests: [ + { + original: { + name: "undefined", + expr: "has(TestAllTypes{}.no_such_field)", + disableCheck: true, + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "no_such_field" }] }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.no_such_field~test-only~^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:4: undefined field 'no_such_field'\n | has(TestAllTypes{}.no_such_field)\n | ...^", + }, + { + original: { + name: "repeated_none_implicit", + expr: "has(TestAllTypes{}.repeated_int32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "repeated_none_explicit", + expr: "has(TestAllTypes{repeated_int32: []}.repeated_int32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n repeated_int32:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "repeated_one", + expr: "has(TestAllTypes{repeated_int32: [1]}.repeated_int32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[\n 1~int\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "repeated_many", + expr: "has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n repeated_int32:[\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.repeated_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "map_none_implicit", + expr: "has(TestAllTypes{}.map_string_string)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool", + type: "bool", + }, + { + original: { + name: "map_none_explicit", + expr: "has(TestAllTypes{map_string_string: {}}.map_string_string)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n map_string_string:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{}~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool", + type: "bool", + }, + { + original: { + name: "map_one_default", + expr: "has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: 'TestAllTypes{\n map_string_string:{\n "MT"^#*expr.Constant_StringValue#:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n "MT"~string:""~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool', + type: "bool", + }, + { + original: { + name: "map_one", + expr: "has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: 'TestAllTypes{\n map_string_string:{\n "one"^#*expr.Constant_StringValue#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n "one"~string:"uno"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool', + type: "bool", + }, + { + original: { + name: "map_many", + expr: "has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: 'TestAllTypes{\n map_string_string:{\n "one"^#*expr.Constant_StringValue#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "two"^#*expr.Constant_StringValue#:"dos"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto2.TestAllTypes{\n map_string_string:{\n "one"~string:"uno"~string,\n "two"~string:"dos"~string\n }~map(string, string)\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.map_string_string~test-only~~bool', + type: "bool", + }, + { + original: { + name: "required", + expr: "has(TestRequired{required_int32: 4}.required_int32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestRequired{\n required_int32:4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.required_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestRequired{\n required_int32:4~int\n}~cel.expr.conformance.proto2.TestRequired^cel.expr.conformance.proto2.TestRequired.required_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_unset_no_default", + expr: "has(TestAllTypes{}.single_sint32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_sint32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_sint32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_set_no_default", + expr: "has(TestAllTypes{single_sint32: -4}.single_sint32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_sint32:-4^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_sint32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_sint32:-4~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_sint32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_unset_with_default", + expr: "has(TestAllTypes{}.single_int32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_set_with_default", + expr: "has(TestAllTypes{single_int32: 16}.single_int32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_int32:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32:16~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_set_to_default", + expr: "has(TestAllTypes{single_int32: -32}.single_int32)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_int32:-32^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_int32:-32~int\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_message_unset", + expr: "has(TestAllTypes{}.standalone_message)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_message_set", + expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n standalone_message:cel.expr.conformance.proto2.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto2.TestAllTypes.NestedMessage^cel.expr.conformance.proto2.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_enum_unset", + expr: "has(TestAllTypes{}.standalone_enum)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_enum_set", + expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool", + type: "bool", + }, + { + original: { + name: "optional_enum_set_zero", + expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.standalone_enum~test-only~~bool", + type: "bool", + }, + { + original: { + name: "oneof_unset", + expr: "has(TestAllTypes{}.single_nested_message)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "oneof_other_set", + expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "oneof_set", + expr: "has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_nested_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_nested_message:cel.expr.conformance.proto2.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto2.TestAllTypes.NestedMessage^cel.expr.conformance.proto2.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "oneof_set_default", + expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_enum~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_nested_enum~test-only~~bool", + type: "bool", + }, + ], + }, + { + name: "set_null", + tests: [ + { + original: { + name: "single_message", + expr: "TestAllTypes{single_nested_message: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_nested_message:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_nested_message:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "single_any", + expr: "TestAllTypes{single_any: null}.single_any", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{\n single_any:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_any:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "single_value", + expr: "TestAllTypes{single_value: null}.single_value", + container: "cel.expr.conformance.proto2", + value: { nullValue: null }, + }, + ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto2.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "single_duration", + expr: "TestAllTypes{single_duration: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_duration:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_duration:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "single_timestamp", + expr: "TestAllTypes{single_timestamp: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_timestamp:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto2.TestAllTypes{\n single_timestamp:null~null\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "single_scalar", + expr: "TestAllTypes{single_bool: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n single_bool:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:25: expected type of field 'single_bool' is 'bool' but provided type is 'null'\n | TestAllTypes{single_bool: null} == TestAllTypes{}\n | ........................^", + }, + { + original: { + name: "repeated", + expr: "TestAllTypes{repeated_int32: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n repeated_int32:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:28: expected type of field 'repeated_int32' is 'list(int)' but provided type is 'null'\n | TestAllTypes{repeated_int32: null} == TestAllTypes{}\n | ...........................^", + }, + { + original: { + name: "map", + expr: "TestAllTypes{map_string_string: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n map_string_string:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:31: expected type of field 'map_string_string' is 'map(string, string)' but provided type is 'null'\n | TestAllTypes{map_string_string: null} == TestAllTypes{}\n | ..............................^", + }, + { + original: { + name: "list_value", + expr: "TestAllTypes{list_value: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n list_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: expected type of field 'list_value' is 'list(dyn)' but provided type is 'null'\n | TestAllTypes{list_value: null} == TestAllTypes{}\n | .......................^", + }, + { + original: { + name: "single_struct", + expr: "TestAllTypes{single_struct: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto2", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n single_struct:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'null'\n | TestAllTypes{single_struct: null} == TestAllTypes{}\n | ..........................^", + }, + ], + }, + { + name: "quoted_fields", + tests: [ + { + original: { + name: "set_field_with_quoted_name", + expr: "TestAllTypes{`in`: true} == TestAllTypes{}", + container: "cel.expr.conformance.proto2", + value: { boolValue: false }, + }, + error: + "ERROR: set_field_with_quoted_name:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true} == TestAllTypes{}\n | .............^", + }, + { + original: { + name: "get_field_with_quoted_name", + expr: "TestAllTypes{`in`: true}.`in`", + container: "cel.expr.conformance.proto2", + value: { boolValue: true }, + }, + error: + "ERROR: get_field_with_quoted_name:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .............^\nERROR: get_field_with_quoted_name:1:26: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .........................^", + }, + ], + }, + { + name: "extensions_has", + tests: [ + { + original: { + name: "package_scoped_int32", + expr: "has(msg.`cel.expr.conformance.proto2.int32_ext`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.int32_ext]": 42, + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_int32:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.int32_ext`)\n | ........^", + }, + { + original: { + name: "package_scoped_nested_ext", + expr: "has(msg.`cel.expr.conformance.proto2.nested_ext`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.nested_ext]": {}, + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_nested_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.nested_ext`)\n | ........^", + }, + { + original: { + name: "package_scoped_test_all_types_ext", + expr: "has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.test_all_types_ext]": {}, + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_test_all_types_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)\n | ........^", + }, + { + original: { + name: "package_scoped_test_all_types_nested_enum_ext", + expr: "has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.nested_enum_ext]": "BAR", + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_test_all_types_nested_enum_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)\n | ........^", + }, + { + original: { + name: "package_scoped_repeated_test_all_types", + expr: "has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.repeated_test_all_types]": + [{ singleInt64: "1" }, { singleBool: true }], + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_repeated_test_all_types:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)\n | ........^", + }, + { + original: { + name: "message_scoped_int64", + expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]": + "42", + }, + }, + }, + }, + }, + error: + "ERROR: message_scoped_int64:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)\n | ........^", + }, + { + original: { + name: "message_scoped_nested_ext", + expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]": + {}, + }, + }, + }, + }, + }, + error: + "ERROR: message_scoped_nested_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)\n | ........^", + }, + { + original: { + name: "message_scoped_nested_enum_ext", + expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]": + "BAR", + }, + }, + }, + }, + }, + error: + "ERROR: message_scoped_nested_enum_ext:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)\n | ........^", + }, + { + original: { + name: "message_scoped_repeated_test_all_types", + expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]": + [{ singleInt64: "1" }, { singleBool: true }], + }, + }, + }, + }, + }, + error: + "ERROR: message_scoped_repeated_test_all_types:1:9: unsupported syntax: '`'\n | has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)\n | ........^", + }, + ], + }, + { + name: "extensions_get", + tests: [ + { + original: { + name: "package_scoped_int32", + expr: "msg.`cel.expr.conformance.proto2.int32_ext` == 42", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.int32_ext]": 42, + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_int32:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.int32_ext` == 42\n | ....^", + }, + { + original: { + name: "package_scoped_nested_ext", + expr: "msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.nested_ext]": {}, + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_nested_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^", + }, + { + original: { + name: "package_scoped_test_all_types_ext", + expr: "msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.test_all_types_ext]": {}, + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_test_all_types_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^", + }, + { + original: { + name: "package_scoped_test_all_types_nested_enum_ext", + expr: "msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.nested_enum_ext]": "BAR", + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_test_all_types_nested_enum_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n | ....^", + }, + { + original: { + name: "package_scoped_repeated_test_all_types", + expr: "msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.repeated_test_all_types]": + [{ singleInt64: "1" }, { singleBool: true }], + }, + }, + }, + }, + }, + error: + "ERROR: package_scoped_repeated_test_all_types:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]\n | ....^", + }, + { + original: { + name: "message_scoped_int64", + expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]": + "42", + }, + }, + }, + }, + }, + error: + "ERROR: message_scoped_int64:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42\n | ....^", + }, + { + original: { + name: "message_scoped_nested_ext", + expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]": + {}, + }, + }, + }, + }, + }, + error: + "ERROR: message_scoped_nested_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}\n | ....^", + }, + { + original: { + name: "message_scoped_nested_enum_ext", + expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]": + "BAR", + }, + }, + }, + }, + }, + error: + "ERROR: message_scoped_nested_enum_ext:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n | ....^", + }, + { + original: { + name: "message_scoped_repeated_test_all_types", + expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]": + [{ singleInt64: "1" }, { singleBool: true }], + }, + }, + }, + }, + }, + error: + "ERROR: message_scoped_repeated_test_all_types:1:5: unsupported syntax: '`'\n | msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]\n | ....^", + }, + ], + }, + ], + }, + { + name: "proto2_ext", + suites: [ + { + name: "has_ext", + tests: [ + { + original: { + name: "package_scoped_int32", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.int32_ext)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.int32_ext]": 42, + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.int32_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.int32_ext~test-only~~bool", + type: "bool", + }, + { + original: { + name: "package_scoped_nested_ext", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.nested_ext)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.nested_ext]": {}, + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_ext~test-only~~bool", + type: "bool", + }, + { + original: { + name: "package_scoped_test_all_types_ext", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.test_all_types_ext)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.test_all_types_ext]": {}, + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.test_all_types_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.test_all_types_ext~test-only~~bool", + type: "bool", + }, + { + original: { + name: "package_scoped_test_all_types_nested_enum_ext", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.nested_enum_ext)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.nested_enum_ext]": "BAR", + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_enum_ext~test-only~~bool", + type: "bool", + }, + { + original: { + name: "package_scoped_repeated_test_all_types", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.repeated_test_all_types)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.repeated_test_all_types]": + [{ singleInt64: "1" }, { singleBool: true }], + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.repeated_test_all_types^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.repeated_test_all_types~test-only~~bool", + type: "bool", + }, + { + original: { + name: "message_scoped_int64", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]": + "42", + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.int64_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext~test-only~~bool", + type: "bool", + }, + { + original: { + name: "message_scoped_nested_ext", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]": + {}, + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_nested_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext~test-only~~bool", + type: "bool", + }, + { + original: { + name: "message_scoped_nested_enum_ext", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]": + "BAR", + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext~test-only~~bool", + type: "bool", + }, + { + original: { + name: "message_scoped_repeated_test_all_types", + expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types)", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]": + [{ singleInt64: "1" }, { singleBool: true }], + }, + }, + }, + }, + }, + ast: "proto^#*expr.Expr_IdentExpr#.hasExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_repeated_test_all_types^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types~test-only~~bool", + type: "bool", + }, + ], + }, + { + name: "get_ext", + tests: [ + { + original: { + name: "package_scoped_int32", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.int32_ext) == 42", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.int32_ext]": 42, + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.int32_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.int32_ext~int,\n 42~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "package_scoped_nested_ext", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.nested_ext]": {}, + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "package_scoped_test_all_types_ext", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.test_all_types_ext) == cel.expr.conformance.proto2.TestAllTypes{}", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.test_all_types_ext]": {}, + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.test_all_types_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.test_all_types_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "package_scoped_test_all_types_nested_enum_ext", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.nested_enum_ext]": "BAR", + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.TestAllTypes^#*expr.Expr_SelectExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.nested_enum_ext~int,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "package_scoped_repeated_test_all_types", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.repeated_test_all_types]": + [{ singleInt64: "1" }, { singleBool: true }], + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.repeated_test_all_types^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.repeated_test_all_types~list(cel.expr.conformance.proto2.TestAllTypes),\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n ]~list(cel.expr.conformance.proto2.TestAllTypes)\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "message_scoped_int64", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext) == 42", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]": + "42", + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.int64_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext~int,\n 42~int\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "message_scoped_nested_ext", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]": + {}, + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_nested_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel.expr.conformance.proto2.TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext~cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{}~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "message_scoped_nested_enum_ext", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]": + "BAR", + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.nested_enum_ext^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.TestAllTypes^#*expr.Expr_SelectExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext~int,\n cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "message_scoped_repeated_test_all_types", + expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto2.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes", + "[cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]": + [{ singleInt64: "1" }, { singleBool: true }], + }, + }, + }, + }, + }, + ast: "_==_(\n proto^#*expr.Expr_IdentExpr#.getExt(\n msg^#*expr.Expr_IdentExpr#,\n cel^#*expr.Expr_IdentExpr#.expr^#*expr.Expr_SelectExpr#.conformance^#*expr.Expr_SelectExpr#.proto2^#*expr.Expr_SelectExpr#.Proto2ExtensionScopedMessage^#*expr.Expr_SelectExpr#.message_scoped_repeated_test_all_types^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto2.TestAllTypes^msg.cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types~list(cel.expr.conformance.proto2.TestAllTypes),\n [\n cel.expr.conformance.proto2.TestAllTypes{\n single_int64:1~int\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes,\n cel.expr.conformance.proto2.TestAllTypes{\n single_bool:true~bool\n }~cel.expr.conformance.proto2.TestAllTypes^cel.expr.conformance.proto2.TestAllTypes\n ]~list(cel.expr.conformance.proto2.TestAllTypes)\n)~bool^equals", + type: "bool", + }, + ], + }, + ], + }, + { + name: "proto3", + suites: [ + { + name: "literal_singular", + tests: [ + { + original: { + name: "int64_nocontainer", + expr: "cel.expr.conformance.proto3.TestAllTypes{single_int64: 17}", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt64: "17", + }, + }, + }, + ast: "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "int32", + expr: "TestAllTypes{single_int32: -34}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: -34, + }, + }, + }, + ast: "TestAllTypes{\n single_int32:-34^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32:-34~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "int64", + expr: "TestAllTypes{single_int64: 17}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt64: "17", + }, + }, + }, + ast: "TestAllTypes{\n single_int64:17^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:17~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "uint32", + expr: "TestAllTypes{single_uint32: 1u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint32: 1, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32:1u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "uint64", + expr: "TestAllTypes{single_uint64: 9999u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint64: "9999", + }, + }, + }, + ast: "TestAllTypes{\n single_uint64:9999u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint64:9999u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "sint32", + expr: "TestAllTypes{single_sint32: -3}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleSint32: -3, + }, + }, + }, + ast: "TestAllTypes{\n single_sint32:-3^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_sint32:-3~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "sint64", + expr: "TestAllTypes{single_sint64: 255}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleSint64: "255", + }, + }, + }, + ast: "TestAllTypes{\n single_sint64:255^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_sint64:255~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "fixed32", + expr: "TestAllTypes{single_fixed32: 43u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleFixed32: 43, + }, + }, + }, + ast: "TestAllTypes{\n single_fixed32:43u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_fixed32:43u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "fixed64", + expr: "TestAllTypes{single_fixed64: 1880u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleFixed64: "1880", + }, + }, + }, + ast: "TestAllTypes{\n single_fixed64:1880u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_fixed64:1880u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "sfixed32", + expr: "TestAllTypes{single_sfixed32: -404}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleSfixed32: -404, + }, + }, + }, + ast: "TestAllTypes{\n single_sfixed32:-404^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_sfixed32:-404~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "sfixed64", + expr: "TestAllTypes{single_sfixed64: -1}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleSfixed64: "-1", + }, + }, + }, + ast: "TestAllTypes{\n single_sfixed64:-1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_sfixed64:-1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "float", + expr: "TestAllTypes{single_float: 3.1416}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleFloat: 3.1416, + }, + }, + }, + ast: "TestAllTypes{\n single_float:3.1416^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_float:3.1416~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "double", + expr: "TestAllTypes{single_double: 6.022e23}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleDouble: 6.022e23, + }, + }, + }, + ast: "TestAllTypes{\n single_double:6.022e+23^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_double:6.022e+23~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "bool", + expr: "TestAllTypes{single_bool: true}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleBool: true, + }, + }, + }, + ast: "TestAllTypes{\n single_bool:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_bool:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "string", + expr: "TestAllTypes{single_string: 'foo'}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleString: "foo", + }, + }, + }, + ast: 'TestAllTypes{\n single_string:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_string:"foo"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "bytes", + expr: "TestAllTypes{single_bytes: b'\\377'}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleBytes: "/w==", + }, + }, + }, + ast: 'TestAllTypes{\n single_bytes:b"\\xff"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_bytes:b"\\xff"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + { + name: "literal_wellknown", + tests: [ + { + original: { + name: "any", + expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 1}}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleAny: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 1, + }, + }, + }, + }, + ast: "TestAllTypes{\n single_any:TestAllTypes{\n single_int32:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{\n single_int32:1~int\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "duration", + expr: "TestAllTypes{single_duration: duration('123s')}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleDuration: "123s", + }, + }, + }, + ast: 'TestAllTypes{\n single_duration:duration(\n "123s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_duration:duration(\n "123s"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "timestamp", + expr: "TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleTimestamp: "2009-02-13T23:31:30Z", + }, + }, + }, + ast: 'TestAllTypes{\n single_timestamp:timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_timestamp:timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "struct", + expr: "TestAllTypes{single_struct: {'one': 1, 'two': 2}}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleStruct: { one: 1, two: 2 }, + }, + }, + }, + ast: 'TestAllTypes{\n single_struct:{\n "one"^#*expr.Constant_StringValue#:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#,\n "two"^#*expr.Constant_StringValue#:2^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_struct:{\n "one"~string:1~int,\n "two"~string:2~int\n }~map(string, int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "value", + expr: "TestAllTypes{single_value: 'foo'}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleValue: "foo", + }, + }, + }, + ast: 'TestAllTypes{\n single_value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:"foo"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "int64_wrapper", + expr: "TestAllTypes{single_int64_wrapper: -321}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt64Wrapper: "-321", + }, + }, + }, + ast: "TestAllTypes{\n single_int64_wrapper:-321^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:-321~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "int32_wrapper", + expr: "TestAllTypes{single_int32_wrapper: -456}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32Wrapper: -456, + }, + }, + }, + ast: "TestAllTypes{\n single_int32_wrapper:-456^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:-456~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "double_wrapper", + expr: "TestAllTypes{single_double_wrapper: 2.71828}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleDoubleWrapper: 2.71828, + }, + }, + }, + ast: "TestAllTypes{\n single_double_wrapper:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:2.71828~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "float_wrapper", + expr: "TestAllTypes{single_float_wrapper: 2.99792e8}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleFloatWrapper: 299792000, + }, + }, + }, + ast: "TestAllTypes{\n single_float_wrapper:2.99792e+08^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:2.99792e+08~double\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "uint64_wrapper", + expr: "TestAllTypes{single_uint64_wrapper: 8675309u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint64Wrapper: "8675309", + }, + }, + }, + ast: "TestAllTypes{\n single_uint64_wrapper:8675309u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:8675309u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "uint32_wrapper", + expr: "TestAllTypes{single_uint32_wrapper: 987u}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleUint32Wrapper: 987, + }, + }, + }, + ast: "TestAllTypes{\n single_uint32_wrapper:987u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:987u~uint\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "string_wrapper", + expr: "TestAllTypes{single_string_wrapper: 'hubba'}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleStringWrapper: "hubba", + }, + }, + }, + ast: 'TestAllTypes{\n single_string_wrapper:"hubba"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:"hubba"~string\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "bool_wrapper", + expr: "TestAllTypes{single_bool_wrapper: true}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleBoolWrapper: true, + }, + }, + }, + ast: "TestAllTypes{\n single_bool_wrapper:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:true~bool\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + { + original: { + name: "bytes_wrapper", + expr: "TestAllTypes{single_bytes_wrapper: b'\\301\\103'}", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleBytesWrapper: "wUM=", + }, + }, + }, + ast: 'TestAllTypes{\n single_bytes_wrapper:b"\\xc1C"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:b"\\xc1C"~bytes\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes', + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + { + name: "singular_bind", + tests: [ + { + original: { + name: "int32", + expr: "x.single_int32", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt32: 17, + }, + }, + }, + }, + value: { int64Value: "17" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.single_int32^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto3.TestAllTypes^x.single_int32~int", + type: "int", + }, + { + original: { + name: "int64", + expr: "x.single_int64", + typeEnv: [ + { + name: "x", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt64: "-99", + }, + }, + }, + }, + value: { int64Value: "-99" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#", + checkedAst: + "x~cel.expr.conformance.proto3.TestAllTypes^x.single_int64~int", + type: "int", + }, + ], + }, + { + name: "empty_field", + tests: [ + { + original: { + name: "scalar", + expr: "TestAllTypes{}.single_fixed32", + container: "cel.expr.conformance.proto3", + value: { uint64Value: "0" }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_fixed32^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_fixed32~uint", + type: "uint", + }, + { + original: { + name: "nested_message", + expr: "TestAllTypes{}.single_nested_message", + container: "cel.expr.conformance.proto3", + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes.NestedMessage", + }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~cel.expr.conformance.proto3.TestAllTypes.NestedMessage", + type: "cel.expr.conformance.proto3.TestAllTypes.NestedMessage", + }, + { + original: { + name: "nested_message_subfield", + expr: "TestAllTypes{}.single_nested_message.bb", + container: "cel.expr.conformance.proto3", + value: { int64Value: "0" }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message^#*expr.Expr_SelectExpr#.bb^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~cel.expr.conformance.proto3.TestAllTypes.NestedMessage.bb~int", + type: "int", + }, + { + original: { + name: "wkt", + expr: "TestAllTypes{}.single_int64_wrapper", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper~wrapper(int)", + type: "wrapper(int)", + }, + { + original: { + name: "repeated_scalar", + expr: "TestAllTypes{}.repeated_int64", + container: "cel.expr.conformance.proto3", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int64~list(int)", + type: "list(int)", + }, + { + original: { + name: "repeated_enum", + expr: "TestAllTypes{}.repeated_nested_enum", + container: "cel.expr.conformance.proto3", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)", + type: "list(int)", + }, + { + original: { + name: "repeated_nested", + expr: "TestAllTypes{}.repeated_nested_message", + container: "cel.expr.conformance.proto3", + value: { listValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)", + type: "list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)", + }, + { + original: { + name: "map", + expr: "TestAllTypes{}.map_string_string", + container: "cel.expr.conformance.proto3", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~map(string, string)", + type: "map(string, string)", + }, + ], + }, + { + name: "has", + tests: [ + { + original: { + name: "undefined", + expr: "has(TestAllTypes{}.no_such_field)", + disableCheck: true, + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "no_such_field" }] }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.no_such_field~test-only~^#*expr.Expr_SelectExpr#", + error: + "ERROR: \u003cinput\u003e:1:4: undefined field 'no_such_field'\n | has(TestAllTypes{}.no_such_field)\n | ...^", + }, + { + original: { + name: "repeated_none_implicit", + expr: "has(TestAllTypes{}.repeated_int32)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "repeated_none_explicit", + expr: "has(TestAllTypes{repeated_int32: []}.repeated_int32)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n repeated_int32:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "repeated_one", + expr: "has(TestAllTypes{repeated_int32: [1]}.repeated_int32)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[\n 1~int\n ]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "repeated_many", + expr: "has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n repeated_int32:[\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.repeated_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n repeated_int32:[\n 1~int,\n 2~int,\n 3~int\n ]~list(int)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "map_none_implicit", + expr: "has(TestAllTypes{}.map_string_string)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool", + type: "bool", + }, + { + original: { + name: "map_none_explicit", + expr: "has(TestAllTypes{map_string_string: {}}.map_string_string)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n map_string_string:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{}~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool", + type: "bool", + }, + { + original: { + name: "map_one_default", + expr: "has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: 'TestAllTypes{\n map_string_string:{\n "MT"^#*expr.Constant_StringValue#:""^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n "MT"~string:""~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool', + type: "bool", + }, + { + original: { + name: "map_one", + expr: "has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: 'TestAllTypes{\n map_string_string:{\n "one"^#*expr.Constant_StringValue#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n "one"~string:"uno"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool', + type: "bool", + }, + { + original: { + name: "map_many", + expr: "has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: 'TestAllTypes{\n map_string_string:{\n "one"^#*expr.Constant_StringValue#:"uno"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n "two"^#*expr.Constant_StringValue#:"dos"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.map_string_string~test-only~^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n map_string_string:{\n "one"~string:"uno"~string,\n "two"~string:"dos"~string\n }~map(string, string)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_string_string~test-only~~bool', + type: "bool", + }, + { + original: { + name: "single_unset", + expr: "has(TestAllTypes{}.single_int32)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "single_set", + expr: "has(TestAllTypes{single_int32: 16}.single_int32)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_int32:16^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32:16~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "single_set_to_default", + expr: "has(TestAllTypes{single_int32: 0}.single_int32)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n single_int32:0^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int32~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int32:0~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int32~test-only~~bool", + type: "bool", + }, + { + original: { + name: "single_message_unset", + expr: "has(TestAllTypes{}.standalone_message)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "single_message_set", + expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{bb: 123}}.standalone_message)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{\n bb:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{\n bb:123~int\n }~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "single_message_set_to_default", + expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n standalone_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "single_enum_unset", + expr: "has(TestAllTypes{}.standalone_enum)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool", + type: "bool", + }, + { + original: { + name: "single_enum_set", + expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAR^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAR\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool", + type: "bool", + }, + { + original: { + name: "single_enum_set_zero", + expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n standalone_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.standalone_enum~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n standalone_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~test-only~~bool", + type: "bool", + }, + { + original: { + name: "oneof_unset", + expr: "has(TestAllTypes{}.single_nested_message)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "oneof_other_set", + expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + ast: "TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.BAZ^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.BAZ\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "oneof_set", + expr: "has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_nested_message:TestAllTypes.NestedMessage{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_message~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_nested_message:cel.expr.conformance.proto3.TestAllTypes.NestedMessage{}~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^cel.expr.conformance.proto3.TestAllTypes.NestedMessage\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_message~test-only~~bool", + type: "bool", + }, + { + original: { + name: "oneof_set_default", + expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_nested_enum:TestAllTypes^#*expr.Expr_IdentExpr#.NestedEnum^#*expr.Expr_SelectExpr#.FOO^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_nested_enum~test-only~^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_nested_enum:cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO~int^cel.expr.conformance.proto3.TestAllTypes.NestedEnum.FOO\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_nested_enum~test-only~~bool", + type: "bool", + }, + ], + }, + { + name: "set_null", + tests: [ + { + original: { + name: "single_message", + expr: "TestAllTypes{single_nested_message: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_nested_message:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_nested_message:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "single_any", + expr: "TestAllTypes{single_any: null}.single_any", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{\n single_any:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "single_value", + expr: "TestAllTypes{single_value: null}.single_value", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{\n single_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:null~null\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "single_duration", + expr: "TestAllTypes{single_duration: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_duration:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_duration:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "single_timestamp", + expr: "TestAllTypes{single_timestamp: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_timestamp:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_timestamp:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "single_scalar", + expr: "TestAllTypes{single_bool: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n single_bool:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:25: expected type of field 'single_bool' is 'bool' but provided type is 'null'\n | TestAllTypes{single_bool: null} == TestAllTypes{}\n | ........................^", + }, + { + original: { + name: "repeated", + expr: "TestAllTypes{repeated_int32: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n repeated_int32:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:28: expected type of field 'repeated_int32' is 'list(int)' but provided type is 'null'\n | TestAllTypes{repeated_int32: null} == TestAllTypes{}\n | ...........................^", + }, + { + original: { + name: "map", + expr: "TestAllTypes{map_string_string: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n map_string_string:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:31: expected type of field 'map_string_string' is 'map(string, string)' but provided type is 'null'\n | TestAllTypes{map_string_string: null} == TestAllTypes{}\n | ..............................^", + }, + { + original: { + name: "list_value", + expr: "TestAllTypes{list_value: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n list_value:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:24: expected type of field 'list_value' is 'list(dyn)' but provided type is 'null'\n | TestAllTypes{list_value: null} == TestAllTypes{}\n | .......................^", + }, + { + original: { + name: "single_struct", + expr: "TestAllTypes{single_struct: null} == TestAllTypes{}", + disableCheck: true, + container: "cel.expr.conformance.proto3", + evalError: { errors: [{ message: "unsupported field type" }] }, + }, + ast: "_==_(\n TestAllTypes{\n single_struct:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + error: + "ERROR: \u003cinput\u003e:1:27: expected type of field 'single_struct' is 'map(string, dyn)' but provided type is 'null'\n | TestAllTypes{single_struct: null} == TestAllTypes{}\n | ..........................^", + }, + ], + }, + { + name: "quoted_fields", + tests: [ + { + original: { + name: "set_field", + expr: "TestAllTypes{`in`: true} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: false }, + }, + error: + "ERROR: set_field:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true} == TestAllTypes{}\n | .............^", + }, + { + original: { + name: "get_field", + expr: "TestAllTypes{`in`: true}.`in`", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + error: + "ERROR: get_field:1:14: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .............^\nERROR: get_field:1:26: unsupported syntax: '`'\n | TestAllTypes{`in`: true}.`in`\n | .........................^", + }, + ], + }, + ], + }, + { + name: "string", + suites: [ + { + name: "size", + tests: [ + { + original: { + name: "empty", + expr: "size('')", + value: { int64Value: "0" }, + }, + ast: 'size(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'size(\n ""~string\n)~int^size_string', + type: "int", + }, + { + original: { + name: "one_ascii", + expr: "size('A')", + value: { int64Value: "1" }, + }, + ast: 'size(\n "A"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'size(\n "A"~string\n)~int^size_string', + type: "int", + }, + { + original: { + name: "one_unicode", + expr: "size('ÿ')", + value: { int64Value: "1" }, + }, + ast: 'size(\n "ÿ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'size(\n "ÿ"~string\n)~int^size_string', + type: "int", + }, + { + original: { + name: "ascii", + expr: "size('four')", + value: { int64Value: "4" }, + }, + ast: 'size(\n "four"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'size(\n "four"~string\n)~int^size_string', + type: "int", + }, + { + original: { + name: "unicode", + expr: "size('πέντε')", + value: { int64Value: "5" }, + }, + ast: 'size(\n "πέντε"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'size(\n "πέντε"~string\n)~int^size_string', + type: "int", + }, + { + original: { + name: "bytes_empty", + expr: "size(b'')", + value: { int64Value: "0" }, + }, + ast: 'size(\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'size(\n b""~bytes\n)~int^size_bytes', + type: "int", + }, + { + original: { + name: "bytes", + expr: "size(b'abc')", + value: { int64Value: "3" }, + }, + ast: 'size(\n b"abc"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'size(\n b"abc"~bytes\n)~int^size_bytes', + type: "int", + }, + ], + }, + { + name: "starts_with", + tests: [ + { + original: { + name: "basic_true", + expr: "'foobar'.startsWith('foo')", + value: { boolValue: true }, + }, + ast: '"foobar"^#*expr.Constant_StringValue#.startsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"foobar"~string.startsWith(\n "foo"~string\n)~bool^starts_with_string', + type: "bool", + }, + { + original: { + name: "basic_false", + expr: "'foobar'.startsWith('bar')", + value: { boolValue: false }, + }, + ast: '"foobar"^#*expr.Constant_StringValue#.startsWith(\n "bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"foobar"~string.startsWith(\n "bar"~string\n)~bool^starts_with_string', + type: "bool", + }, + { + original: { + name: "empty_target", + expr: "''.startsWith('foo')", + value: { boolValue: false }, + }, + ast: '""^#*expr.Constant_StringValue#.startsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '""~string.startsWith(\n "foo"~string\n)~bool^starts_with_string', + type: "bool", + }, + { + original: { + name: "empty_arg", + expr: "'foobar'.startsWith('')", + value: { boolValue: true }, + }, + ast: '"foobar"^#*expr.Constant_StringValue#.startsWith(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"foobar"~string.startsWith(\n ""~string\n)~bool^starts_with_string', + type: "bool", + }, + { + original: { + name: "empty_empty", + expr: "''.startsWith('')", + value: { boolValue: true }, + }, + ast: '""^#*expr.Constant_StringValue#.startsWith(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '""~string.startsWith(\n ""~string\n)~bool^starts_with_string', + type: "bool", + }, + { + original: { + name: "unicode", + expr: "'завтра'.startsWith('за')", + value: { boolValue: true }, + }, + ast: '"завтра"^#*expr.Constant_StringValue#.startsWith(\n "за"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"завтра"~string.startsWith(\n "за"~string\n)~bool^starts_with_string', + type: "bool", + }, + { + original: { + name: "unicode_smp", + expr: "'🐱😀😛'.startsWith('🐱')", + value: { boolValue: true }, + }, + ast: '"🐱😀😛"^#*expr.Constant_StringValue#.startsWith(\n "🐱"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"🐱😀😛"~string.startsWith(\n "🐱"~string\n)~bool^starts_with_string', + type: "bool", + }, + ], + }, + { + name: "ends_with", + tests: [ + { + original: { + name: "basic_true", + expr: "'foobar'.endsWith('bar')", + value: { boolValue: true }, + }, + ast: '"foobar"^#*expr.Constant_StringValue#.endsWith(\n "bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"foobar"~string.endsWith(\n "bar"~string\n)~bool^ends_with_string', + type: "bool", + }, + { + original: { + name: "basic_false", + expr: "'foobar'.endsWith('foo')", + value: { boolValue: false }, + }, + ast: '"foobar"^#*expr.Constant_StringValue#.endsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"foobar"~string.endsWith(\n "foo"~string\n)~bool^ends_with_string', + type: "bool", + }, + { + original: { + name: "empty_target", + expr: "''.endsWith('foo')", + value: { boolValue: false }, + }, + ast: '""^#*expr.Constant_StringValue#.endsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '""~string.endsWith(\n "foo"~string\n)~bool^ends_with_string', + type: "bool", + }, + { + original: { + name: "empty_arg", + expr: "'foobar'.endsWith('')", + value: { boolValue: true }, + }, + ast: '"foobar"^#*expr.Constant_StringValue#.endsWith(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"foobar"~string.endsWith(\n ""~string\n)~bool^ends_with_string', + type: "bool", + }, + { + original: { + name: "empty_empty", + expr: "''.endsWith('')", + value: { boolValue: true }, + }, + ast: '""^#*expr.Constant_StringValue#.endsWith(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '""~string.endsWith(\n ""~string\n)~bool^ends_with_string', + type: "bool", + }, + { + original: { + name: "unicode", + expr: "'forté'.endsWith('té')", + value: { boolValue: true }, + }, + ast: '"forté"^#*expr.Constant_StringValue#.endsWith(\n "té"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"forté"~string.endsWith(\n "té"~string\n)~bool^ends_with_string', + type: "bool", + }, + { + original: { + name: "unicode_smp", + expr: "'🐱😀😛'.endsWith('😛')", + value: { boolValue: true }, + }, + ast: '"🐱😀😛"^#*expr.Constant_StringValue#.endsWith(\n "😛"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"🐱😀😛"~string.endsWith(\n "😛"~string\n)~bool^ends_with_string', + type: "bool", + }, + ], + }, + { + name: "matches", + tests: [ + { + original: { + name: "basic", + expr: "'hubba'.matches('ubb')", + value: { boolValue: true }, + }, + ast: '"hubba"^#*expr.Constant_StringValue#.matches(\n "ubb"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"hubba"~string.matches(\n "ubb"~string\n)~bool^matches_string', + type: "bool", + }, + { + original: { + name: "empty_target", + expr: "''.matches('foo|bar')", + value: { boolValue: false }, + }, + ast: '""^#*expr.Constant_StringValue#.matches(\n "foo|bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '""~string.matches(\n "foo|bar"~string\n)~bool^matches_string', + type: "bool", + }, + { + original: { + name: "empty_arg", + expr: "'cows'.matches('')", + value: { boolValue: true }, + }, + ast: '"cows"^#*expr.Constant_StringValue#.matches(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"cows"~string.matches(\n ""~string\n)~bool^matches_string', + type: "bool", + }, + { + original: { + name: "empty_empty", + expr: "''.matches('')", + value: { boolValue: true }, + }, + ast: '""^#*expr.Constant_StringValue#.matches(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '""~string.matches(\n ""~string\n)~bool^matches_string', + type: "bool", + }, + { + original: { + name: "re_concat", + expr: "'abcd'.matches('bc')", + value: { boolValue: true }, + }, + ast: '"abcd"^#*expr.Constant_StringValue#.matches(\n "bc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"abcd"~string.matches(\n "bc"~string\n)~bool^matches_string', + type: "bool", + }, + { + original: { + name: "re_alt", + expr: "'grey'.matches('gr(a|e)y')", + value: { boolValue: true }, + }, + ast: '"grey"^#*expr.Constant_StringValue#.matches(\n "gr(a|e)y"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"grey"~string.matches(\n "gr(a|e)y"~string\n)~bool^matches_string', + type: "bool", + }, + { + original: { + name: "re_rep", + expr: "'banana'.matches('ba(na)*')", + value: { boolValue: true }, + }, + ast: '"banana"^#*expr.Constant_StringValue#.matches(\n "ba(na)*"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"banana"~string.matches(\n "ba(na)*"~string\n)~bool^matches_string', + type: "bool", + }, + { + original: { + name: "unicode", + expr: "'mañana'.matches('a+ñ+a+')", + value: { boolValue: true }, + }, + ast: '"mañana"^#*expr.Constant_StringValue#.matches(\n "a+ñ+a+"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"mañana"~string.matches(\n "a+ñ+a+"~string\n)~bool^matches_string', + type: "bool", + }, + { + original: { + name: "unicode_smp", + expr: "'🐱😀😀'.matches('(a|😀){2}')", + value: { boolValue: true }, + }, + ast: '"🐱😀😀"^#*expr.Constant_StringValue#.matches(\n "(a|😀){2}"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"🐱😀😀"~string.matches(\n "(a|😀){2}"~string\n)~bool^matches_string', + type: "bool", + }, + ], + }, + { + name: "concatenation", + tests: [ + { + original: { + name: "concat_true", + expr: "'he' + 'llo'", + value: { stringValue: "hello" }, + }, + ast: '_+_(\n "he"^#*expr.Constant_StringValue#,\n "llo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n "he"~string,\n "llo"~string\n)~string^add_string', + type: "string", + }, + { + original: { + name: "concat_with_spaces", + expr: "'hello' + ' ' == 'hello'", + value: { boolValue: false }, + }, + ast: '_==_(\n _+_(\n "hello"^#*expr.Constant_StringValue#,\n " "^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "hello"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _+_(\n "hello"~string,\n " "~string\n )~string^add_string,\n "hello"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "concat_empty_string_beginning", + expr: "'' + 'abc'", + value: { stringValue: "abc" }, + }, + ast: '_+_(\n ""^#*expr.Constant_StringValue#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n ""~string,\n "abc"~string\n)~string^add_string', + type: "string", + }, + { + original: { + name: "concat_empty_string_end", + expr: "'abc' + ''", + value: { stringValue: "abc" }, + }, + ast: '_+_(\n "abc"^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n "abc"~string,\n ""~string\n)~string^add_string', + type: "string", + }, + { + original: { + name: "concat_empty_with_empty", + expr: "'' + ''", + value: { stringValue: "" }, + }, + ast: '_+_(\n ""^#*expr.Constant_StringValue#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n ""~string,\n ""~string\n)~string^add_string', + type: "string", + }, + { + original: { + name: "unicode_unicode", + expr: "'¢' + 'ÿ' + 'Ȁ'", + value: { stringValue: "¢ÿȀ" }, + }, + ast: '_+_(\n _+_(\n "¢"^#*expr.Constant_StringValue#,\n "ÿ"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "Ȁ"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n _+_(\n "¢"~string,\n "ÿ"~string\n )~string^add_string,\n "Ȁ"~string\n)~string^add_string', + type: "string", + }, + { + original: { + name: "ascii_unicode", + expr: "'r' + 'ô' + 'le'", + value: { stringValue: "rôle" }, + }, + ast: '_+_(\n _+_(\n "r"^#*expr.Constant_StringValue#,\n "ô"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "le"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n _+_(\n "r"~string,\n "ô"~string\n )~string^add_string,\n "le"~string\n)~string^add_string', + type: "string", + }, + { + original: { + name: "ascii_unicode_unicode_smp", + expr: "'a' + 'ÿ' + '🐱'", + value: { stringValue: "aÿ🐱" }, + }, + ast: '_+_(\n _+_(\n "a"^#*expr.Constant_StringValue#,\n "ÿ"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "🐱"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n _+_(\n "a"~string,\n "ÿ"~string\n )~string^add_string,\n "🐱"~string\n)~string^add_string', + type: "string", + }, + { + original: { + name: "empty_unicode", + expr: "'' + 'Ω' + ''", + value: { stringValue: "Ω" }, + }, + ast: '_+_(\n _+_(\n ""^#*expr.Constant_StringValue#,\n "Ω"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n _+_(\n ""~string,\n "Ω"~string\n )~string^add_string,\n ""~string\n)~string^add_string', + type: "string", + }, + ], + }, + { + name: "contains", + tests: [ + { + original: { + name: "contains_true", + expr: "'hello'.contains('he')", + value: { boolValue: true }, + }, + ast: '"hello"^#*expr.Constant_StringValue#.contains(\n "he"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"hello"~string.contains(\n "he"~string\n)~bool^contains_string', + type: "bool", + }, + { + original: { + name: "contains_empty", + expr: "'hello'.contains('')", + value: { boolValue: true }, + }, + ast: '"hello"^#*expr.Constant_StringValue#.contains(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"hello"~string.contains(\n ""~string\n)~bool^contains_string', + type: "bool", + }, + { + original: { + name: "contains_false", + expr: "'hello'.contains('ol')", + value: { boolValue: false }, + }, + ast: '"hello"^#*expr.Constant_StringValue#.contains(\n "ol"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"hello"~string.contains(\n "ol"~string\n)~bool^contains_string', + type: "bool", + }, + { + original: { + name: "contains_multiple", + expr: "'abababc'.contains('ababc')", + value: { boolValue: true }, + }, + ast: '"abababc"^#*expr.Constant_StringValue#.contains(\n "ababc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"abababc"~string.contains(\n "ababc"~string\n)~bool^contains_string', + type: "bool", + }, + { + original: { + name: "contains_unicode", + expr: "'Straße'.contains('aß')", + value: { boolValue: true }, + }, + ast: '"Straße"^#*expr.Constant_StringValue#.contains(\n "aß"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"Straße"~string.contains(\n "aß"~string\n)~bool^contains_string', + type: "bool", + }, + { + original: { + name: "contains_unicode_smp", + expr: "'🐱😀😁'.contains('😀')", + value: { boolValue: true }, + }, + ast: '"🐱😀😁"^#*expr.Constant_StringValue#.contains(\n "😀"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"🐱😀😁"~string.contains(\n "😀"~string\n)~bool^contains_string', + type: "bool", + }, + { + original: { + name: "empty_contains", + expr: "''.contains('something')", + value: { boolValue: false }, + }, + ast: '""^#*expr.Constant_StringValue#.contains(\n "something"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '""~string.contains(\n "something"~string\n)~bool^contains_string', + type: "bool", + }, + { + original: { + name: "empty_empty", + expr: "''.contains('')", + value: { boolValue: true }, + }, + ast: '""^#*expr.Constant_StringValue#.contains(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '""~string.contains(\n ""~string\n)~bool^contains_string', + type: "bool", + }, + ], + }, + { + name: "bytes_concat", + tests: [ + { + original: { + name: "concat", + expr: "b'abc' + b'def'", + value: { bytesValue: "YWJjZGVm" }, + }, + ast: '_+_(\n b"abc"^#*expr.Constant_BytesValue#,\n b"def"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n b"abc"~bytes,\n b"def"~bytes\n)~bytes^add_bytes', + type: "bytes", + }, + { + original: { + name: "left_unit", + expr: "b'' + b'\\xffoo'", + value: { bytesValue: "/29v" }, + }, + ast: '_+_(\n b""^#*expr.Constant_BytesValue#,\n b"\\xffoo"^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n b""~bytes,\n b"\\xffoo"~bytes\n)~bytes^add_bytes', + type: "bytes", + }, + { + original: { + name: "right_unit", + expr: "b'zxy' + b''", + value: { bytesValue: "enh5" }, + }, + ast: '_+_(\n b"zxy"^#*expr.Constant_BytesValue#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n b"zxy"~bytes,\n b""~bytes\n)~bytes^add_bytes', + type: "bytes", + }, + { + original: { + name: "empty_empty", + expr: "b'' + b''", + value: { bytesValue: "" }, + }, + ast: '_+_(\n b""^#*expr.Constant_BytesValue#,\n b""^#*expr.Constant_BytesValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: '_+_(\n b""~bytes,\n b""~bytes\n)~bytes^add_bytes', + type: "bytes", + }, + ], + }, + ], + }, + { + name: "string_ext", + suites: [ + { + name: "char_at", + tests: [ + { + original: { + name: "middle_index", + expr: "'tacocat'.charAt(3)", + value: { stringValue: "o" }, + }, + ast: '"tacocat"^#*expr.Constant_StringValue#.charAt(\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"tacocat"~string.charAt(\n 3~int\n)~string^string_char_at_int', + type: "string", + }, + { + original: { + name: "end_index", + expr: "'tacocat'.charAt(7)", + value: { stringValue: "" }, + }, + ast: '"tacocat"^#*expr.Constant_StringValue#.charAt(\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"tacocat"~string.charAt(\n 7~int\n)~string^string_char_at_int', + type: "string", + }, + { + original: { + name: "multiple", + expr: "'©αT'.charAt(0) == '©' \u0026\u0026 '©αT'.charAt(1) == 'α' \u0026\u0026 '©αT'.charAt(2) == 'T'", + }, + ast: '_\u0026\u0026_(\n _\u0026\u0026_(\n _==_(\n "©αT"^#*expr.Constant_StringValue#.charAt(\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "©"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n _==_(\n "©αT"^#*expr.Constant_StringValue#.charAt(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "α"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n _==_(\n "©αT"^#*expr.Constant_StringValue#.charAt(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "T"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u0026\u0026_(\n _\u0026\u0026_(\n _==_(\n "©αT"~string.charAt(\n 0~int\n )~string^string_char_at_int,\n "©"~string\n )~bool^equals,\n _==_(\n "©αT"~string.charAt(\n 1~int\n )~string^string_char_at_int,\n "α"~string\n )~bool^equals\n )~bool^logical_and,\n _==_(\n "©αT"~string.charAt(\n 2~int\n )~string^string_char_at_int,\n "T"~string\n )~bool^equals\n)~bool^logical_and', + type: "bool", + }, + ], + }, + { + name: "index_of", + tests: [ + { + original: { + name: "empty_index", + expr: "'tacocat'.indexOf('')", + value: { int64Value: "0" }, + }, + ast: '"tacocat"^#*expr.Constant_StringValue#.indexOf(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"tacocat"~string.indexOf(\n ""~string\n)~int^string_index_of_string', + type: "int", + }, + { + original: { + name: "string_index", + expr: "'tacocat'.indexOf('ac')", + value: { int64Value: "1" }, + }, + ast: '"tacocat"^#*expr.Constant_StringValue#.indexOf(\n "ac"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"tacocat"~string.indexOf(\n "ac"~string\n)~int^string_index_of_string', + type: "int", + }, + { + original: { + name: "nomatch", + expr: "'tacocat'.indexOf('none') == -1", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n "none"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.indexOf(\n "none"~string\n )~int^string_index_of_string,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "empty_index", + expr: "'tacocat'.indexOf('', 3) == 3", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n ""^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.indexOf(\n ""~string,\n 3~int\n )~int^string_index_of_string_int,\n 3~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "char_index", + expr: "'tacocat'.indexOf('a', 3) == 5", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n "a"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.indexOf(\n "a"~string,\n 3~int\n )~int^string_index_of_string_int,\n 5~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_index", + expr: "'tacocat'.indexOf('at', 3) == 5", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n "at"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.indexOf(\n "at"~string,\n 3~int\n )~int^string_index_of_string_int,\n 5~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_char", + expr: "'ta©o©αT'.indexOf('©') == 2", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.indexOf(\n "©"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.indexOf(\n "©"~string\n )~int^string_index_of_string,\n 2~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_char_index", + expr: "'ta©o©αT'.indexOf('©', 3) == 4", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.indexOf(\n "©"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.indexOf(\n "©"~string,\n 3~int\n )~int^string_index_of_string_int,\n 4~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_string_index", + expr: "'ta©o©αT'.indexOf('©αT', 3) == 4", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.indexOf(\n "©αT"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.indexOf(\n "©αT"~string,\n 3~int\n )~int^string_index_of_string_int,\n 4~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_string_nomatch_index", + expr: "'ta©o©αT'.indexOf('©α', 5) == -1", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.indexOf(\n "©α"^#*expr.Constant_StringValue#,\n 5^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.indexOf(\n "©α"~string,\n 5~int\n )~int^string_index_of_string_int,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { name: "char_index", expr: "'ijk'.indexOf('k') == 2" }, + ast: '_==_(\n "ijk"^#*expr.Constant_StringValue#.indexOf(\n "k"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ijk"~string.indexOf(\n "k"~string\n )~int^string_index_of_string,\n 2~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_with_space_fullmatch", + expr: "'hello wello'.indexOf('hello wello') == 0", + }, + ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.indexOf(\n "hello wello"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello wello"~string.indexOf(\n "hello wello"~string\n )~int^string_index_of_string,\n 0~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_with_space_index", + expr: "'hello wello'.indexOf('ello', 6) == 7", + }, + ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.indexOf(\n "ello"^#*expr.Constant_StringValue#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello wello"~string.indexOf(\n "ello"~string,\n 6~int\n )~int^string_index_of_string_int,\n 7~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_nomatch_index", + expr: "'hello wello'.indexOf('elbo room!!') == -1", + }, + ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.indexOf(\n "elbo room!!"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello wello"~string.indexOf(\n "elbo room!!"~string\n )~int^string_index_of_string,\n -1~int\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "last_index_of", + tests: [ + { + original: { + name: "empty_string", + expr: "''.lastIndexOf('@@') == -1", + }, + ast: '_==_(\n ""^#*expr.Constant_StringValue#.lastIndexOf(\n "@@"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n ""~string.lastIndexOf(\n "@@"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "empty_argument", + expr: "'tacocat'.lastIndexOf('') == 7", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 7^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.lastIndexOf(\n ""~string\n )~int^string_last_index_of_string,\n 7~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string", + expr: "'tacocat'.lastIndexOf('at') == 5", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "at"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 5^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.lastIndexOf(\n "at"~string\n )~int^string_last_index_of_string,\n 5~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_nomatch", + expr: "'tacocat'.lastIndexOf('none') == -1", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "none"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.lastIndexOf(\n "none"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "empty_index", + expr: "'tacocat'.lastIndexOf('', 3) == 3", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n ""^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.lastIndexOf(\n ""~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 3~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "char_index", + expr: "'tacocat'.lastIndexOf('a', 3) == 1", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "a"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.lastIndexOf(\n "a"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_char", + expr: "'ta©o©αT'.lastIndexOf('©') == 4", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.lastIndexOf(\n "©"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.lastIndexOf(\n "©"~string\n )~int^string_last_index_of_string,\n 4~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_char_index", + expr: "'ta©o©αT'.lastIndexOf('©', 3) == 2", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.lastIndexOf(\n "©"^#*expr.Constant_StringValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.lastIndexOf(\n "©"~string,\n 3~int\n )~int^string_last_index_of_string_int,\n 2~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_string_index", + expr: "'ta©o©αT'.lastIndexOf('©α', 4) == 4", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.lastIndexOf(\n "©α"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 4^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.lastIndexOf(\n "©α"~string,\n 4~int\n )~int^string_last_index_of_string_int,\n 4~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_with_space_string_index", + expr: "'hello wello'.lastIndexOf('ello', 6) == 1", + }, + ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.lastIndexOf(\n "ello"^#*expr.Constant_StringValue#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello wello"~string.lastIndexOf(\n "ello"~string,\n 6~int\n )~int^string_last_index_of_string_int,\n 1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_with_space_string_nomatch", + expr: "'hello wello'.lastIndexOf('low') == -1", + }, + ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.lastIndexOf(\n "low"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello wello"~string.lastIndexOf(\n "low"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_with_space_string_with_space_nomatch", + expr: "'hello wello'.lastIndexOf('elbo room!!') == -1", + }, + ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.lastIndexOf(\n "elbo room!!"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello wello"~string.lastIndexOf(\n "elbo room!!"~string\n )~int^string_last_index_of_string,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "string_with_space_fullmatch", + expr: "'hello wello'.lastIndexOf('hello wello') == 0", + }, + ast: '_==_(\n "hello wello"^#*expr.Constant_StringValue#.lastIndexOf(\n "hello wello"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello wello"~string.lastIndexOf(\n "hello wello"~string\n )~int^string_last_index_of_string,\n 0~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "repeated_string", + expr: "'bananananana'.lastIndexOf('nana', 7) == 6", + }, + ast: '_==_(\n "bananananana"^#*expr.Constant_StringValue#.lastIndexOf(\n "nana"^#*expr.Constant_StringValue#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 6^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "bananananana"~string.lastIndexOf(\n "nana"~string,\n 7~int\n )~int^string_last_index_of_string_int,\n 6~int\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "ascii_casing", + tests: [ + { + original: { + name: "lowerascii", + expr: "'TacoCat'.lowerAscii() == 'tacocat'", + }, + ast: '_==_(\n "TacoCat"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n "tacocat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "TacoCat"~string.lowerAscii()~string^string_lower_ascii,\n "tacocat"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "lowerascii_unicode", + expr: "'TacoCÆt'.lowerAscii() == 'tacocÆt'", + }, + ast: '_==_(\n "TacoCÆt"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n "tacocÆt"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "TacoCÆt"~string.lowerAscii()~string^string_lower_ascii,\n "tacocÆt"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "lowerascii_unicode_with_space", + expr: "'TacoCÆt Xii'.lowerAscii() == 'tacocÆt xii'", + }, + ast: '_==_(\n "TacoCÆt Xii"^#*expr.Constant_StringValue#.lowerAscii()^#*expr.Expr_CallExpr#,\n "tacocÆt xii"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "TacoCÆt Xii"~string.lowerAscii()~string^string_lower_ascii,\n "tacocÆt xii"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "upperascii", + expr: "'tacoCat'.upperAscii() == 'TACOCAT'", + }, + ast: '_==_(\n "tacoCat"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n "TACOCAT"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacoCat"~string.upperAscii()~string^string_upper_ascii,\n "TACOCAT"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "upperascii_unicode", + expr: "'tacoCαt'.upperAscii() == 'TACOCαT'", + }, + ast: '_==_(\n "tacoCαt"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n "TACOCαT"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacoCαt"~string.upperAscii()~string^string_upper_ascii,\n "TACOCαT"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "upperascii_unicode_with_space", + expr: "'TacoCÆt Xii'.upperAscii() == 'TACOCÆT XII'", + }, + ast: '_==_(\n "TacoCÆt Xii"^#*expr.Constant_StringValue#.upperAscii()^#*expr.Expr_CallExpr#,\n "TACOCÆT XII"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "TacoCÆt Xii"~string.upperAscii()~string^string_upper_ascii,\n "TACOCÆT XII"~string\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "replace", + tests: [ + { + original: { + name: "no_placeholder", + expr: "'12 days 12 hours'.replace('{0}', '2') == '12 days 12 hours'", + }, + ast: '_==_(\n "12 days 12 hours"^#*expr.Constant_StringValue#.replace(\n "{0}"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "12 days 12 hours"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "12 days 12 hours"~string.replace(\n "{0}"~string,\n "2"~string\n )~string^string_replace_string_string,\n "12 days 12 hours"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "basic", + expr: "'{0} days {0} hours'.replace('{0}', '2') == '2 days 2 hours'", + }, + ast: '_==_(\n "{0} days {0} hours"^#*expr.Constant_StringValue#.replace(\n "{0}"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "2 days 2 hours"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "{0} days {0} hours"~string.replace(\n "{0}"~string,\n "2"~string\n )~string^string_replace_string_string,\n "2 days 2 hours"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "chained", + expr: "'{0} days {0} hours'.replace('{0}', '2', 1).replace('{0}', '23') == '2 days 23 hours'", + }, + ast: '_==_(\n "{0} days {0} hours"^#*expr.Constant_StringValue#.replace(\n "{0}"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#.replace(\n "{0}"^#*expr.Constant_StringValue#,\n "23"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "2 days 23 hours"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "{0} days {0} hours"~string.replace(\n "{0}"~string,\n "2"~string,\n 1~int\n )~string^string_replace_string_string_int.replace(\n "{0}"~string,\n "23"~string\n )~string^string_replace_string_string,\n "2 days 23 hours"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode", + expr: "'1 ©αT taco'.replace('αT', 'o©α') == '1 ©o©α taco'", + }, + ast: '_==_(\n "1 ©αT taco"^#*expr.Constant_StringValue#.replace(\n "αT"^#*expr.Constant_StringValue#,\n "o©α"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "1 ©o©α taco"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "1 ©αT taco"~string.replace(\n "αT"~string,\n "o©α"~string\n )~string^string_replace_string_string,\n "1 ©o©α taco"~string\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "split", + tests: [ + { + original: { + name: "empty", + expr: "'hello world'.split(' ') == ['hello', 'world']", + }, + ast: '_==_(\n "hello world"^#*expr.Constant_StringValue#.split(\n " "^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "hello"^#*expr.Constant_StringValue#,\n "world"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello world"~string.split(\n " "~string\n )~list(string)^string_split_string,\n [\n "hello"~string,\n "world"~string\n ]~list(string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "zero_limit", + expr: "'hello world events!'.split(' ', 0) == []", + }, + ast: '_==_(\n "hello world events!"^#*expr.Constant_StringValue#.split(\n " "^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello world events!"~string.split(\n " "~string,\n 0~int\n )~list(string)^string_split_string_int,\n []~list(string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "one_limit", + expr: "'hello world events!'.split(' ', 1) == ['hello world events!']", + }, + ast: '_==_(\n "hello world events!"^#*expr.Constant_StringValue#.split(\n " "^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "hello world events!"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "hello world events!"~string.split(\n " "~string,\n 1~int\n )~list(string)^string_split_string_int,\n [\n "hello world events!"~string\n ]~list(string)\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_negative_limit", + expr: "'o©o©o©o'.split('©', -1) == ['o', 'o', 'o', 'o']", + }, + ast: '_==_(\n "o©o©o©o"^#*expr.Constant_StringValue#.split(\n "©"^#*expr.Constant_StringValue#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "o"^#*expr.Constant_StringValue#,\n "o"^#*expr.Constant_StringValue#,\n "o"^#*expr.Constant_StringValue#,\n "o"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "o©o©o©o"~string.split(\n "©"~string,\n -1~int\n )~list(string)^string_split_string_int,\n [\n "o"~string,\n "o"~string,\n "o"~string,\n "o"~string\n ]~list(string)\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "substring", + tests: [ + { + original: { + name: "start", + expr: "'tacocat'.substring(4) == 'cat'", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n 4~int\n )~string^string_substring_int,\n "cat"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "start_with_max_length", + expr: "'tacocat'.substring(7) == ''", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n 7~int\n )~string^string_substring_int,\n ""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "start_and_end", + expr: "'tacocat'.substring(0, 4) == 'taco'", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 0^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "taco"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n 0~int,\n 4~int\n )~string^string_substring_int_int,\n "taco"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "start_and_end_equal_value", + expr: "'tacocat'.substring(4, 4) == ''", + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#,\n 4^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n 4~int,\n 4~int\n )~string^string_substring_int_int,\n ""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_start_and_end", + expr: "'ta©o©αT'.substring(2, 6) == '©o©α'", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.substring(\n 2^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "©o©α"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.substring(\n 2~int,\n 6~int\n )~string^string_substring_int_int,\n "©o©α"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_start_and_end_equal_value", + expr: "'ta©o©αT'.substring(7, 7) == ''", + }, + ast: '_==_(\n "ta©o©αT"^#*expr.Constant_StringValue#.substring(\n 7^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "ta©o©αT"~string.substring(\n 7~int,\n 7~int\n )~string^string_substring_int_int,\n ""~string\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "trim", + tests: [ + { + original: { + name: "blank_spaces_escaped_chars", + expr: "' \\f\\n\\r\\t\\vtext '.trim() == 'text'", + }, + ast: '_==_(\n " \\f\\n\\r\\t\\vtext "^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "text"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n " \\f\\n\\r\\t\\vtext "~string.trim()~string^string_trim,\n "text"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_space_chars_1", + expr: "'\\u0085\\u00a0\\u1680text'.trim() == 'text'", + }, + ast: '_==_(\n "\\u0085\\u00a0\\u1680text"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "text"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "\\u0085\\u00a0\\u1680text"~string.trim()~string^string_trim,\n "text"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_space_chars_2", + expr: "'text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009'.trim() == 'text'", + }, + ast: '_==_(\n "text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "text"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009"~string.trim()~string^string_trim,\n "text"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_space_chars_3", + expr: "'\\u200atext\\u2028\\u2029\\u202F\\u205F\\u3000'.trim() == 'text'", + }, + ast: '_==_(\n "\\u200atext\\u2028\\u2029\\u202f\\u205f\\u3000"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "text"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "\\u200atext\\u2028\\u2029\\u202f\\u205f\\u3000"~string.trim()~string^string_trim,\n "text"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_no_trim", + expr: "'\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'.trim() == '\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'", + }, + ast: '_==_(\n "\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff"^#*expr.Constant_StringValue#.trim()^#*expr.Expr_CallExpr#,\n "\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff"~string.trim()~string^string_trim,\n "\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff"~string\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "join", + tests: [ + { + original: { + name: "empty_separator", + expr: "['x', 'y'].join() == 'xy'", + }, + ast: '_==_(\n [\n "x"^#*expr.Constant_StringValue#,\n "y"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#.join()^#*expr.Expr_CallExpr#,\n "xy"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n [\n "x"~string,\n "y"~string\n ]~list(string).join()~string^list_join,\n "xy"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "dash_separator", + expr: "['x', 'y'].join('-') == 'x-y'", + }, + ast: '_==_(\n [\n "x"^#*expr.Constant_StringValue#,\n "y"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#.join(\n "-"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "x-y"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n [\n "x"~string,\n "y"~string\n ]~list(string).join(\n "-"~string\n )~string^list_join_string,\n "x-y"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "empty_string_empty_separator", + expr: "[].join() == ''", + }, + ast: '_==_(\n []^#*expr.Expr_ListExpr#.join()^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n []~list(string).join()~string^list_join,\n ""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "empty_string_dash_separator", + expr: "[].join('-') == ''", + }, + ast: '_==_(\n []^#*expr.Expr_ListExpr#.join(\n "-"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n []~list(string).join(\n "-"~string\n )~string^list_join_string,\n ""~string\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "quote", + tests: [ + { + original: { + name: "multiline", + expr: 'strings.quote("first\\nsecond") == "\\"first\\\\nsecond\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "first\\nsecond"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"first\\\\nsecond\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "first\\nsecond"~string\n )~string^strings_quote,\n "\\"first\\\\nsecond\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "escaped", + expr: 'strings.quote("bell\\a") == "\\"bell\\\\a\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "bell\\a"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"bell\\\\a\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "bell\\a"~string\n )~string^strings_quote,\n "\\"bell\\\\a\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "backspace", + expr: 'strings.quote("\\bbackspace") == "\\"\\\\bbackspace\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "\\bbackspace"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"\\\\bbackspace\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "\\bbackspace"~string\n )~string^strings_quote,\n "\\"\\\\bbackspace\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "form_feed", + expr: 'strings.quote("\\fform feed") == "\\"\\\\fform feed\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "\\fform feed"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"\\\\fform feed\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "\\fform feed"~string\n )~string^strings_quote,\n "\\"\\\\fform feed\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "carriage_return", + expr: 'strings.quote("carriage \\r return") == "\\"carriage \\\\r return\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "carriage \\r return"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"carriage \\\\r return\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "carriage \\r return"~string\n )~string^strings_quote,\n "\\"carriage \\\\r return\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "horizontal_tab", + expr: 'strings.quote("horizontal tab\\t") == "\\"horizontal tab\\\\t\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "horizontal tab\\t"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"horizontal tab\\\\t\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "horizontal tab\\t"~string\n )~string^strings_quote,\n "\\"horizontal tab\\\\t\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "vertical_tab", + expr: 'strings.quote("vertical \\v tab") == "\\"vertical \\\\v tab\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "vertical \\v tab"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"vertical \\\\v tab\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "vertical \\v tab"~string\n )~string^strings_quote,\n "\\"vertical \\\\v tab\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "double_slash", + expr: 'strings.quote("double \\\\\\\\ slash") == "\\"double \\\\\\\\\\\\\\\\ slash\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "double \\\\\\\\ slash"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"double \\\\\\\\\\\\\\\\ slash\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "double \\\\\\\\ slash"~string\n )~string^strings_quote,\n "\\"double \\\\\\\\\\\\\\\\ slash\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "two_escape_sequences", + expr: 'strings.quote("two escape sequences \\\\a\\\\n") == "\\"two escape sequences \\\\\\\\a\\\\\\\\n\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "two escape sequences \\\\a\\\\n"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"two escape sequences \\\\\\\\a\\\\\\\\n\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "two escape sequences \\\\a\\\\n"~string\n )~string^strings_quote,\n "\\"two escape sequences \\\\\\\\a\\\\\\\\n\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "verbatim", + expr: 'strings.quote("verbatim") == "\\"verbatim\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "verbatim"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"verbatim\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "verbatim"~string\n )~string^strings_quote,\n "\\"verbatim\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "ends_with", + expr: 'strings.quote("ends with \\\\") == "\\"ends with \\\\\\\\\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "ends with \\\\"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"ends with \\\\\\\\\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "ends with \\\\"~string\n )~string^strings_quote,\n "\\"ends with \\\\\\\\\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "starts_with", + expr: 'strings.quote("\\\\ starts with") == "\\"\\\\\\\\ starts with\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "\\\\ starts with"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"\\\\\\\\ starts with\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "\\\\ starts with"~string\n )~string^strings_quote,\n "\\"\\\\\\\\ starts with\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "printable_unicode", + expr: 'strings.quote("printable unicode😀") == "\\"printable unicode😀\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "printable unicode😀"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"printable unicode😀\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "printable unicode😀"~string\n )~string^strings_quote,\n "\\"printable unicode😀\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "mid_string_quote", + expr: 'strings.quote("mid string \\" quote") == "\\"mid string \\\\\\" quote\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "mid string \\" quote"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"mid string \\\\\\" quote\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "mid string \\" quote"~string\n )~string^strings_quote,\n "\\"mid string \\\\\\" quote\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "single_quote_with_double_quote", + expr: 'strings.quote(\'single-quote with "double quote"\') == "\\"single-quote with \\\\\\"double quote\\\\\\"\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "single-quote with \\"double quote\\""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"single-quote with \\\\\\"double quote\\\\\\"\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "single-quote with \\"double quote\\""~string\n )~string^strings_quote,\n "\\"single-quote with \\\\\\"double quote\\\\\\"\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "size_unicode_char", + expr: 'strings.quote("size(\'ÿ\')") == "\\"size(\'ÿ\')\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "size(\'ÿ\')"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"size(\'ÿ\')\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "size(\'ÿ\')"~string\n )~string^strings_quote,\n "\\"size(\'ÿ\')\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "size_unicode_string", + expr: 'strings.quote("size(\'πέντε\')") == "\\"size(\'πέντε\')\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "size(\'πέντε\')"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"size(\'πέντε\')\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "size(\'πέντε\')"~string\n )~string^strings_quote,\n "\\"size(\'πέντε\')\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode", + expr: 'strings.quote("завтра") == "\\"завтра\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "завтра"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"завтра\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "завтра"~string\n )~string^strings_quote,\n "\\"завтра\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "unicode_code_points", + expr: 'strings.quote("\\U0001F431\\U0001F600\\U0001F61B")', + value: { stringValue: '"🐱😀😛"' }, + }, + ast: 'strings^#*expr.Expr_IdentExpr#.quote(\n "🐱😀😛"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'strings.quote(\n "🐱😀😛"~string\n)~string^strings_quote', + type: "string", + }, + { + original: { + name: "unicode_2", + expr: 'strings.quote("ta©o©αT") == "\\"ta©o©αT\\""', + }, + ast: '_==_(\n strings^#*expr.Expr_IdentExpr#.quote(\n "ta©o©αT"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "\\"ta©o©αT\\""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n strings.quote(\n "ta©o©αT"~string\n )~string^strings_quote,\n "\\"ta©o©αT\\""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "empty_quote", + expr: 'strings.quote("")', + value: { stringValue: '""' }, + }, + ast: 'strings^#*expr.Expr_IdentExpr#.quote(\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: 'strings.quote(\n ""~string\n)~string^strings_quote', + type: "string", + }, + ], + }, + { + name: "format", + tests: [ + { + original: { + name: "no-op", + expr: '"no substitution".format([])', + value: { stringValue: "no substitution" }, + }, + ast: '"no substitution"^#*expr.Constant_StringValue#.format(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"no substitution"~string.format(\n []~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "mid-string substitution", + expr: '"str is %s and some more".format(["filler"])', + value: { stringValue: "str is filler and some more" }, + }, + ast: '"str is %s and some more"^#*expr.Constant_StringValue#.format(\n [\n "filler"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"str is %s and some more"~string.format(\n [\n "filler"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "percent escaping", + expr: '"%% and also %%".format([])', + value: { stringValue: "% and also %" }, + }, + ast: '"%% and also %%"^#*expr.Constant_StringValue#.format(\n []^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%% and also %%"~string.format(\n []~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "substitution inside escaped percent signs", + expr: '"%%%s%%".format(["text"])', + value: { stringValue: "%text%" }, + }, + ast: '"%%%s%%"^#*expr.Constant_StringValue#.format(\n [\n "text"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%%%s%%"~string.format(\n [\n "text"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "substitution with one escaped percent sign on the right", + expr: '"%s%%".format(["percent on the right"])', + value: { stringValue: "percent on the right%" }, + }, + ast: '"%s%%"^#*expr.Constant_StringValue#.format(\n [\n "percent on the right"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s%%"~string.format(\n [\n "percent on the right"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "substitution with one escaped percent sign on the left", + expr: '"%%%s".format(["percent on the left"])', + value: { stringValue: "%percent on the left" }, + }, + ast: '"%%%s"^#*expr.Constant_StringValue#.format(\n [\n "percent on the left"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%%%s"~string.format(\n [\n "percent on the left"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "multiple substitutions", + expr: '"%d %d %d, %s %s %s, %d %d %d, %s %s %s".format([1, 2, 3, "A", "B", "C", 4, 5, 6, "D", "E", "F"])', + value: { stringValue: "1 2 3, A B C, 4 5 6, D E F" }, + }, + ast: '"%d %d %d, %s %s %s, %d %d %d, %s %s %s"^#*expr.Constant_StringValue#.format(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n "A"^#*expr.Constant_StringValue#,\n "B"^#*expr.Constant_StringValue#,\n "C"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n "D"^#*expr.Constant_StringValue#,\n "E"^#*expr.Constant_StringValue#,\n "F"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%d %d %d, %s %s %s, %d %d %d, %s %s %s"~string.format(\n [\n 1~int,\n 2~int,\n 3~int,\n "A"~string,\n "B"~string,\n "C"~string,\n 4~int,\n 5~int,\n 6~int,\n "D"~string,\n "E"~string,\n "F"~string\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "percent sign escape sequence support", + expr: '"%%escaped %s%%".format(["percent"])', + value: { stringValue: "%escaped percent%" }, + }, + ast: '"%%escaped %s%%"^#*expr.Constant_StringValue#.format(\n [\n "percent"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%%escaped %s%%"~string.format(\n [\n "percent"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "fixed point formatting clause", + expr: '"%.3f".format([1.2345])', + value: { stringValue: "1.234" }, + }, + ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n 1.2345^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.3f"~string.format(\n [\n 1.2345~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "binary formatting clause", + expr: '"this is 5 in binary: %b".format([5])', + value: { stringValue: "this is 5 in binary: 101" }, + }, + ast: '"this is 5 in binary: %b"^#*expr.Constant_StringValue#.format(\n [\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"this is 5 in binary: %b"~string.format(\n [\n 5~int\n ]~list(int)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "uint support for binary formatting", + expr: '"unsigned 64 in binary: %b".format([uint(64)])', + value: { stringValue: "unsigned 64 in binary: 1000000" }, + }, + ast: '"unsigned 64 in binary: %b"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 64^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"unsigned 64 in binary: %b"~string.format(\n [\n uint(\n 64~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "bool support for binary formatting", + expr: '"bit set from bool: %b".format([true])', + value: { stringValue: "bit set from bool: 1" }, + }, + ast: '"bit set from bool: %b"^#*expr.Constant_StringValue#.format(\n [\n true^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"bit set from bool: %b"~string.format(\n [\n true~bool\n ]~list(bool)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "octal formatting clause", + expr: '"%o".format([11])', + value: { stringValue: "13" }, + }, + ast: '"%o"^#*expr.Constant_StringValue#.format(\n [\n 11^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%o"~string.format(\n [\n 11~int\n ]~list(int)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "uint support for octal formatting clause", + expr: '"this is an unsigned octal: %o".format([uint(65535)])', + value: { stringValue: "this is an unsigned octal: 177777" }, + }, + ast: '"this is an unsigned octal: %o"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 65535^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"this is an unsigned octal: %o"~string.format(\n [\n uint(\n 65535~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "lowercase hexadecimal formatting clause", + expr: '"%x is 20 in hexadecimal".format([30])', + value: { stringValue: "1e is 20 in hexadecimal" }, + }, + ast: '"%x is 20 in hexadecimal"^#*expr.Constant_StringValue#.format(\n [\n 30^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%x is 20 in hexadecimal"~string.format(\n [\n 30~int\n ]~list(int)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "uppercase hexadecimal formatting clause", + expr: '"%X is 20 in hexadecimal".format([30])', + value: { stringValue: "1E is 20 in hexadecimal" }, + }, + ast: '"%X is 20 in hexadecimal"^#*expr.Constant_StringValue#.format(\n [\n 30^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%X is 20 in hexadecimal"~string.format(\n [\n 30~int\n ]~list(int)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "unsigned support for hexadecimal formatting clause", + expr: '"%X is 6000 in hexadecimal".format([uint(6000)])', + value: { stringValue: "1770 is 6000 in hexadecimal" }, + }, + ast: '"%X is 6000 in hexadecimal"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 6000^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%X is 6000 in hexadecimal"~string.format(\n [\n uint(\n 6000~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "string support with hexadecimal formatting clause", + expr: '"%x".format(["Hello world!"])', + value: { stringValue: "48656c6c6f20776f726c6421" }, + }, + ast: '"%x"^#*expr.Constant_StringValue#.format(\n [\n "Hello world!"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%x"~string.format(\n [\n "Hello world!"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "string support with uppercase hexadecimal formatting clause", + expr: '"%X".format(["Hello world!"])', + value: { stringValue: "48656C6C6F20776F726C6421" }, + }, + ast: '"%X"^#*expr.Constant_StringValue#.format(\n [\n "Hello world!"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%X"~string.format(\n [\n "Hello world!"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "byte support with hexadecimal formatting clause", + expr: '"%x".format([b"byte string"])', + value: { stringValue: "6279746520737472696e67" }, + }, + ast: '"%x"^#*expr.Constant_StringValue#.format(\n [\n b"byte string"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%x"~string.format(\n [\n b"byte string"~bytes\n ]~list(bytes)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "byte support with uppercase hexadecimal formatting clause", + expr: '"%X".format([b"byte string"])', + value: { stringValue: "6279746520737472696E67" }, + }, + ast: '"%X"^#*expr.Constant_StringValue#.format(\n [\n b"byte string"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%X"~string.format(\n [\n b"byte string"~bytes\n ]~list(bytes)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "scientific notation formatting clause", + expr: '"%.6e".format([1052.032911275])', + value: { stringValue: "1.052033e+03" }, + }, + ast: '"%.6e"^#*expr.Constant_StringValue#.format(\n [\n 1052.032911275^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.6e"~string.format(\n [\n 1052.032911275~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "default precision for fixed-point clause", + expr: '"%f".format([2.71828])', + value: { stringValue: "2.718280" }, + }, + ast: '"%f"^#*expr.Constant_StringValue#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%f"~string.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "default precision for scientific notation", + expr: '"%e".format([2.71828])', + value: { stringValue: "2.718280e+00" }, + }, + ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%e"~string.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "NaN support for scientific notation", + expr: '"%e".format([double("NaN")])', + value: { stringValue: "NaN" }, + }, + ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%e"~string.format(\n [\n double(\n "NaN"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "positive infinity support for scientific notation", + expr: '"%e".format([double("Infinity")])', + value: { stringValue: "Infinity" }, + }, + ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n double(\n "Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%e"~string.format(\n [\n double(\n "Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "negative infinity support for scientific notation", + expr: '"%e".format([double("-Infinity")])', + value: { stringValue: "-Infinity" }, + }, + ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n double(\n "-Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%e"~string.format(\n [\n double(\n "-Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "NaN support for decimal", + expr: '"%d".format([double("NaN")])', + value: { stringValue: "NaN" }, + }, + ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%d"~string.format(\n [\n double(\n "NaN"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "positive infinity support for decimal", + expr: '"%d".format([double("Infinity")])', + value: { stringValue: "Infinity" }, + }, + ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n double(\n "Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%d"~string.format(\n [\n double(\n "Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "negative infinity support for decimal", + expr: '"%d".format([double("-Infinity")])', + value: { stringValue: "-Infinity" }, + }, + ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n double(\n "-Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%d"~string.format(\n [\n double(\n "-Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "NaN support for fixed-point", + expr: '"%f".format([double("NaN")])', + value: { stringValue: "NaN" }, + }, + ast: '"%f"^#*expr.Constant_StringValue#.format(\n [\n double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%f"~string.format(\n [\n double(\n "NaN"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "positive infinity support for fixed-point", + expr: '"%f".format([double("Infinity")])', + value: { stringValue: "Infinity" }, + }, + ast: '"%f"^#*expr.Constant_StringValue#.format(\n [\n double(\n "Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%f"~string.format(\n [\n double(\n "Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "negative infinity support for fixed-point", + expr: '"%f".format([double("-Infinity")])', + value: { stringValue: "-Infinity" }, + }, + ast: '"%f"^#*expr.Constant_StringValue#.format(\n [\n double(\n "-Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%f"~string.format(\n [\n double(\n "-Infinity"~string\n )~double^string_to_double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "uint support for decimal clause", + expr: '"%d".format([uint(64)])', + value: { stringValue: "64" }, + }, + ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n uint(\n 64^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%d"~string.format(\n [\n uint(\n 64~int\n )~uint^int64_to_uint64\n ]~list(uint)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "null support for string", + expr: '"%s".format([null])', + value: { stringValue: "null" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n null~null\n ]~list(null)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "int support for string", + expr: '"%s".format([999999999999])', + value: { stringValue: "999999999999" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n 999999999999^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n 999999999999~int\n ]~list(int)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "bytes support for string", + expr: '"%s".format([b"xyz"])', + value: { stringValue: "xyz" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n b"xyz"^#*expr.Constant_BytesValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n b"xyz"~bytes\n ]~list(bytes)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "type() support for string", + expr: '"%s".format([type("test string")])', + value: { stringValue: "string" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n type(\n "test string"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n type(\n "test string"~string\n )~type(string)^type\n ]~list(type(string))\n)~string^string_format', + type: "string", + }, + { + original: { + name: "timestamp support for string", + expr: '"%s".format([timestamp("2023-02-03T23:31:20+00:00")])', + value: { stringValue: "2023-02-03T23:31:20Z" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n timestamp(\n "2023-02-03T23:31:20+00:00"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n timestamp(\n "2023-02-03T23:31:20+00:00"~string\n )~timestamp^string_to_timestamp\n ]~list(timestamp)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "duration support for string", + expr: '"%s".format([duration("1h45m47s")])', + value: { stringValue: "6347s" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n duration(\n "1h45m47s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n duration(\n "1h45m47s"~string\n )~duration^string_to_duration\n ]~list(duration)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "list support for string", + expr: '"%s".format([["abc", 3.14, null, [9, 8, 7, 6], timestamp("2023-02-03T23:31:20Z")]])', + value: { + stringValue: + "[abc, 3.14, null, [9, 8, 7, 6], 2023-02-03T23:31:20Z]", + }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n [\n "abc"^#*expr.Constant_StringValue#,\n 3.14^#*expr.Constant_DoubleValue#,\n null^#*expr.Constant_NullValue#,\n [\n 9^#*expr.Constant_Int64Value#,\n 8^#*expr.Constant_Int64Value#,\n 7^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#,\n timestamp(\n "2023-02-03T23:31:20Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n [\n "abc"~string,\n 3.14~double,\n null~null,\n [\n 9~int,\n 8~int,\n 7~int,\n 6~int\n ]~list(int),\n timestamp(\n "2023-02-03T23:31:20Z"~string\n )~timestamp^string_to_timestamp\n ]~list(dyn)\n ]~list(list(dyn))\n)~string^string_format', + type: "string", + }, + { + original: { + name: "map support for string", + expr: '"%s".format([{"key1": b"xyz", "key5": null, "key2": duration("2h"), "key4": true, "key3": 2.71828}])', + value: { + stringValue: + "{key1: xyz, key2: 7200s, key3: 2.71828, key4: true, key5: null}", + }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n {\n "key1"^#*expr.Constant_StringValue#:b"xyz"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#,\n "key5"^#*expr.Constant_StringValue#:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#,\n "key2"^#*expr.Constant_StringValue#:duration(\n "2h"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n "key4"^#*expr.Constant_StringValue#:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#,\n "key3"^#*expr.Constant_StringValue#:2.71828^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n {\n "key1"~string:b"xyz"~bytes,\n "key5"~string:null~null,\n "key2"~string:duration(\n "2h"~string\n )~duration^string_to_duration,\n "key4"~string:true~bool,\n "key3"~string:2.71828~double\n }~map(string, dyn)\n ]~list(map(string, dyn))\n)~string^string_format', + type: "string", + }, + { + original: { + name: "map support (all key types)", + expr: '"%s".format([{1: "value1", uint(2): "value2", true: double("NaN")}])', + value: { stringValue: "{1: value1, 2: value2, true: NaN}" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n {\n 1^#*expr.Constant_Int64Value#:"value1"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n uint(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#:"value2"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n {\n 1~int:"value1"~string,\n uint(\n 2~int\n )~uint^int64_to_uint64:"value2"~string,\n true~bool:double(\n "NaN"~string\n )~double^string_to_double\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn))\n)~string^string_format', + type: "string", + }, + { + original: { + name: "boolean support for %s", + expr: '"%s, %s".format([true, false])', + value: { stringValue: "true, false" }, + }, + ast: '"%s, %s"^#*expr.Constant_StringValue#.format(\n [\n true^#*expr.Constant_BoolValue#,\n false^#*expr.Constant_BoolValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s, %s"~string.format(\n [\n true~bool,\n false~bool\n ]~list(bool)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for string formatting clause", + expr: '"%s".format([dyn("a string")])', + value: { stringValue: "a string" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n "a string"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n dyn(\n "a string"~string\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for numbers with string formatting clause", + expr: '"%s, %s".format([dyn(32), dyn(56.8)])', + value: { stringValue: "32, 56.8" }, + }, + ast: '"%s, %s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 32^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 56.8^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s, %s"~string.format(\n [\n dyn(\n 32~int\n )~dyn^to_dyn,\n dyn(\n 56.8~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for integer formatting clause", + expr: '"%d".format([dyn(128)])', + value: { stringValue: "128" }, + }, + ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 128^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%d"~string.format(\n [\n dyn(\n 128~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for integer formatting clause (unsigned)", + expr: '"%d".format([dyn(256u)])', + value: { stringValue: "256" }, + }, + ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 256u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%d"~string.format(\n [\n dyn(\n 256u~uint\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for hex formatting clause", + expr: '"%x".format([dyn(22)])', + value: { stringValue: "16" }, + }, + ast: '"%x"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 22^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%x"~string.format(\n [\n dyn(\n 22~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for hex formatting clause (uppercase)", + expr: '"%X".format([dyn(26)])', + value: { stringValue: "1A" }, + }, + ast: '"%X"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 26^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%X"~string.format(\n [\n dyn(\n 26~int\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for unsigned hex formatting clause", + expr: '"%x".format([dyn(500u)])', + value: { stringValue: "1f4" }, + }, + ast: '"%x"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 500u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%x"~string.format(\n [\n dyn(\n 500u~uint\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for fixed-point formatting clause", + expr: '"%.3f".format([dyn(4.5)])', + value: { stringValue: "4.500" }, + }, + ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 4.5^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.3f"~string.format(\n [\n dyn(\n 4.5~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for scientific notation", + expr: '"%e".format([dyn(2.71828)])', + value: { stringValue: "2.718280e+00" }, + }, + ast: '"%e"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n 2.71828^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%e"~string.format(\n [\n dyn(\n 2.71828~double\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype NaN/infinity support", + expr: '"%s".format([[double("NaN"), double("Infinity"), double("-Infinity")]])', + value: { stringValue: "[NaN, Infinity, -Infinity]" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n [\n double(\n "NaN"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n double(\n "Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n double(\n "-Infinity"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n [\n double(\n "NaN"~string\n )~double^string_to_double,\n double(\n "Infinity"~string\n )~double^string_to_double,\n double(\n "-Infinity"~string\n )~double^string_to_double\n ]~list(double)\n ]~list(list(double))\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for timestamp", + expr: '"%s".format([dyn(timestamp("2009-11-10T23:00:00Z"))])', + value: { stringValue: "2009-11-10T23:00:00Z" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n timestamp(\n "2009-11-10T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n dyn(\n timestamp(\n "2009-11-10T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for duration", + expr: '"%s".format([dyn(duration("8747s"))])', + value: { stringValue: "8747s" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n duration(\n "8747s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n dyn(\n duration(\n "8747s"~string\n )~duration^string_to_duration\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for lists", + expr: '"%s".format([dyn([6, 4.2, "a string"])])', + value: { stringValue: "[6, 4.2, a string]" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n dyn(\n [\n 6^#*expr.Constant_Int64Value#,\n 4.2^#*expr.Constant_DoubleValue#,\n "a string"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n dyn(\n [\n 6~int,\n 4.2~double,\n "a string"~string\n ]~list(dyn)\n )~dyn^to_dyn\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "dyntype support for maps", + expr: '"%s".format([{"strKey":"x", 6:duration("422s"), true:42}])', + value: { stringValue: "{6: 422s, strKey: x, true: 42}" }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n {\n "strKey"^#*expr.Constant_StringValue#:"x"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 6^#*expr.Constant_Int64Value#:duration(\n "422s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#,\n true^#*expr.Constant_BoolValue#:42^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%s"~string.format(\n [\n {\n "strKey"~string:"x"~string,\n 6~int:duration(\n "422s"~string\n )~duration^string_to_duration,\n true~bool:42~int\n }~map(dyn, dyn)\n ]~list(map(dyn, dyn))\n)~string^string_format', + type: "string", + }, + { + original: { + name: "string substitution in a string variable", + expr: 'str_var.format(["filler"])', + typeEnv: [ + { name: "str_var", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { str_var: { value: { stringValue: "%s" } } }, + value: { stringValue: "filler" }, + }, + ast: 'str_var^#*expr.Expr_IdentExpr#.format(\n [\n "filler"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'str_var~string^str_var.format(\n [\n "filler"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "multiple substitutions in a string variable", + expr: 'str_var.format([1, 2, 3, "A", "B", "C", 4, 5, 6, "D", "E", "F"])', + typeEnv: [ + { name: "str_var", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { + str_var: { + value: { + stringValue: "%d %d %d, %s %s %s, %d %d %d, %s %s %s", + }, + }, + }, + value: { stringValue: "1 2 3, A B C, 4 5 6, D E F" }, + }, + ast: 'str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#,\n "A"^#*expr.Constant_StringValue#,\n "B"^#*expr.Constant_StringValue#,\n "C"^#*expr.Constant_StringValue#,\n 4^#*expr.Constant_Int64Value#,\n 5^#*expr.Constant_Int64Value#,\n 6^#*expr.Constant_Int64Value#,\n "D"^#*expr.Constant_StringValue#,\n "E"^#*expr.Constant_StringValue#,\n "F"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'str_var~string^str_var.format(\n [\n 1~int,\n 2~int,\n 3~int,\n "A"~string,\n "B"~string,\n "C"~string,\n 4~int,\n 5~int,\n 6~int,\n "D"~string,\n "E"~string,\n "F"~string\n ]~list(dyn)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "substitution inside escaped percent signs in a string variable", + expr: 'str_var.format(["text"])', + typeEnv: [ + { name: "str_var", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { str_var: { value: { stringValue: "%%%s%%" } } }, + value: { stringValue: "%text%" }, + }, + ast: 'str_var^#*expr.Expr_IdentExpr#.format(\n [\n "text"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'str_var~string^str_var.format(\n [\n "text"~string\n ]~list(string)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "fixed point formatting clause in a string variable", + expr: "str_var.format([1.2345])", + typeEnv: [ + { name: "str_var", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { str_var: { value: { stringValue: "%.3f" } } }, + value: { stringValue: "1.234" }, + }, + ast: "str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1.2345^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "str_var~string^str_var.format(\n [\n 1.2345~double\n ]~list(double)\n)~string^string_format", + type: "string", + }, + { + original: { + name: "binary formatting clause in a string variable", + expr: "str_var.format([5])", + typeEnv: [ + { name: "str_var", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { str_var: { value: { stringValue: "%b" } } }, + value: { stringValue: "101" }, + }, + ast: "str_var^#*expr.Expr_IdentExpr#.format(\n [\n 5^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "str_var~string^str_var.format(\n [\n 5~int\n ]~list(int)\n)~string^string_format", + type: "string", + }, + { + original: { + name: "scientific notation formatting clause in a string variable", + expr: "str_var.format([1052.032911275])", + typeEnv: [ + { name: "str_var", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { str_var: { value: { stringValue: "%.6e" } } }, + value: { stringValue: "1.052033e+03" }, + }, + ast: "str_var^#*expr.Expr_IdentExpr#.format(\n [\n 1052.032911275^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "str_var~string^str_var.format(\n [\n 1052.032911275~double\n ]~list(double)\n)~string^string_format", + type: "string", + }, + { + original: { + name: "default precision for fixed-point clause in a string variable", + expr: "str_var.format([2.71828])", + typeEnv: [ + { name: "str_var", ident: { type: { primitive: "STRING" } } }, + ], + bindings: { str_var: { value: { stringValue: "%f" } } }, + value: { stringValue: "2.718280" }, + }, + ast: "str_var^#*expr.Expr_IdentExpr#.format(\n [\n 2.71828^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "str_var~string^str_var.format(\n [\n 2.71828~double\n ]~list(double)\n)~string^string_format", + type: "string", + }, + { + original: { + name: "format_%f_insignificant_zeroes_removed", + expr: '"%.0f".format([123.000000])', + value: { stringValue: "123" }, + }, + ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 123^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.0f"~string.format(\n [\n 123~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_positive_round_to_whole_number", + expr: '"%.0f".format([3.5001])', + value: { stringValue: "4" }, + }, + ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 3.5001^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.0f"~string.format(\n [\n 3.5001~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_negative_truncate_to_whole_number", + expr: '"%.0f".format([3.4999])', + value: { stringValue: "3" }, + }, + ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 3.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.0f"~string.format(\n [\n 3.4999~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_halfway_round_up_to_nearest_even", + expr: '"%.0f".format([1.5])', + value: { stringValue: "2" }, + }, + ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 1.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.0f"~string.format(\n [\n 1.5~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_halfway_truncate_to_nearest_even", + expr: '"%.0f".format([2.5])', + value: { stringValue: "2" }, + }, + ast: '"%.0f"^#*expr.Constant_StringValue#.format(\n [\n 2.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.0f"~string.format(\n [\n 2.5~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_positive_round_up", + expr: '"%.3f".format([123.4999])', + value: { stringValue: "123.500" }, + }, + ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n 123.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.3f"~string.format(\n [\n 123.4999~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_positive_round_down", + expr: '"%.3f".format([123.4994])', + value: { stringValue: "123.499" }, + }, + ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n 123.4994^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.3f"~string.format(\n [\n 123.4994~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_negative_round_up", + expr: '"%.3f".format([-123.4999])', + value: { stringValue: "-123.500" }, + }, + ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n -123.4999^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.3f"~string.format(\n [\n -123.4999~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_negative_round_down", + expr: '"%.3f".format([-123.4994])', + value: { stringValue: "-123.499" }, + }, + ast: '"%.3f"^#*expr.Constant_StringValue#.format(\n [\n -123.4994^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.3f"~string.format(\n [\n -123.4994~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + { + original: { + name: "format_%f_zero_padding", + expr: '"%.5f".format([-1.2])', + value: { stringValue: "-1.20000" }, + }, + ast: '"%.5f"^#*expr.Constant_StringValue#.format(\n [\n -1.2^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '"%.5f"~string.format(\n [\n -1.2~double\n ]~list(double)\n)~string^string_format', + type: "string", + }, + ], + }, + { + name: "format_errors", + tests: [ + { + original: { + name: "unrecognized formatting clause", + expr: '"%a".format([1])', + disableCheck: true, + evalError: { + errors: [ + { + message: + 'could not parse formatting clause: unrecognized formatting clause "a"', + }, + ], + }, + }, + ast: '"%a"^#*expr.Constant_StringValue#.format(\n [\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:12: could not parse formatting clause: unrecognized formatting clause "a"\n | "%a".format([1])\n | ...........^', + }, + { + original: { + name: "out of bounds arg index", + expr: '"%d %d %d".format([0, 1])', + disableCheck: true, + evalError: { errors: [{ message: "index 2 out of range" }] }, + }, + ast: '"%d %d %d"^#*expr.Constant_StringValue#.format(\n [\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:18: index 2 out of range\n | "%d %d %d".format([0, 1])\n | .................^', + }, + { + original: { + name: "string substitution is not allowed with binary clause", + expr: '"string is %b".format(["abc"])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: only integers and bools can be formatted as binary, was given string", + }, + ], + }, + }, + ast: '"string is %b"^#*expr.Constant_StringValue#.format(\n [\n "abc"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:24: error during formatting: only ints, uints, and bools can be formatted as binary, was given string\n | "string is %b".format(["abc"])\n | .......................^', + }, + { + original: { + name: "duration substitution not allowed with decimal clause", + expr: '"%d".format([duration("30m2s")])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: decimal clause can only be used on integers, was given google.protobuf.Duration", + }, + ], + }, + }, + ast: '"%d"^#*expr.Constant_StringValue#.format(\n [\n duration(\n "30m2s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:22: error during formatting: decimal clause can only be used on ints, uints, and doubles, was given google.protobuf.Duration\n | "%d".format([duration("30m2s")])\n | .....................^', + }, + { + original: { + name: "string substitution not allowed with octal clause", + expr: '"octal: %o".format(["a string"])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: octal clause can only be used on integers, was given string", + }, + ], + }, + }, + ast: '"octal: %o"^#*expr.Constant_StringValue#.format(\n [\n "a string"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:21: error during formatting: octal clause can only be used on ints and uints, was given string\n | "octal: %o".format(["a string"])\n | ....................^', + }, + { + original: { + name: "double substitution not allowed with hex clause", + expr: '"double is %x".format([0.5])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given double", + }, + ], + }, + }, + ast: '"double is %x"^#*expr.Constant_StringValue#.format(\n [\n 0.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:24: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given double\n | "double is %x".format([0.5])\n | .......................^', + }, + { + original: { + name: "uppercase not allowed for scientific clause", + expr: '"double is %E".format([0.5])', + disableCheck: true, + evalError: { + errors: [ + { + message: + 'could not parse formatting clause: unrecognized formatting clause "E"', + }, + ], + }, + }, + ast: '"double is %E"^#*expr.Constant_StringValue#.format(\n [\n 0.5^#*expr.Constant_DoubleValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:22: could not parse formatting clause: unrecognized formatting clause "E"\n | "double is %E".format([0.5])\n | .....................^', + }, + { + original: { + name: "object not allowed", + expr: '"object is %s".format([cel.expr.conformance.proto3.TestAllTypes{}])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + }, + ast: '"object is %s"^#*expr.Constant_StringValue#.format(\n [\n cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:64: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | "object is %s".format([cel.expr.conformance.proto3.TestAllTypes{}])\n | ...............................................................^', + }, + { + original: { + name: "object inside list", + expr: '"%s".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n [\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:61: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | "%s".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])\n | ............................................................^', + }, + { + original: { + name: "object inside map", + expr: '"%s".format([{1: "a", 2: cel.expr.conformance.proto3.TestAllTypes{}}])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + }, + ast: '"%s"^#*expr.Constant_StringValue#.format(\n [\n {\n 1^#*expr.Constant_Int64Value#:"a"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#,\n 2^#*expr.Constant_Int64Value#:cel.expr.conformance.proto3.TestAllTypes{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:66: error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes\n | "%s".format([{1: "a", 2: cel.expr.conformance.proto3.TestAllTypes{}}])\n | .................................................................^', + }, + { + original: { + name: "null not allowed for %d", + expr: '"null: %d".format([null])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: decimal clause can only be used on integers, was given null_type", + }, + ], + }, + }, + ast: '"null: %d"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:20: error during formatting: decimal clause can only be used on ints, uints, and doubles, was given null_type\n | "null: %d".format([null])\n | ...................^', + }, + { + original: { + name: "null not allowed for %e", + expr: '"null: %e".format([null])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: scientific clause can only be used on doubles, was given null_type", + }, + ], + }, + }, + ast: '"null: %e"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:20: error during formatting: scientific clause can only be used on ints, uints, and doubles, was given null_type\n | "null: %e".format([null])\n | ...................^', + }, + { + original: { + name: "null not allowed for %f", + expr: '"null: %f".format([null])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: fixed-point clause can only be used on doubles, was given null_type", + }, + ], + }, + }, + ast: '"null: %f"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:20: error during formatting: fixed-point clause can only be used on ints, uints, and doubles, was given null_type\n | "null: %f".format([null])\n | ...................^', + }, + { + original: { + name: "null not allowed for %x", + expr: '"null: %x".format([null])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type", + }, + ], + }, + }, + ast: '"null: %x"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given null_type\n | "null: %x".format([null])\n | ...................^', + }, + { + original: { + name: "null not allowed for %X", + expr: '"null: %X".format([null])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type", + }, + ], + }, + }, + ast: '"null: %X"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, bytes, and strings can be formatted as hex, was given null_type\n | "null: %X".format([null])\n | ...................^', + }, + { + original: { + name: "null not allowed for %b", + expr: '"null: %b".format([null])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: only integers and bools can be formatted as binary, was given null_type", + }, + ], + }, + }, + ast: '"null: %b"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:20: error during formatting: only ints, uints, and bools can be formatted as binary, was given null_type\n | "null: %b".format([null])\n | ...................^', + }, + { + original: { + name: "null not allowed for %o", + expr: '"null: %o".format([null])', + disableCheck: true, + evalError: { + errors: [ + { + message: + "error during formatting: octal clause can only be used on integers, was given null_type", + }, + ], + }, + }, + ast: '"null: %o"^#*expr.Constant_StringValue#.format(\n [\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + 'ERROR: \u003cinput\u003e:1:20: error during formatting: octal clause can only be used on ints and uints, was given null_type\n | "null: %o".format([null])\n | ...................^', + }, + ], + }, + { + name: "value_errors", + tests: [ + { + original: { + name: "charat_out_of_range", + expr: "'tacocat'.charAt(30) == ''", + evalError: { errors: [{ message: "index out of range: 30" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.charAt(\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.charAt(\n 30~int\n )~string^string_char_at_int,\n ""~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "indexof_out_of_range", + expr: "'tacocat'.indexOf('a', 30) == -1", + evalError: { errors: [{ message: "index out of range: 30" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.indexOf(\n "a"^#*expr.Constant_StringValue#,\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.indexOf(\n "a"~string,\n 30~int\n )~int^string_index_of_string_int,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "lastindexof_negative_index", + expr: "'tacocat'.lastIndexOf('a', -1) == -1", + evalError: { errors: [{ message: "index out of range: -1" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "a"^#*expr.Constant_StringValue#,\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.lastIndexOf(\n "a"~string,\n -1~int\n )~int^string_last_index_of_string_int,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "lastindexof_out_of_range", + expr: "'tacocat'.lastIndexOf('a', 30) == -1", + evalError: { errors: [{ message: "index out of range: 30" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.lastIndexOf(\n "a"^#*expr.Constant_StringValue#,\n 30^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n -1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.lastIndexOf(\n "a"~string,\n 30~int\n )~int^string_last_index_of_string_int,\n -1~int\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "substring_out_of_range", + expr: "'tacocat'.substring(40) == 'cat'", + evalError: { errors: [{ message: "index out of range: 40" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 40^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n 40~int\n )~string^string_substring_int,\n "cat"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "substring_negative_index", + expr: "'tacocat'.substring(-1) == 'cat'", + evalError: { errors: [{ message: "index out of range: -1" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n -1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n -1~int\n )~string^string_substring_int,\n "cat"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "substring_end_index_out_of_range", + expr: "'tacocat'.substring(1, 50) == 'cat'", + evalError: { errors: [{ message: "index out of range: 50" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 1^#*expr.Constant_Int64Value#,\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n 1~int,\n 50~int\n )~string^string_substring_int_int,\n "cat"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "substring_begin_index_out_of_range", + expr: "'tacocat'.substring(49, 50) == 'cat'", + evalError: { errors: [{ message: "index out of range: 49" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 49^#*expr.Constant_Int64Value#,\n 50^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "cat"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n 49~int,\n 50~int\n )~string^string_substring_int_int,\n "cat"~string\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "substring_end_index_greater_than_begin_index", + expr: "'tacocat'.substring(4, 3) == ''", + evalError: { + errors: [ + { message: "invalid substring range. start: 4, end: 3" }, + ], + }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 4^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n "tacocat"~string.substring(\n 4~int,\n 3~int\n )~string^string_substring_int_int,\n ""~string\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "type_errors", + tests: [ + { + original: { + name: "charat_invalid_type", + expr: "42.charAt(2) == ''", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 42^#*expr.Constant_Int64Value#.charAt(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:10: found no matching overload for 'charAt' applied to 'int.(int)'\n | 42.charAt(2) == ''\n | .........^", + }, + { + original: { + name: "charat_invalid_argument", + expr: "'hello'.charAt(true) == ''", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "hello"^#*expr.Constant_StringValue#.charAt(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:15: found no matching overload for 'charAt' applied to 'string.(bool)'\n | 'hello'.charAt(true) == ''\n | ..............^", + }, + { + original: { + name: "indexof_unary_invalid_type", + expr: "24.indexOf('2') == 0", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 24^#*expr.Constant_Int64Value#.indexOf(\n "2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'indexOf' applied to 'int.(string)'\n | 24.indexOf('2') == 0\n | ..........^", + }, + { + original: { + name: "indexof_unary_invalid_argument", + expr: "'hello'.indexOf(true) == 1", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "hello"^#*expr.Constant_StringValue#.indexOf(\n true^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:16: found no matching overload for 'indexOf' applied to 'string.(bool)'\n | 'hello'.indexOf(true) == 1\n | ...............^", + }, + { + original: { + name: "indexof_binary_invalid_argument", + expr: "42.indexOf('4', 0) == 0", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 42^#*expr.Constant_Int64Value#.indexOf(\n "4"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'indexOf' applied to 'int.(string, int)'\n | 42.indexOf('4', 0) == 0\n | ..........^", + }, + { + original: { + name: "indexof_binary_invalid_argument_2", + expr: "'42'.indexOf(4, 0) == 0", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.indexOf(\n 4^#*expr.Constant_Int64Value#,\n 0^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(int, int)'\n | '42'.indexOf(4, 0) == 0\n | ............^", + }, + { + original: { + name: "indexof_binary_both_invalid_arguments", + expr: "'42'.indexOf('4', '0') == 0", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.indexOf(\n "4"^#*expr.Constant_StringValue#,\n "0"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(string, string)'\n | '42'.indexOf('4', '0') == 0\n | ............^", + }, + { + original: { + name: "indexof_ternary_invalid_arguments", + expr: "'42'.indexOf('4', 0, 1) == 0", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.indexOf(\n "4"^#*expr.Constant_StringValue#,\n 0^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'indexOf' applied to 'string.(string, int, int)'\n | '42'.indexOf('4', 0, 1) == 0\n | ............^", + }, + { + original: { + name: "split_invalid_type", + expr: "42.split('2') == ['4']", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 42^#*expr.Constant_Int64Value#.split(\n "2"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string)'\n | 42.split('2') == ['4']\n | ........^", + }, + { + original: { + name: "replace_invalid_type", + expr: "42.replace(2, 1) == '41'", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 42^#*expr.Constant_Int64Value#.replace(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'replace' applied to 'int.(int, int)'\n | 42.replace(2, 1) == '41'\n | ..........^", + }, + { + original: { + name: "replace_binary_invalid_argument", + expr: "'42'.replace(2, 1) == '41'", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(int, int)'\n | '42'.replace(2, 1) == '41'\n | ............^", + }, + { + original: { + name: "replace_binary_invalid_argument_2", + expr: "'42'.replace('2', 1) == '41'", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n "2"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, int)'\n | '42'.replace('2', 1) == '41'\n | ............^", + }, + { + original: { + name: "replace_ternary_invalid_argument", + expr: "42.replace('2', '1', 1) == '41'", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 42^#*expr.Constant_Int64Value#.replace(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'replace' applied to 'int.(string, string, int)'\n | 42.replace('2', '1', 1) == '41'\n | ..........^", + }, + { + original: { + name: "replace_ternary_invalid_argument_2", + expr: "'42'.replace(2, '1', 1) == '41'", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n 2^#*expr.Constant_Int64Value#,\n "1"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(int, string, int)'\n | '42'.replace(2, '1', 1) == '41'\n | ............^", + }, + { + original: { + name: "replace_ternary_invalid_argument_3", + expr: "'42'.replace('2', 1, 1) == '41'", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n "2"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, int, int)'\n | '42'.replace('2', 1, 1) == '41'\n | ............^", + }, + { + original: { + name: "replace_ternary_invalid_argument_4", + expr: "'42'.replace('2', '1', '1') == '41'", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, string, string)'\n | '42'.replace('2', '1', '1') == '41'\n | ............^", + }, + { + original: { + name: "replace_quaternary_invalid_argument", + expr: "'42'.replace('2', '1', 1, false) == '41'", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.replace(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n "41"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'replace' applied to 'string.(string, string, int, bool)'\n | '42'.replace('2', '1', 1, false) == '41'\n | ............^", + }, + { + original: { + name: "split_invalid_type_empty_arg", + expr: "42.split('') == ['4', '2']", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 42^#*expr.Constant_Int64Value#.split(\n ""^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#,\n "2"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string)'\n | 42.split('') == ['4', '2']\n | ........^", + }, + { + original: { + name: "split_invalid_argument", + expr: "'42'.split(2) == ['4']", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.split(\n 2^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(int)'\n | '42'.split(2) == ['4']\n | ..........^", + }, + { + original: { + name: "split_binary_invalid_type", + expr: "42.split('2', '1') == ['4']", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 42^#*expr.Constant_Int64Value#.split(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:9: found no matching overload for 'split' applied to 'int.(string, string)'\n | 42.split('2', '1') == ['4']\n | ........^", + }, + { + original: { + name: "split_binary_invalid_argument", + expr: "'42'.split(2, 1) == ['4']", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.split(\n 2^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(int, int)'\n | '42'.split(2, 1) == ['4']\n | ..........^", + }, + { + original: { + name: "split_binary_invalid_argument_2", + expr: "'42'.split('2', '1') == ['4']", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.split(\n "2"^#*expr.Constant_StringValue#,\n "1"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(string, string)'\n | '42'.split('2', '1') == ['4']\n | ..........^", + }, + { + original: { + name: "split_ternary_invalid_argument", + expr: "'42'.split('2', 1, 1) == ['4']", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "42"^#*expr.Constant_StringValue#.split(\n "2"^#*expr.Constant_StringValue#,\n 1^#*expr.Constant_Int64Value#,\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n [\n "4"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:11: found no matching overload for 'split' applied to 'string.(string, int, int)'\n | '42'.split('2', 1, 1) == ['4']\n | ..........^", + }, + { + original: { + name: "substring_ternary_invalid_argument", + expr: "'hello'.substring(1, 2, 3) == ''", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "hello"^#*expr.Constant_StringValue#.substring(\n 1^#*expr.Constant_Int64Value#,\n 2^#*expr.Constant_Int64Value#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:18: found no matching overload for 'substring' applied to 'string.(int, int, int)'\n | 'hello'.substring(1, 2, 3) == ''\n | .................^", + }, + { + original: { + name: "substring_binary_invalid_type", + expr: "30.substring(true, 3) == ''", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n 30^#*expr.Constant_Int64Value#.substring(\n true^#*expr.Constant_BoolValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:13: found no matching overload for 'substring' applied to 'int.(bool, int)'\n | 30.substring(true, 3) == ''\n | ............^", + }, + { + original: { + name: "substring_binary_invalid_argument", + expr: "'tacocat'.substring(true, 3) == ''", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n true^#*expr.Constant_BoolValue#,\n 3^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:20: found no matching overload for 'substring' applied to 'string.(bool, int)'\n | 'tacocat'.substring(true, 3) == ''\n | ...................^", + }, + { + original: { + name: "substring_binary_invalid_argument_2", + expr: "'tacocat'.substring(0, false) == ''", + disableCheck: true, + evalError: { errors: [{ message: "no such overload" }] }, + }, + ast: '_==_(\n "tacocat"^#*expr.Constant_StringValue#.substring(\n 0^#*expr.Constant_Int64Value#,\n false^#*expr.Constant_BoolValue#\n )^#*expr.Expr_CallExpr#,\n ""^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + error: + "ERROR: \u003cinput\u003e:1:20: found no matching overload for 'substring' applied to 'string.(int, bool)'\n | 'tacocat'.substring(0, false) == ''\n | ...................^", + }, + ], + }, + ], + }, + { + name: "timestamps", + suites: [ + { + name: "timestamp_conversions", + tests: [ + { + original: { + name: "toInt_timestamp", + expr: "int(timestamp('2009-02-13T23:31:30Z'))", + value: { int64Value: "1234567890" }, + }, + ast: 'int(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'int(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~int^timestamp_to_int64', + type: "int", + }, + { + original: { + name: "toString_timestamp", + expr: "string(timestamp('2009-02-13T23:31:30Z'))", + value: { stringValue: "2009-02-13T23:31:30Z" }, + }, + ast: 'string(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'string(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~string^timestamp_to_string', + type: "string", + }, + { + original: { + name: "toString_timestamp_nanos", + expr: "string(timestamp('9999-12-31T23:59:59.999999999Z'))", + value: { stringValue: "9999-12-31T23:59:59.999999999Z" }, + }, + ast: 'string(\n timestamp(\n "9999-12-31T23:59:59.999999999Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'string(\n timestamp(\n "9999-12-31T23:59:59.999999999Z"~string\n )~timestamp^string_to_timestamp\n)~string^timestamp_to_string', + type: "string", + }, + { + original: { + name: "toType_timestamp", + expr: "type(timestamp('2009-02-13T23:31:30Z'))", + value: { typeValue: "google.protobuf.Timestamp" }, + }, + ast: 'type(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'type(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~type(timestamp)^type', + type: "type(timestamp)", + }, + { + original: { + name: "type_comparison", + expr: "google.protobuf.Timestamp == type(timestamp('2009-02-13T23:31:30Z'))", + value: { boolValue: true }, + }, + ast: '_==_(\n google^#*expr.Expr_IdentExpr#.protobuf^#*expr.Expr_SelectExpr#.Timestamp^#*expr.Expr_SelectExpr#,\n type(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n google.protobuf.Timestamp~type(timestamp)^google.protobuf.Timestamp,\n type(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n )~type(timestamp)^type\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "duration_conversions", + tests: [ + { + original: { + name: "toString_duration", + expr: "string(duration('1000000s'))", + value: { stringValue: "1000000s" }, + }, + ast: 'string(\n duration(\n "1000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'string(\n duration(\n "1000000s"~string\n )~duration^string_to_duration\n)~string^duration_to_string', + type: "string", + }, + { + original: { + name: "toType_duration", + expr: "type(duration('1000000s'))", + value: { typeValue: "google.protobuf.Duration" }, + }, + ast: 'type(\n duration(\n "1000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'type(\n duration(\n "1000000s"~string\n )~duration^string_to_duration\n)~type(duration)^type', + type: "type(duration)", + }, + { + original: { + name: "type_comparison", + expr: "google.protobuf.Duration == type(duration('1000000s'))", + value: { boolValue: true }, + }, + ast: '_==_(\n google^#*expr.Expr_IdentExpr#.protobuf^#*expr.Expr_SelectExpr#.Duration^#*expr.Expr_SelectExpr#,\n type(\n duration(\n "1000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n google.protobuf.Duration~type(duration)^google.protobuf.Duration,\n type(\n duration(\n "1000000s"~string\n )~duration^string_to_duration\n )~type(duration)^type\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "timestamp_selectors", + tests: [ + { + original: { + name: "getDate", + expr: "timestamp('2009-02-13T23:31:30Z').getDate()", + value: { int64Value: "13" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDate()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDate()~int^timestamp_to_day_of_month_1_based', + type: "int", + }, + { + original: { + name: "getDayOfMonth", + expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth()", + value: { int64Value: "12" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth()~int^timestamp_to_day_of_month', + type: "int", + }, + { + original: { + name: "getDayOfWeek", + expr: "timestamp('2009-02-13T23:31:30Z').getDayOfWeek()", + value: { int64Value: "5" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfWeek()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfWeek()~int^timestamp_to_day_of_week', + type: "int", + }, + { + original: { + name: "getDayOfYear", + expr: "timestamp('2009-02-13T23:31:30Z').getDayOfYear()", + value: { int64Value: "43" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfYear()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfYear()~int^timestamp_to_day_of_year', + type: "int", + }, + { + original: { + name: "getFullYear", + expr: "timestamp('2009-02-13T23:31:30Z').getFullYear()", + value: { int64Value: "2009" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getFullYear()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getFullYear()~int^timestamp_to_year', + type: "int", + }, + { + original: { + name: "getHours", + expr: "timestamp('2009-02-13T23:31:30Z').getHours()", + value: { int64Value: "23" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getHours()~int^timestamp_to_hours', + type: "int", + }, + { + original: { + name: "getMilliseconds", + expr: "timestamp('2009-02-13T23:31:20.123456789Z').getMilliseconds()", + value: { int64Value: "123" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:20.123456789Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMilliseconds()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:20.123456789Z"~string\n)~timestamp^string_to_timestamp.getMilliseconds()~int^timestamp_to_milliseconds', + type: "int", + }, + { + original: { + name: "getMinutes", + expr: "timestamp('2009-02-13T23:31:30Z').getMinutes()", + value: { int64Value: "31" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getMinutes()~int^timestamp_to_minutes', + type: "int", + }, + { + original: { + name: "getMonth", + expr: "timestamp('2009-02-13T23:31:30Z').getMonth()", + value: { int64Value: "1" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMonth()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getMonth()~int^timestamp_to_month', + type: "int", + }, + { + original: { + name: "getSeconds", + expr: "timestamp('2009-02-13T23:31:30Z').getSeconds()", + value: { int64Value: "30" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getSeconds()~int^timestamp_to_seconds', + type: "int", + }, + ], + }, + { + name: "timestamp_selectors_tz", + tests: [ + { + original: { + name: "getDate", + expr: "timestamp('2009-02-13T23:31:30Z').getDate('Australia/Sydney')", + value: { int64Value: "14" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDate(\n "Australia/Sydney"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDate(\n "Australia/Sydney"~string\n)~int^timestamp_to_day_of_month_1_based_with_tz', + type: "int", + }, + { + original: { + name: "getDayOfMonth_name_pos", + expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth('US/Central')", + value: { int64Value: "12" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n "US/Central"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n "US/Central"~string\n)~int^timestamp_to_day_of_month_with_tz', + type: "int", + }, + { + original: { + name: "getDayOfMonth_numerical_pos", + expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth('+11:00')", + value: { int64Value: "13" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n "+11:00"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n "+11:00"~string\n)~int^timestamp_to_day_of_month_with_tz', + type: "int", + }, + { + original: { + name: "getDayOfMonth_numerical_neg", + expr: "timestamp('2009-02-13T02:00:00Z').getDayOfMonth('-02:30')", + value: { int64Value: "11" }, + }, + ast: 'timestamp(\n "2009-02-13T02:00:00Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n "-02:30"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T02:00:00Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n "-02:30"~string\n)~int^timestamp_to_day_of_month_with_tz', + type: "int", + }, + { + original: { + name: "getDayOfMonth_name_neg", + expr: "timestamp('2009-02-13T02:00:00Z').getDayOfMonth('America/St_Johns')", + value: { int64Value: "11" }, + }, + ast: 'timestamp(\n "2009-02-13T02:00:00Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfMonth(\n "America/St_Johns"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T02:00:00Z"~string\n)~timestamp^string_to_timestamp.getDayOfMonth(\n "America/St_Johns"~string\n)~int^timestamp_to_day_of_month_with_tz', + type: "int", + }, + { + original: { + name: "getDayOfWeek", + expr: "timestamp('2009-02-13T23:31:30Z').getDayOfWeek('UTC')", + value: { int64Value: "5" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfWeek(\n "UTC"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfWeek(\n "UTC"~string\n)~int^timestamp_to_day_of_week_with_tz', + type: "int", + }, + { + original: { + name: "getDayOfYear", + expr: "timestamp('2009-02-13T23:31:30Z').getDayOfYear('US/Central')", + value: { int64Value: "43" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getDayOfYear(\n "US/Central"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getDayOfYear(\n "US/Central"~string\n)~int^timestamp_to_day_of_year_with_tz', + type: "int", + }, + { + original: { + name: "getFullYear", + expr: "timestamp('2009-02-13T23:31:30Z').getFullYear('-09:30')", + value: { int64Value: "2009" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getFullYear(\n "-09:30"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getFullYear(\n "-09:30"~string\n)~int^timestamp_to_year_with_tz', + type: "int", + }, + { + original: { + name: "getHours", + expr: "timestamp('2009-02-13T23:31:30Z').getHours('02:00')", + value: { int64Value: "1" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours(\n "02:00"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getHours(\n "02:00"~string\n)~int^timestamp_to_hours_with_tz', + type: "int", + }, + { + original: { + name: "getMinutes", + expr: "timestamp('2009-02-13T23:31:30Z').getMinutes('Asia/Kathmandu')", + value: { int64Value: "16" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes(\n "Asia/Kathmandu"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getMinutes(\n "Asia/Kathmandu"~string\n)~int^timestamp_to_minutes_with_tz', + type: "int", + }, + { + original: { + name: "getMonth", + expr: "timestamp('2009-02-13T23:31:30Z').getMonth('UTC')", + value: { int64Value: "1" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMonth(\n "UTC"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getMonth(\n "UTC"~string\n)~int^timestamp_to_month_with_tz', + type: "int", + }, + { + original: { + name: "getSeconds", + expr: "timestamp('2009-02-13T23:31:30Z').getSeconds('-00:00')", + value: { int64Value: "30" }, + }, + ast: 'timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds(\n "-00:00"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "2009-02-13T23:31:30Z"~string\n)~timestamp^string_to_timestamp.getSeconds(\n "-00:00"~string\n)~int^timestamp_to_seconds_tz', + type: "int", + }, + ], + }, + { + name: "timestamp_equality", + tests: [ + { + original: { + name: "eq_same", + expr: "timestamp('2009-02-13T23:31:30Z') == timestamp('2009-02-13T23:31:30Z')", + value: { boolValue: true }, + }, + ast: '_==_(\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_diff", + expr: "timestamp('2009-02-13T23:31:29Z') == timestamp('2009-02-13T23:31:30Z')", + value: { boolValue: false }, + }, + ast: '_==_(\n timestamp(\n "2009-02-13T23:31:29Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:31:30Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n timestamp(\n "2009-02-13T23:31:29Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:31:30Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "neq_same", + expr: "timestamp('1945-05-07T02:41:00Z') != timestamp('1945-05-07T02:41:00Z')", + value: { boolValue: false }, + }, + ast: '_!=_(\n timestamp(\n "1945-05-07T02:41:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "1945-05-07T02:41:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n timestamp(\n "1945-05-07T02:41:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "1945-05-07T02:41:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "neq_diff", + expr: "timestamp('2000-01-01T00:00:00Z') != timestamp('2001-01-01T00:00:00Z')", + value: { boolValue: true }, + }, + ast: '_!=_(\n timestamp(\n "2000-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n timestamp(\n "2000-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^not_equals', + type: "bool", + }, + ], + }, + { + name: "duration_equality", + tests: [ + { + original: { + name: "eq_same", + expr: "duration('123s') == duration('123s')", + value: { boolValue: true }, + }, + ast: '_==_(\n duration(\n "123s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "123s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n duration(\n "123s"~string\n )~duration^string_to_duration,\n duration(\n "123s"~string\n )~duration^string_to_duration\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "eq_diff", + expr: "duration('60s') == duration('3600s')", + value: { boolValue: false }, + }, + ast: '_==_(\n duration(\n "60s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "3600s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n duration(\n "60s"~string\n )~duration^string_to_duration,\n duration(\n "3600s"~string\n )~duration^string_to_duration\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "neq_same", + expr: "duration('604800s') != duration('604800s')", + value: { boolValue: false }, + }, + ast: '_!=_(\n duration(\n "604800s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "604800s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n duration(\n "604800s"~string\n )~duration^string_to_duration,\n duration(\n "604800s"~string\n )~duration^string_to_duration\n)~bool^not_equals', + type: "bool", + }, + { + original: { + name: "neq_diff", + expr: "duration('86400s') != duration('86164s')", + value: { boolValue: true }, + }, + ast: '_!=_(\n duration(\n "86400s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "86164s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_!=_(\n duration(\n "86400s"~string\n )~duration^string_to_duration,\n duration(\n "86164s"~string\n )~duration^string_to_duration\n)~bool^not_equals', + type: "bool", + }, + ], + }, + { + name: "timestamp_arithmetic", + tests: [ + { + original: { + name: "add_duration_to_time", + expr: "timestamp('2009-02-13T23:00:00Z') + duration('240s') == timestamp('2009-02-13T23:04:00Z')", + value: { boolValue: true }, + }, + ast: '_==_(\n _+_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "240s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:04:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _+_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "240s"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n "2009-02-13T23:04:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "add_time_to_duration", + expr: "duration('120s') + timestamp('2009-02-13T23:01:00Z') == timestamp('2009-02-13T23:03:00Z')", + value: { boolValue: true }, + }, + ast: '_==_(\n _+_(\n duration(\n "120s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:01:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:03:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _+_(\n duration(\n "120s"~string\n )~duration^string_to_duration,\n timestamp(\n "2009-02-13T23:01:00Z"~string\n )~timestamp^string_to_timestamp\n )~timestamp^add_duration_timestamp,\n timestamp(\n "2009-02-13T23:03:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "add_duration_to_duration", + expr: "duration('600s') + duration('50s') == duration('650s')", + value: { boolValue: true }, + }, + ast: '_==_(\n _+_(\n duration(\n "600s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "50s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n "650s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _+_(\n duration(\n "600s"~string\n )~duration^string_to_duration,\n duration(\n "50s"~string\n )~duration^string_to_duration\n )~duration^add_duration_duration,\n duration(\n "650s"~string\n )~duration^string_to_duration\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "add_time_to_duration_nanos_negative", + expr: "timestamp('0001-01-01T00:00:01.000000001Z') + duration('-999999999ns') == timestamp('0001-01-01T00:00:00.000000002Z')", + value: { boolValue: true }, + }, + ast: '_==_(\n _+_(\n timestamp(\n "0001-01-01T00:00:01.000000001Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-999999999ns"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "0001-01-01T00:00:00.000000002Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _+_(\n timestamp(\n "0001-01-01T00:00:01.000000001Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "-999999999ns"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n "0001-01-01T00:00:00.000000002Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "add_time_to_duration_nanos_positive", + expr: "timestamp('0001-01-01T00:00:01.999999999Z') + duration('999999999ns') == timestamp('0001-01-01T00:00:02.999999998Z')", + value: { boolValue: true }, + }, + ast: '_==_(\n _+_(\n timestamp(\n "0001-01-01T00:00:01.999999999Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "999999999ns"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "0001-01-01T00:00:02.999999998Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _+_(\n timestamp(\n "0001-01-01T00:00:01.999999999Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "999999999ns"~string\n )~duration^string_to_duration\n )~timestamp^add_timestamp_duration,\n timestamp(\n "0001-01-01T00:00:02.999999998Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "subtract_duration_from_time", + expr: "timestamp('2009-02-13T23:10:00Z') - duration('600s') == timestamp('2009-02-13T23:00:00Z')", + value: { boolValue: true }, + }, + ast: '_==_(\n _-_(\n timestamp(\n "2009-02-13T23:10:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "600s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _-_(\n timestamp(\n "2009-02-13T23:10:00Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "600s"~string\n )~duration^string_to_duration\n )~timestamp^subtract_timestamp_duration,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "subtract_time_from_time", + expr: "timestamp('2009-02-13T23:31:00Z') - timestamp('2009-02-13T23:29:00Z') == duration('120s')", + value: { boolValue: true }, + }, + ast: '_==_(\n _-_(\n timestamp(\n "2009-02-13T23:31:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:29:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n "120s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _-_(\n timestamp(\n "2009-02-13T23:31:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:29:00Z"~string\n )~timestamp^string_to_timestamp\n )~duration^subtract_timestamp_timestamp,\n duration(\n "120s"~string\n )~duration^string_to_duration\n)~bool^equals', + type: "bool", + }, + { + original: { + name: "subtract_duration_from_duration", + expr: "duration('900s') - duration('42s') == duration('858s')", + value: { boolValue: true }, + }, + ast: '_==_(\n _-_(\n duration(\n "900s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "42s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n duration(\n "858s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_==_(\n _-_(\n duration(\n "900s"~string\n )~duration^string_to_duration,\n duration(\n "42s"~string\n )~duration^string_to_duration\n )~duration^subtract_duration_duration,\n duration(\n "858s"~string\n )~duration^string_to_duration\n)~bool^equals', + type: "bool", + }, + ], + }, + { + name: "comparisons", + tests: [ + { + original: { + name: "leq_timestamp_true", + expr: "timestamp('2009-02-13T23:00:00Z') \u003c= timestamp('2009-02-13T23:00:00Z')", + value: { boolValue: true }, + }, + ast: '_\u003c=_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^less_equals_timestamp', + type: "bool", + }, + { + original: { + name: "leq_timestamp_false", + expr: "timestamp('2009-02-13T23:00:00Z') \u003c= timestamp('2009-02-13T22:59:59Z')", + value: { boolValue: false }, + }, + ast: '_\u003c=_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T22:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T22:59:59Z"~string\n )~timestamp^string_to_timestamp\n)~bool^less_equals_timestamp', + type: "bool", + }, + { + original: { + name: "leq_duration_true", + expr: "duration('200s') \u003c= duration('200s')", + value: { boolValue: true }, + }, + ast: '_\u003c=_(\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n duration(\n "200s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^less_equals_duration', + type: "bool", + }, + { + original: { + name: "leq_duration_false", + expr: "duration('300s') \u003c= duration('200s')", + value: { boolValue: false }, + }, + ast: '_\u003c=_(\n duration(\n "300s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c=_(\n duration(\n "300s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^less_equals_duration', + type: "bool", + }, + { + original: { + name: "less_timestamp_true", + expr: "timestamp('2009-02-13T23:00:00Z') \u003c timestamp('2009-03-13T23:00:00Z')", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-03-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-03-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^less_timestamp', + type: "bool", + }, + { + original: { + name: "less_duration_true", + expr: "duration('200s') \u003c duration('300s')", + value: { boolValue: true }, + }, + ast: '_\u003c_(\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "300s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003c_(\n duration(\n "200s"~string\n )~duration^string_to_duration,\n duration(\n "300s"~string\n )~duration^string_to_duration\n)~bool^less_duration', + type: "bool", + }, + { + original: { + name: "geq_timestamp_true", + expr: "timestamp('2009-02-13T23:00:00Z') \u003e= timestamp('2009-02-13T23:00:00Z')", + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_equals_timestamp', + type: "bool", + }, + { + original: { + name: "geq_timestamp_false", + expr: "timestamp('2009-02-13T22:58:00Z') \u003e= timestamp('2009-02-13T23:00:00Z')", + value: { boolValue: false }, + }, + ast: '_\u003e=_(\n timestamp(\n "2009-02-13T22:58:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n timestamp(\n "2009-02-13T22:58:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_equals_timestamp', + type: "bool", + }, + { + original: { + name: "geq_duration_true", + expr: "duration('200s') \u003e= duration('200s')", + value: { boolValue: true }, + }, + ast: '_\u003e=_(\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n duration(\n "200s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^greater_equals_duration', + type: "bool", + }, + { + original: { + name: "geq_duration_false", + expr: "duration('120s') \u003e= duration('200s')", + value: { boolValue: false }, + }, + ast: '_\u003e=_(\n duration(\n "120s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e=_(\n duration(\n "120s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^greater_equals_duration', + type: "bool", + }, + { + original: { + name: "greater_timestamp_true", + expr: "timestamp('2009-02-13T23:59:00Z') \u003e timestamp('2009-02-13T23:00:00Z')", + value: { boolValue: true }, + }, + ast: '_\u003e_(\n timestamp(\n "2009-02-13T23:59:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "2009-02-13T23:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n timestamp(\n "2009-02-13T23:59:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "2009-02-13T23:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~bool^greater_timestamp', + type: "bool", + }, + { + original: { + name: "greater_duration_true", + expr: "duration('300s') \u003e duration('200s')", + value: { boolValue: true }, + }, + ast: '_\u003e_(\n duration(\n "300s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_\u003e_(\n duration(\n "300s"~string\n )~duration^string_to_duration,\n duration(\n "200s"~string\n )~duration^string_to_duration\n)~bool^greater_duration', + type: "bool", + }, + ], + }, + { + name: "duration_converters", + tests: [ + { + original: { + name: "get_hours", + expr: "duration('10000s').getHours()", + value: { int64Value: "2" }, + }, + ast: 'duration(\n "10000s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getHours()^#*expr.Expr_CallExpr#', + checkedAst: + 'duration(\n "10000s"~string\n)~duration^string_to_duration.getHours()~int^duration_to_hours', + type: "int", + }, + { + original: { + name: "get_milliseconds", + description: + "Obtain the milliseconds component of the duration. Note, this is not the same as converting the duration to milliseconds. This behavior will be deprecated.", + expr: "x.getMilliseconds()", + typeEnv: [ + { + name: "x", + ident: { + type: { messageType: "google.protobuf.Duration" }, + }, + }, + ], + bindings: { + x: { + value: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Duration", + value: "123.321456789s", + }, + }, + }, + }, + value: { int64Value: "321" }, + }, + ast: "x^#*expr.Expr_IdentExpr#.getMilliseconds()^#*expr.Expr_CallExpr#", + checkedAst: + "x~duration^x.getMilliseconds()~int^duration_to_milliseconds", + type: "int", + }, + { + original: { + name: "get_minutes", + expr: "duration('3730s').getMinutes()", + value: { int64Value: "62" }, + }, + ast: 'duration(\n "3730s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getMinutes()^#*expr.Expr_CallExpr#', + checkedAst: + 'duration(\n "3730s"~string\n)~duration^string_to_duration.getMinutes()~int^duration_to_minutes', + type: "int", + }, + { + original: { + name: "get_seconds", + expr: "duration('3730s').getSeconds()", + value: { int64Value: "3730" }, + }, + ast: 'duration(\n "3730s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.getSeconds()^#*expr.Expr_CallExpr#', + checkedAst: + 'duration(\n "3730s"~string\n)~duration^string_to_duration.getSeconds()~int^duration_to_seconds', + type: "int", + }, + ], + }, + { + name: "timestamp_range", + tests: [ + { + original: { + name: "from_string_under", + expr: "timestamp('0000-01-01T00:00:00Z')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: 'timestamp(\n "0000-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "0000-01-01T00:00:00Z"~string\n)~timestamp^string_to_timestamp', + type: "timestamp", + }, + { + original: { + name: "from_string_over", + expr: "timestamp('10000-01-01T00:00:00Z')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: 'timestamp(\n "10000-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'timestamp(\n "10000-01-01T00:00:00Z"~string\n)~timestamp^string_to_timestamp', + type: "timestamp", + }, + { + original: { + name: "add_duration_under", + expr: "timestamp('0001-01-01T00:00:00Z') + duration('-1s')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_+_(\n timestamp(\n "0001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-1s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n timestamp(\n "0001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "-1s"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration', + type: "timestamp", + }, + { + original: { + name: "add_duration_over", + expr: "timestamp('9999-12-31T23:59:59Z') + duration('1s')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_+_(\n timestamp(\n "9999-12-31T23:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "1s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n timestamp(\n "9999-12-31T23:59:59Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "1s"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration', + type: "timestamp", + }, + { + original: { + name: "add_duration_nanos_over", + expr: "timestamp('9999-12-31T23:59:59.999999999Z') + duration('1ns')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_+_(\n timestamp(\n "9999-12-31T23:59:59.999999999Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "1ns"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n timestamp(\n "9999-12-31T23:59:59.999999999Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "1ns"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration', + type: "timestamp", + }, + { + original: { + name: "add_duration_nanos_under", + expr: "timestamp('0001-01-01T00:00:00Z') + duration('-1ns')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_+_(\n timestamp(\n "0001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-1ns"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n timestamp(\n "0001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp,\n duration(\n "-1ns"~string\n )~duration^string_to_duration\n)~timestamp^add_timestamp_duration', + type: "timestamp", + }, + { + original: { + name: "sub_time_duration_over", + expr: "timestamp('9999-12-31T23:59:59Z') - timestamp('0001-01-01T00:00:00Z')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_-_(\n timestamp(\n "9999-12-31T23:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "0001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_-_(\n timestamp(\n "9999-12-31T23:59:59Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "0001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp\n)~duration^subtract_timestamp_timestamp', + type: "duration", + }, + { + original: { + name: "sub_time_duration_under", + expr: "timestamp('0001-01-01T00:00:00Z') - timestamp('9999-12-31T23:59:59Z')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_-_(\n timestamp(\n "0001-01-01T00:00:00Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n timestamp(\n "9999-12-31T23:59:59Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_-_(\n timestamp(\n "0001-01-01T00:00:00Z"~string\n )~timestamp^string_to_timestamp,\n timestamp(\n "9999-12-31T23:59:59Z"~string\n )~timestamp^string_to_timestamp\n)~duration^subtract_timestamp_timestamp', + type: "duration", + }, + ], + }, + { + name: "duration_range", + tests: [ + { + original: { + name: "from_string_under", + expr: "duration('-320000000000s')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: 'duration(\n "-320000000000s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'duration(\n "-320000000000s"~string\n)~duration^string_to_duration', + type: "duration", + }, + { + original: { + name: "from_string_over", + expr: "duration('320000000000s')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: 'duration(\n "320000000000s"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'duration(\n "320000000000s"~string\n)~duration^string_to_duration', + type: "duration", + }, + { + original: { + name: "add_under", + expr: "duration('-200000000000s') + duration('-200000000000s')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_+_(\n duration(\n "-200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n duration(\n "-200000000000s"~string\n )~duration^string_to_duration,\n duration(\n "-200000000000s"~string\n )~duration^string_to_duration\n)~duration^add_duration_duration', + type: "duration", + }, + { + original: { + name: "add_over", + expr: "duration('200000000000s') + duration('200000000000s')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_+_(\n duration(\n "200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n duration(\n "200000000000s"~string\n )~duration^string_to_duration,\n duration(\n "200000000000s"~string\n )~duration^string_to_duration\n)~duration^add_duration_duration', + type: "duration", + }, + { + original: { + name: "sub_under", + expr: "duration('-200000000000s') - duration('200000000000s')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_-_(\n duration(\n "-200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_-_(\n duration(\n "-200000000000s"~string\n )~duration^string_to_duration,\n duration(\n "200000000000s"~string\n )~duration^string_to_duration\n)~duration^subtract_duration_duration', + type: "duration", + }, + { + original: { + name: "sub_over", + expr: "duration('200000000000s') - duration('-200000000000s')", + evalError: { errors: [{ message: "range" }] }, + }, + ast: '_-_(\n duration(\n "200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#,\n duration(\n "-200000000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_-_(\n duration(\n "200000000000s"~string\n )~duration^string_to_duration,\n duration(\n "-200000000000s"~string\n )~duration^string_to_duration\n)~duration^subtract_duration_duration', + type: "duration", + }, + ], + }, + ], + }, + { + name: "type_deductions", + suites: [ + { + name: "constant_literals", + tests: [ + { + original: { + name: "bool", + expr: "true", + typedResult: { + result: { boolValue: true }, + deducedType: { primitive: "BOOL" }, + }, + }, + ast: "true^#*expr.Constant_BoolValue#", + checkedAst: "true~bool", + type: "bool", + }, + { + original: { + name: "int", + expr: "42", + typedResult: { + result: { int64Value: "42" }, + deducedType: { primitive: "INT64" }, + }, + }, + ast: "42^#*expr.Constant_Int64Value#", + checkedAst: "42~int", + type: "int", + }, + { + original: { + name: "uint", + expr: "42u", + typedResult: { + result: { uint64Value: "42" }, + deducedType: { primitive: "UINT64" }, + }, + }, + ast: "42u^#*expr.Constant_Uint64Value#", + checkedAst: "42u~uint", + type: "uint", + }, + { + original: { + name: "double", + expr: "0.1", + typedResult: { + result: { doubleValue: 0.1 }, + deducedType: { primitive: "DOUBLE" }, + }, + }, + ast: "0.1^#*expr.Constant_DoubleValue#", + checkedAst: "0.1~double", + type: "double", + }, + { + original: { + name: "string", + expr: '"test"', + typedResult: { + result: { stringValue: "test" }, + deducedType: { primitive: "STRING" }, + }, + }, + ast: '"test"^#*expr.Constant_StringValue#', + checkedAst: '"test"~string', + type: "string", + }, + { + original: { + name: "bytes", + expr: 'b"test"', + typedResult: { + result: { bytesValue: "dGVzdA==" }, + deducedType: { primitive: "BYTES" }, + }, + }, + ast: 'b"test"^#*expr.Constant_BytesValue#', + checkedAst: 'b"test"~bytes', + type: "bytes", + }, + { + original: { + name: "null", + expr: "null", + typedResult: { + result: { nullValue: null }, + deducedType: { null: null }, + }, + }, + ast: "null^#*expr.Constant_NullValue#", + checkedAst: "null~null", + type: "null", + }, + ], + }, + { + name: "complex_initializers", + tests: [ + { + original: { + name: "list", + expr: "[1]", + typedResult: { + result: { listValue: { values: [{ int64Value: "1" }] } }, + deducedType: { + listType: { elemType: { primitive: "INT64" } }, + }, + }, + }, + ast: "[\n 1^#*expr.Constant_Int64Value#\n]^#*expr.Expr_ListExpr#", + checkedAst: "[\n 1~int\n]~list(int)", + type: "list(int)", + }, + { + original: { + name: "map", + expr: "{'abc': 123}", + typedResult: { + result: { + mapValue: { + entries: [ + { + key: { stringValue: "abc" }, + value: { int64Value: "123" }, + }, + ], + }, + }, + deducedType: { + mapType: { + keyType: { primitive: "STRING" }, + valueType: { primitive: "INT64" }, + }, + }, + }, + }, + ast: '{\n "abc"^#*expr.Constant_StringValue#:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#', + checkedAst: '{\n "abc"~string:123~int\n}~map(string, int)', + type: "map(string, int)", + }, + { + original: { + name: "struct", + expr: "TestAllTypes{single_int64: 1}", + container: "cel.expr.conformance.proto3", + typedResult: { + result: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + singleInt64: "1", + }, + }, + deducedType: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ast: "TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes", + type: "cel.expr.conformance.proto3.TestAllTypes", + }, + ], + }, + { + name: "field_access", + tests: [ + { + original: { + name: "int_field", + expr: "TestAllTypes{single_int64: 1}.single_int64", + container: "cel.expr.conformance.proto3", + typedResult: { + result: { int64Value: "1" }, + deducedType: { primitive: "INT64" }, + }, + }, + ast: "TestAllTypes{\n single_int64:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_int64^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_int64:1~int\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_int64~int", + type: "int", + }, + { + original: { + name: "repeated_int_field", + expr: "TestAllTypes{}.repeated_int64", + container: "cel.expr.conformance.proto3", + typedResult: { + result: { listValue: {} }, + deducedType: { + listType: { elemType: { primitive: "INT64" } }, + }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_int64^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_int64~list(int)", + type: "list(int)", + }, + { + original: { + name: "map_bool_int", + expr: "TestAllTypes{}.map_bool_int64", + container: "cel.expr.conformance.proto3", + typedResult: { + result: { mapValue: {} }, + deducedType: { + mapType: { + keyType: { primitive: "BOOL" }, + valueType: { primitive: "INT64" }, + }, + }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_bool_int64^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_bool_int64~map(bool, int)", + type: "map(bool, int)", + }, + { + original: { + name: "enum_field", + expr: "TestAllTypes{}.standalone_enum", + container: "cel.expr.conformance.proto3", + typedResult: { + result: { int64Value: "0" }, + deducedType: { primitive: "INT64" }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.standalone_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.standalone_enum~int", + type: "int", + }, + { + original: { + name: "repeated_enum_field", + expr: "TestAllTypes{}.repeated_nested_enum", + container: "cel.expr.conformance.proto3", + typedResult: { + result: { listValue: {} }, + deducedType: { + listType: { elemType: { primitive: "INT64" } }, + }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.repeated_nested_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum~list(int)", + type: "list(int)", + }, + { + original: { + name: "enum_map_field", + expr: "TestAllTypes{}.map_int32_enum", + container: "cel.expr.conformance.proto3", + typedResult: { + result: { mapValue: {} }, + deducedType: { + mapType: { + keyType: { primitive: "INT64" }, + valueType: { primitive: "INT64" }, + }, + }, + }, + }, + ast: "TestAllTypes{}^#*expr.Expr_StructExpr#.map_int32_enum^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.map_int32_enum~map(int, int)", + type: "map(int, int)", + }, + ], + }, + { + name: "indexing", + tests: [ + { + original: { + name: "list", + expr: "['foo'][0]", + typedResult: { + result: { stringValue: "foo" }, + deducedType: { primitive: "STRING" }, + }, + }, + ast: '_[_](\n [\n "foo"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n [\n "foo"~string\n ]~list(string),\n 0~int\n)~string^index_list', + type: "string", + }, + { + original: { + name: "map", + expr: "{'abc': 123}['abc']", + typedResult: { + result: { int64Value: "123" }, + deducedType: { primitive: "INT64" }, + }, + }, + ast: '_[_](\n {\n "abc"^#*expr.Constant_StringValue#:123^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n "abc"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_[_](\n {\n "abc"~string:123~int\n }~map(string, int),\n "abc"~string\n)~int^index_map', + type: "int", + }, + ], + }, + { + name: "functions", + tests: [ + { + original: { + name: "nested_calls", + expr: "('foo' + 'bar').startsWith('foo')", + typedResult: { + result: { boolValue: true }, + deducedType: { primitive: "BOOL" }, + }, + }, + ast: '_+_(\n "foo"^#*expr.Constant_StringValue#,\n "bar"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#.startsWith(\n "foo"^#*expr.Constant_StringValue#\n)^#*expr.Expr_CallExpr#', + checkedAst: + '_+_(\n "foo"~string,\n "bar"~string\n)~string^add_string.startsWith(\n "foo"~string\n)~bool^starts_with_string', + type: "bool", + }, + { + original: { + name: "function_result_type", + expr: "fn('abc', 123)", + checkOnly: true, + typeEnv: [ + { + name: "fn", + function: { + overloads: [ + { + overloadId: "fn_string_int", + params: [ + { primitive: "STRING" }, + { primitive: "INT64" }, + ], + resultType: { primitive: "STRING" }, + }, + ], + }, + }, + ], + typedResult: { deducedType: { primitive: "STRING" } }, + }, + ast: 'fn(\n "abc"^#*expr.Constant_StringValue#,\n 123^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#', + checkedAst: + 'fn(\n "abc"~string,\n 123~int\n)~string^fn_string_int', + type: "string", + }, + ], + }, + { + name: "flexible_type_parameter_assignment", + tests: [ + { + original: { + name: "list_parameter", + expr: "[[], [[]], [[[]]], [[[[]]]]]", + checkOnly: true, + typedResult: { + deducedType: { + listType: { + elemType: { + listType: { + elemType: { + listType: { + elemType: { + listType: { + elemType: { + listType: { elemType: { dyn: {} } }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + ast: "[\n []^#*expr.Expr_ListExpr#,\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n [\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n []~list(list(list(list(dyn)))),\n [\n []~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n [\n [\n []~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n [\n [\n [\n []~list(dyn)\n ]~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn))))\n]~list(list(list(list(list(dyn)))))", + type: "list(list(list(list(list(dyn)))))", + }, + { + original: { + name: "list_parameter_order_independent", + expr: "[[[[[]]]], [], [[[]]]]", + checkOnly: true, + typedResult: { + deducedType: { + listType: { + elemType: { + listType: { + elemType: { + listType: { + elemType: { + listType: { + elemType: { + listType: { elemType: { dyn: {} } }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + ast: "[\n [\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#,\n []^#*expr.Expr_ListExpr#,\n [\n [\n []^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n ]^#*expr.Expr_ListExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n [\n [\n [\n []~list(dyn)\n ]~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn)))),\n []~list(list(list(list(dyn)))),\n [\n [\n []~list(list(dyn))\n ]~list(list(list(dyn)))\n ]~list(list(list(list(dyn))))\n]~list(list(list(list(list(dyn)))))", + type: "list(list(list(list(list(dyn)))))", + }, + { + original: { + name: "comprehension_type_var_aliasing", + expr: "msg.repeated_nested_message.map(x, x).map(y, y.bb)", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { + deducedType: { + listType: { elemType: { primitive: "INT64" } }, + }, + }, + }, + ast: "__comprehension__(\n // Variable\n y,\n // Target\n __comprehension__(\n // Variable\n x,\n // Target\n msg^#*expr.Expr_IdentExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n y^#*expr.Expr_IdentExpr#.bb^#*expr.Expr_SelectExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#", + checkedAst: + "__comprehension__(\n // Variable\n y,\n // Target\n __comprehension__(\n // Variable\n x,\n // Target\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // Accumulator\n @result,\n // Init\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^@result,\n [\n x~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^x\n ]~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n // Result\n @result~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^@result)~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n // Accumulator\n @result,\n // Init\n []~list(int),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(int)^@result,\n [\n y~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^y.bb~int\n ]~list(int)\n )~list(int)^add_list,\n // Result\n @result~list(int)^@result)~list(int)", + type: "list(int)", + }, + { + original: { + name: "overload_type_var_aliasing", + expr: "([] + msg.repeated_nested_message + [])[0].bb", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { deducedType: { primitive: "INT64" } }, + }, + ast: "_[_](\n _+_(\n _+_(\n []^#*expr.Expr_ListExpr#,\n msg^#*expr.Expr_IdentExpr#.repeated_nested_message^#*expr.Expr_SelectExpr#\n )^#*expr.Expr_CallExpr#,\n []^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.bb^#*expr.Expr_SelectExpr#", + checkedAst: + "_[_](\n _+_(\n _+_(\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.repeated_nested_message~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n []~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)\n )~list(cel.expr.conformance.proto3.TestAllTypes.NestedMessage)^add_list,\n 0~int\n)~cel.expr.conformance.proto3.TestAllTypes.NestedMessage^index_list.bb~int", + type: "int", + }, + { + original: { + name: "unconstrained_type_var_as_dyn", + expr: "([].map(x,x))[0].foo", + checkOnly: true, + typedResult: { deducedType: { dyn: {} } }, + }, + ast: "_[_](\n __comprehension__(\n // Variable\n x,\n // Target\n []^#*expr.Expr_ListExpr#,\n // Accumulator\n @result,\n // Init\n []^#*expr.Expr_ListExpr#,\n // LoopCondition\n true^#*expr.Constant_BoolValue#,\n // LoopStep\n _+_(\n @result^#*expr.Expr_IdentExpr#,\n [\n x^#*expr.Expr_IdentExpr#\n ]^#*expr.Expr_ListExpr#\n )^#*expr.Expr_CallExpr#,\n // Result\n @result^#*expr.Expr_IdentExpr#)^#*expr.Expr_ComprehensionExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#.foo^#*expr.Expr_SelectExpr#", + checkedAst: + "_[_](\n __comprehension__(\n // Variable\n x,\n // Target\n []~list(dyn),\n // Accumulator\n @result,\n // Init\n []~list(dyn),\n // LoopCondition\n true~bool,\n // LoopStep\n _+_(\n @result~list(dyn)^@result,\n [\n x~dyn^x\n ]~list(dyn)\n )~list(dyn)^add_list,\n // Result\n @result~list(dyn)^@result)~list(dyn),\n 0~int\n)~dyn^index_list.foo~dyn", + type: "dyn", + }, + { + original: { + name: "list_parameters_do_not_unify", + expr: "[msg.single_int64_wrapper, msg.single_string_wrapper]", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { + deducedType: { listType: { elemType: { dyn: {} } } }, + }, + }, + ast: "[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_string_wrapper^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_string_wrapper~wrapper(string)\n]~list(dyn)", + type: "list(dyn)", + }, + { + original: { + name: "optional_none", + expr: "[optional.none(), optional.of(1)]", + checkOnly: true, + typedResult: { + deducedType: { + listType: { + elemType: { + abstractType: { + name: "optional_type", + parameterTypes: [{ primitive: "INT64" }], + }, + }, + }, + }, + }, + }, + ast: "[\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n optional.none()~optional_type(int)^optional_none,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n]~list(optional_type(int))", + type: "list(optional_type(int))", + }, + { + original: { + name: "optional_none_2", + expr: "[optional.of(1), optional.none()]", + checkOnly: true, + typedResult: { + deducedType: { + listType: { + elemType: { + abstractType: { + name: "optional_type", + parameterTypes: [{ primitive: "INT64" }], + }, + }, + }, + }, + }, + }, + ast: "[\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.none()^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.none()~optional_type(int)^optional_none\n]~list(optional_type(int))", + type: "list(optional_type(int))", + }, + { + original: { + name: "optional_dyn_promotion", + expr: "[optional.of(1), optional.of(dyn(1))]", + checkOnly: true, + typedResult: { + deducedType: { + listType: { + elemType: { + abstractType: { + name: "optional_type", + parameterTypes: [{ dyn: {} }], + }, + }, + }, + }, + }, + }, + ast: "[\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of\n]~list(optional_type(dyn))", + type: "list(optional_type(dyn))", + }, + { + original: { + name: "optional_dyn_promotion_2", + expr: "[optional.of(dyn(1)), optional.of(1)]", + checkOnly: true, + typedResult: { + deducedType: { + listType: { + elemType: { + abstractType: { + name: "optional_type", + parameterTypes: [{ dyn: {} }], + }, + }, + }, + }, + }, + }, + ast: "[\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n]~list(optional_type(dyn))", + type: "list(optional_type(dyn))", + }, + { + original: { + name: "optional_in_ternary", + expr: "true ? optional.of(dyn(1)) : optional.of(1)", + checkOnly: true, + typedResult: { + deducedType: { + abstractType: { + name: "optional_type", + parameterTypes: [{ dyn: {} }], + }, + }, + }, + }, + ast: "_?_:_(\n true^#*expr.Constant_BoolValue#,\n optional^#*expr.Expr_IdentExpr#.of(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#,\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n true~bool,\n optional.of(\n dyn(\n 1~int\n )~dyn^to_dyn\n )~optional_type(dyn)^optional_of,\n optional.of(\n 1~int\n )~optional_type(int)^optional_of\n)~optional_type(dyn)^conditional", + type: "optional_type(dyn)", + }, + ], + }, + { + name: "wrappers", + tests: [ + { + original: { + name: "wrapper_promotion", + expr: "[msg.single_int64_wrapper, msg.single_int64]", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { + deducedType: { listType: { elemType: { wrapper: "INT64" } } }, + }, + }, + ast: "[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int\n]~list(wrapper(int))", + type: "list(wrapper(int))", + }, + { + original: { + name: "wrapper_promotion_2", + expr: "[msg.single_int64, msg.single_int64_wrapper]", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { + deducedType: { listType: { elemType: { wrapper: "INT64" } } }, + }, + }, + ast: "[\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int)\n]~list(int)", + type: "list(int)", + }, + { + original: { + name: "wrapper_dyn_promotion", + expr: "[msg.single_int64_wrapper, msg.single_int64, dyn(1)]", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { + deducedType: { listType: { elemType: { dyn: {} } } }, + }, + }, + ast: "[\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#,\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int,\n dyn(\n 1~int\n )~dyn^to_dyn\n]~list(dyn)", + type: "list(dyn)", + }, + { + original: { + name: "wrapper_dyn_promotion_2", + expr: "[dyn(1), msg.single_int64_wrapper, msg.single_int64]", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { + deducedType: { listType: { elemType: { dyn: {} } } }, + }, + }, + ast: "[\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n msg^#*expr.Expr_IdentExpr#.single_int64^#*expr.Expr_SelectExpr#\n]^#*expr.Expr_ListExpr#", + checkedAst: + "[\n dyn(\n 1~int\n )~dyn^to_dyn,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64~int\n]~list(dyn)", + type: "list(dyn)", + }, + { + original: { + name: "wrapper_primitive_assignable", + expr: "msg.single_int64_wrapper + 1", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { deducedType: { primitive: "INT64" } }, + }, + ast: "_+_(\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n 1^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_+_(\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n 1~int\n)~int^add_int64", + type: "int", + }, + { + original: { + name: "wrapper_null_assignable", + expr: "msg.single_int64_wrapper == null", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { deducedType: { primitive: "BOOL" } }, + }, + ast: "_==_(\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n null~null\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "wrapper_ternary_parameter_assignment", + expr: "false ? msg.single_int64_wrapper : null", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { deducedType: { wrapper: "INT64" } }, + }, + ast: "_?_:_(\n false^#*expr.Constant_BoolValue#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n false~bool,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n null~null\n)~wrapper(int)^conditional", + type: "wrapper(int)", + }, + { + original: { + name: "wrapper_ternary_parameter_assignment_2", + expr: "true ? msg.single_int64_wrapper : 42", + checkOnly: true, + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + typedResult: { deducedType: { wrapper: "INT64" } }, + }, + ast: "_?_:_(\n true^#*expr.Constant_BoolValue#,\n msg^#*expr.Expr_IdentExpr#.single_int64_wrapper^#*expr.Expr_SelectExpr#,\n 42^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_?_:_(\n true~bool,\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_int64_wrapper~wrapper(int),\n 42~int\n)~wrapper(int)^conditional", + type: "wrapper(int)", + }, + ], + }, + { + name: "type_parameters", + tests: [ + { + original: { + name: "multiple_parameters_generality", + expr: "[tuple(1, 2u, 3.0), tuple(dyn(1), dyn(2u), dyn(3.0))][0]", + checkOnly: true, + typeEnv: [ + { + name: "tuple", + function: { + overloads: [ + { + overloadId: "tuple_T_U_V", + params: [ + { typeParam: "T" }, + { typeParam: "U" }, + { typeParam: "V" }, + ], + resultType: { + abstractType: { + name: "tuple", + parameterTypes: [ + { typeParam: "T" }, + { typeParam: "U" }, + { typeParam: "V" }, + ], + }, + }, + }, + ], + }, + }, + ], + typedResult: { + deducedType: { + abstractType: { + name: "tuple", + parameterTypes: [{ dyn: {} }, { dyn: {} }, { dyn: {} }], + }, + }, + }, + }, + ast: "_[_](\n [\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V,\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n dyn(\n 3~double\n )~dyn^to_dyn\n )~tuple(dyn, dyn, dyn)^tuple_T_U_V\n ]~list(tuple(dyn, dyn, dyn)),\n 0~int\n)~tuple(dyn, dyn, dyn)^index_list", + type: "tuple(dyn, dyn, dyn)", + }, + { + original: { + name: "multiple_parameters_generality_2", + expr: "sort(tuple(dyn(1), 2u, 3.0))", + checkOnly: true, + typeEnv: [ + { + name: "tuple", + function: { + overloads: [ + { + overloadId: "tuple_T_U_V", + params: [ + { typeParam: "T" }, + { typeParam: "U" }, + { typeParam: "V" }, + ], + resultType: { + abstractType: { + name: "tuple", + parameterTypes: [ + { typeParam: "T" }, + { typeParam: "U" }, + { typeParam: "V" }, + ], + }, + }, + }, + ], + }, + }, + { + name: "sort", + function: { + overloads: [ + { + overloadId: "sort_tuple_T_T_T", + params: [ + { + abstractType: { + name: "tuple", + parameterTypes: [ + { typeParam: "T" }, + { typeParam: "T" }, + { typeParam: "T" }, + ], + }, + }, + ], + resultType: { + abstractType: { + name: "tuple", + parameterTypes: [ + { typeParam: "T" }, + { typeParam: "T" }, + { typeParam: "T" }, + ], + }, + }, + }, + ], + }, + }, + ], + typedResult: { + deducedType: { + abstractType: { + name: "tuple", + parameterTypes: [{ dyn: {} }, { dyn: {} }, { dyn: {} }], + }, + }, + }, + }, + ast: "sort(\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "sort(\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n 2u~uint,\n 3~double\n )~tuple(dyn, uint, double)^tuple_T_U_V\n)~tuple(dyn, dyn, dyn)^sort_tuple_T_T_T", + type: "tuple(dyn, dyn, dyn)", + }, + { + original: { + name: "multiple_parameters_parameterized_ovl", + expr: "tuple(1, 2u, 3.0) == tuple(1, dyn(2u), dyn(3.0))", + checkOnly: true, + typeEnv: [ + { + name: "tuple", + function: { + overloads: [ + { + overloadId: "tuple_T_U_V", + params: [ + { typeParam: "T" }, + { typeParam: "U" }, + { typeParam: "V" }, + ], + resultType: { + abstractType: { + name: "tuple", + parameterTypes: [ + { typeParam: "T" }, + { typeParam: "U" }, + { typeParam: "V" }, + ], + }, + }, + }, + ], + }, + }, + ], + typedResult: { deducedType: { primitive: "BOOL" } }, + }, + ast: "_==_(\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n 1^#*expr.Constant_Int64Value#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V,\n tuple(\n 1~int,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n dyn(\n 3~double\n )~dyn^to_dyn\n )~tuple(int, dyn, dyn)^tuple_T_U_V\n)~bool^equals", + type: "bool", + }, + { + original: { + name: "multiple_parameters_parameterized_ovl_2", + expr: "tuple(dyn(1), dyn(2u), 3.0) == tuple(1, 2u, 3.0)", + checkOnly: true, + typeEnv: [ + { + name: "tuple", + function: { + overloads: [ + { + overloadId: "tuple_T_U_V", + params: [ + { typeParam: "T" }, + { typeParam: "U" }, + { typeParam: "V" }, + ], + resultType: { + abstractType: { + name: "tuple", + parameterTypes: [ + { typeParam: "T" }, + { typeParam: "U" }, + { typeParam: "V" }, + ], + }, + }, + }, + ], + }, + }, + ], + typedResult: { deducedType: { primitive: "BOOL" } }, + }, + ast: "_==_(\n tuple(\n dyn(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n dyn(\n 2u^#*expr.Constant_Uint64Value#\n )^#*expr.Expr_CallExpr#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#,\n tuple(\n 1^#*expr.Constant_Int64Value#,\n 2u^#*expr.Constant_Uint64Value#,\n 3^#*expr.Constant_DoubleValue#\n )^#*expr.Expr_CallExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n tuple(\n dyn(\n 1~int\n )~dyn^to_dyn,\n dyn(\n 2u~uint\n )~dyn^to_dyn,\n 3~double\n )~tuple(dyn, dyn, double)^tuple_T_U_V,\n tuple(\n 1~int,\n 2u~uint,\n 3~double\n )~tuple(int, uint, double)^tuple_T_U_V\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "legacy_nullable_types", + tests: [ + { + original: { + name: "null_assignable_to_message_parameter_candidate", + expr: "[msg, null][0]", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + }, + typedResult: { + result: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + }, + }, + deducedType: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ast: "_[_](\n [\n msg^#*expr.Expr_IdentExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list", + type: "null", + }, + { + original: { + name: "null_assignable_to_duration_parameter_candidate", + expr: "[msg.single_duration, null][0]", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + }, + typedResult: { + result: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Duration", + value: "0s", + }, + }, + deducedType: { wellKnown: "DURATION" }, + }, + }, + ast: "_[_](\n [\n msg^#*expr.Expr_IdentExpr#.single_duration^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_duration~duration,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list", + type: "null", + }, + { + original: { + name: "null_assignable_to_timestamp_parameter_candidate", + expr: "[msg.single_timestamp, null][0]", + typeEnv: [ + { + name: "msg", + ident: { + type: { + messageType: "cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + ], + bindings: { + msg: { + value: { + objectValue: { + "@type": + "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", + }, + }, + }, + }, + typedResult: { + result: { + objectValue: { + "@type": "type.googleapis.com/google.protobuf.Timestamp", + value: "1970-01-01T00:00:00Z", + }, + }, + deducedType: { wellKnown: "TIMESTAMP" }, + }, + }, + ast: "_[_](\n [\n msg^#*expr.Expr_IdentExpr#.single_timestamp^#*expr.Expr_SelectExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n msg~cel.expr.conformance.proto3.TestAllTypes^msg.single_timestamp~timestamp,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list", + type: "null", + }, + { + original: { + name: "null_assignable_to_abstract_parameter_candidate", + expr: "[optional.of(1), null][0]", + checkOnly: true, + typedResult: { + deducedType: { + abstractType: { + name: "optional_type", + parameterTypes: [{ primitive: "INT64" }], + }, + }, + }, + }, + ast: "_[_](\n [\n optional^#*expr.Expr_IdentExpr#.of(\n 1^#*expr.Constant_Int64Value#\n )^#*expr.Expr_CallExpr#,\n null^#*expr.Constant_NullValue#\n ]^#*expr.Expr_ListExpr#,\n 0^#*expr.Constant_Int64Value#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_[_](\n [\n optional.of(\n 1~int\n )~optional_type(int)^optional_of,\n null~null\n ]~list(null),\n 0~int\n)~null^index_list", + type: "null", + }, + ], + }, + ], + }, + { name: "unknowns" }, + { + name: "wrappers", + suites: [ + { + name: "bool", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.BoolValue{value: true}}.single_any", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_any:google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.BoolValue{value: true}}.single_value", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.BoolValue{\n value:true^#*expr.Constant_BoolValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.BoolValue{\n value:true~bool\n }~wrapper(bool)^google.protobuf.BoolValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_bool_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_bool_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_bool_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "int32", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.Int32Value{value: 1}}.single_any", + container: "cel.expr.conformance.proto3", + value: { int64Value: "1" }, + }, + ast: "TestAllTypes{\n single_any:google.protobuf.Int32Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Int32Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.Int32Value{value: 1}}.single_value", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 1 }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.Int32Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int32Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_int32_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_int32_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int32_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "int64", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.Int64Value{value: 1}}.single_any", + container: "cel.expr.conformance.proto3", + value: { int64Value: "1" }, + }, + ast: "TestAllTypes{\n single_any:google.protobuf.Int64Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.Int64Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "to_json_number", + expr: "TestAllTypes{single_value: google.protobuf.Int64Value{value: 1}}.single_value", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 1 }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:1^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:1~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_json_string", + expr: "TestAllTypes{single_value: google.protobuf.Int64Value{value: 9223372036854775807}}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "9223372036854775807" }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:9223372036854775807^#*expr.Constant_Int64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Int64Value{\n value:9223372036854775807~int\n }~wrapper(int)^google.protobuf.Int64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_int64_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_int64_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_int64_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "uint32", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.UInt32Value{value: 1u}}.single_any", + container: "cel.expr.conformance.proto3", + value: { uint64Value: "1" }, + }, + ast: "TestAllTypes{\n single_any:google.protobuf.UInt32Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.UInt32Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.UInt32Value{value: 1u}}.single_value", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 1 }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.UInt32Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt32Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt32Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_uint32_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_uint32_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_uint32_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "uint64", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.UInt64Value{value: 1u}}.single_any", + container: "cel.expr.conformance.proto3", + value: { uint64Value: "1" }, + }, + ast: "TestAllTypes{\n single_any:google.protobuf.UInt64Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.UInt64Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "to_json_number", + expr: "TestAllTypes{single_value: google.protobuf.UInt64Value{value: 1u}}.single_value", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 1 }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:1u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:1u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_json_string", + expr: "TestAllTypes{single_value: google.protobuf.UInt64Value{value: 18446744073709551615u}}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "18446744073709551615" }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:18446744073709551615u^#*expr.Constant_Uint64Value#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.UInt64Value{\n value:18446744073709551615u~uint\n }~wrapper(uint)^google.protobuf.UInt64Value\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_uint64_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_uint64_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_uint64_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "float", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.FloatValue{value: 1.0}}.single_any", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 1 }, + }, + ast: "TestAllTypes{\n single_any:google.protobuf.FloatValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.FloatValue{\n value:1~double\n }~wrapper(double)^google.protobuf.FloatValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.FloatValue{value: 1.0}}.single_value", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 1 }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.FloatValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.FloatValue{\n value:1~double\n }~wrapper(double)^google.protobuf.FloatValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_float_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_float_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_float_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "double", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.DoubleValue{value: 1.0}}.single_any", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 1 }, + }, + ast: "TestAllTypes{\n single_any:google.protobuf.DoubleValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.DoubleValue{\n value:1~double\n }~wrapper(double)^google.protobuf.DoubleValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.DoubleValue{value: 1.0}}.single_value", + container: "cel.expr.conformance.proto3", + value: { doubleValue: 1 }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.DoubleValue{\n value:1^#*expr.Constant_DoubleValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.DoubleValue{\n value:1~double\n }~wrapper(double)^google.protobuf.DoubleValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_double_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_double_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_double_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "bytes", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.BytesValue{value: b'foo'}}.single_any", + container: "cel.expr.conformance.proto3", + value: { bytesValue: "Zm9v" }, + }, + ast: 'TestAllTypes{\n single_any:google.protobuf.BytesValue{\n value:b"foo"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.BytesValue{\n value:b"foo"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any', + type: "any", + }, + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.BytesValue{value: b'foo'}}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "Zm9v" }, + }, + ast: 'TestAllTypes{\n single_value:google.protobuf.BytesValue{\n value:b"foo"^#*expr.Constant_BytesValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.BytesValue{\n value:b"foo"~bytes\n }~wrapper(bytes)^google.protobuf.BytesValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_bytes_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_bytes_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_bytes_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "string", + tests: [ + { + original: { + name: "to_any", + expr: "TestAllTypes{single_any: google.protobuf.StringValue{value: 'foo'}}.single_any", + container: "cel.expr.conformance.proto3", + value: { stringValue: "foo" }, + }, + ast: 'TestAllTypes{\n single_any:google.protobuf.StringValue{\n value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_any:google.protobuf.StringValue{\n value:"foo"~string\n }~wrapper(string)^google.protobuf.StringValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any', + type: "any", + }, + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.StringValue{value: 'foo'}}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "foo" }, + }, + ast: 'TestAllTypes{\n single_value:google.protobuf.StringValue{\n value:"foo"^#*expr.Constant_StringValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.StringValue{\n value:"foo"~string\n }~wrapper(string)^google.protobuf.StringValue\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + { + original: { + name: "to_null", + expr: "TestAllTypes{single_string_wrapper: null} == TestAllTypes{}", + container: "cel.expr.conformance.proto3", + value: { boolValue: true }, + }, + ast: "_==_(\n TestAllTypes{\n single_string_wrapper:null^#*expr.Constant_NullValue#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#,\n TestAllTypes{}^#*expr.Expr_StructExpr#\n)^#*expr.Expr_CallExpr#", + checkedAst: + "_==_(\n cel.expr.conformance.proto3.TestAllTypes{\n single_string_wrapper:null~null\n }~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes,\n cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes\n)~bool^equals", + type: "bool", + }, + ], + }, + { + name: "value", + tests: [ + { + original: { + name: "default_to_json", + expr: "TestAllTypes{single_any: TestAllTypes{}.single_value}.single_any", + container: "cel.expr.conformance.proto3", + value: { nullValue: null }, + }, + ast: "TestAllTypes{\n single_any:TestAllTypes{}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:cel.expr.conformance.proto3.TestAllTypes{}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + ], + }, + { + name: "list_value", + tests: [ + { + original: { + name: "literal_to_any", + expr: "TestAllTypes{single_any: []}.single_any", + container: "cel.expr.conformance.proto3", + value: { listValue: {} }, + }, + ast: "TestAllTypes{\n single_any:[]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:[]~list(dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + ], + }, + { + name: "struct", + tests: [ + { + original: { + name: "literal_to_any", + expr: "TestAllTypes{single_any: {}}.single_any", + container: "cel.expr.conformance.proto3", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{\n single_any:{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_any^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_any:{}~map(dyn, dyn)\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_any~any", + type: "any", + }, + ], + }, + { + name: "field_mask", + tests: [ + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.FieldMask{paths: ['foo', 'bar']}}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "foo,bar" }, + }, + ast: 'TestAllTypes{\n single_value:google.protobuf.FieldMask{\n paths:[\n "foo"^#*expr.Constant_StringValue#,\n "bar"^#*expr.Constant_StringValue#\n ]^#*expr.Expr_ListExpr#^#*expr.Expr_CreateStruct_Entry#\n }^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.FieldMask{\n paths:[\n "foo"~string,\n "bar"~string\n ]~list(string)\n }~google.protobuf.FieldMask^google.protobuf.FieldMask\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + ], + }, + { + name: "duration", + tests: [ + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: duration('1000000s')}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "1000000s" }, + }, + ast: 'TestAllTypes{\n single_value:duration(\n "1000000s"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:duration(\n "1000000s"~string\n )~duration^string_to_duration\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + ], + }, + { + name: "timestamp", + tests: [ + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: timestamp('9999-12-31T23:59:59.999999999Z')}.single_value", + container: "cel.expr.conformance.proto3", + value: { stringValue: "9999-12-31T23:59:59.999999999Z" }, + }, + ast: 'TestAllTypes{\n single_value:timestamp(\n "9999-12-31T23:59:59.999999999Z"^#*expr.Constant_StringValue#\n )^#*expr.Expr_CallExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#', + checkedAst: + 'cel.expr.conformance.proto3.TestAllTypes{\n single_value:timestamp(\n "9999-12-31T23:59:59.999999999Z"~string\n )~timestamp^string_to_timestamp\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn', + type: "dyn", + }, + ], + }, + { + name: "empty", + tests: [ + { + original: { + name: "to_json", + expr: "TestAllTypes{single_value: google.protobuf.Empty{}}.single_value", + container: "cel.expr.conformance.proto3", + value: { mapValue: {} }, + }, + ast: "TestAllTypes{\n single_value:google.protobuf.Empty{}^#*expr.Expr_StructExpr#^#*expr.Expr_CreateStruct_Entry#\n}^#*expr.Expr_StructExpr#.single_value^#*expr.Expr_SelectExpr#", + checkedAst: + "cel.expr.conformance.proto3.TestAllTypes{\n single_value:google.protobuf.Empty{}~google.protobuf.Empty^google.protobuf.Empty\n}~cel.expr.conformance.proto3.TestAllTypes^cel.expr.conformance.proto3.TestAllTypes.single_value~dyn", + type: "dyn", + }, + ], + }, + ], + }, + ], +} as const; diff --git a/packages/cel/src/checker.test.ts b/packages/cel/src/checker.test.ts index 52af699..6fb6ad3 100644 --- a/packages/cel/src/checker.test.ts +++ b/packages/cel/src/checker.test.ts @@ -64,7 +64,6 @@ const filter = createExpressionFilter([ `lists.filter(x, x > 1.5)`, `.google.expr.proto3.test.TestAllTypes`, `test.TestAllTypes`, - `x`, `list == type([1]) && map == type({1:2u})`, `myfun(1, true, 3u) + 1.myfun(false, 3u).myfun(true, 42u)`, `size(x) > 4`, diff --git a/packages/cel/src/checker.ts b/packages/cel/src/checker.ts index ed04c70..4c00d75 100644 --- a/packages/cel/src/checker.ts +++ b/packages/cel/src/checker.ts @@ -46,7 +46,9 @@ import type { CelEnv } from "./env.js"; import { resolveCandidateNames } from "./namespace.js"; import { celError } from "./error.js"; import { isCelUint } from "./uint.js"; -import { createScope, type VariableScope } from "./scope.js"; +import { createScope } from "./scope.js"; + +const noopScope = createScope(); export class Checker { private readonly referenceMap: Map< @@ -54,15 +56,15 @@ export class Checker { MessageInitShape > = new Map(); private readonly typeMap: Map = new Map(); - private scope: VariableScope | undefined; + private scope = noopScope; constructor(private readonly env: CelEnv) {} check(expr: Expr, sourceInfo: SourceInfo | undefined): CheckedExpr { // Clear each time we check since Checker instances are cached per environment. - this.referenceMap.clear(); this.typeMap.clear(); - this.scope = createScope(); + this.scope = noopScope; + this.referenceMap.clear(); return create(CheckedExprSchema, { expr: this.checkExpr(expr), sourceInfo, @@ -132,30 +134,24 @@ export class Checker { id: bigint, ident: Expr_Ident, ): MessageInitShape { - const { type, requiresDisambiguation } = this.resolveSimpleVariableType( - ident.name, - ); - if (type) { - let name = ident.name; - if (requiresDisambiguation && !name.startsWith(".")) { - name = `.${name}`; - } - this.setType(id, type); - this.setReference(id, identReference(name)); - return { + const variable = this.resolveVariable(ident.name); + if (variable === undefined) { + throw celError( + `undeclared reference to '${ident.name}' (in container '${this.env.namespace}')`, id, - exprKind: { - case: "identExpr", - value: { - name, - }, - }, - }; + ); } - throw celError( - `undeclared reference to '${ident.name}' (in container '${this.env.namespace}')`, + this.setType(id, variable.type); + this.setReference(id, identReference(variable.name)); + return { id, - ); + exprKind: { + case: "identExpr", + value: { + name: variable.name, + }, + }, + }; } private setType(id: bigint, type: CelType): void { @@ -169,32 +165,39 @@ export class Checker { this.referenceMap.set(id, reference); } - private resolveSimpleVariableType(name: string): { - type: CelType | undefined; - requiresDisambiguation: boolean; - } { - const local = this.scope?.find(name); - // Local variables that do not start with a "." shadow global variables - // and do not require disambiguation. - if (local !== undefined && !name.startsWith(".")) { - return { - type: local, - requiresDisambiguation: false, - }; + /** + * Resolves a variable according to the CEL name resolution rules. + * + * See https://github.com/google/cel-spec/blob/master/doc/langdef.md#name-resolution + */ + private resolveVariable(name: string): + | { + name: string; + type: CelType; + } + | undefined { + // First we check for the variable to be in + // the comprehension scope chain if it is not global. + if (!name.startsWith(".")) { + const type = this.scope.find(name); + if (type !== undefined) { + return { + type, + name, + }; + } } + // It can be a global because either it is fully qualified or missing in comprehension scope. for (const candidate of resolveCandidateNames(this.env.namespace, name)) { const type = this.env.variables.find(candidate); if (type) { return { type, - requiresDisambiguation: local !== undefined, + name: candidate, // This is an optimization that allows us to partially skip name resolution during eval. }; } } - return { - type: undefined, - requiresDisambiguation: false, - }; + return undefined; } } diff --git a/packages/cel/src/scope.test.ts b/packages/cel/src/scope.test.ts index def1172..095be8c 100644 --- a/packages/cel/src/scope.test.ts +++ b/packages/cel/src/scope.test.ts @@ -64,39 +64,4 @@ void suite("scope", () => { assert.equal(popped, undefined); }); }); - void suite("find() flavors", () => { - void test("find()", () => { - const root = createScope({ a: CelScalar.INT }); - const child = root.push({ b: CelScalar.STRING }); - const grandChild = child.push({ c: CelScalar.BOOL }); - assert.equal(grandChild.find("a"), CelScalar.INT); - assert.equal(grandChild.find("b"), CelScalar.STRING); - assert.equal(grandChild.find("c"), CelScalar.BOOL); - }); - void test("findInScope()", () => { - const root = createScope({ a: CelScalar.INT }); - const child = root.push({ b: CelScalar.STRING }); - const grandChild = child.push({ c: CelScalar.BOOL }); - assert.equal(child.findInScope("a"), undefined); - assert.equal(child.findInScope("b"), CelScalar.STRING); - assert.equal(child.findInScope("c"), undefined); - assert.equal(grandChild.findInScope("a"), undefined); - assert.equal(grandChild.findInScope("b"), undefined); - assert.equal(grandChild.findInScope("c"), CelScalar.BOOL); - }); - }); - void suite("dot prefix", () => { - void test("dot prefix does not affect find()", () => { - const root = createScope({ a: CelScalar.INT }); - const child = root.push({ b: CelScalar.STRING }); - assert.equal(child.find(".a"), CelScalar.INT); - assert.equal(child.find(".b"), CelScalar.STRING); - }); - void test("dot prefix does not affect findInScope()", () => { - const root = createScope({ a: CelScalar.INT }); - const child = root.push({ b: CelScalar.STRING }); - assert.equal(child.findInScope(".a"), undefined); - assert.equal(child.findInScope(".b"), CelScalar.STRING); - }); - }); }); diff --git a/packages/cel/src/scope.ts b/packages/cel/src/scope.ts index 1b2cae1..9d18219 100644 --- a/packages/cel/src/scope.ts +++ b/packages/cel/src/scope.ts @@ -44,10 +44,6 @@ export interface VariableScope { * Finds the variable by name in the current scope or any parent scopes. */ find(name: string): CelType | undefined; - /** - * Finds a variable with a given name in the current scope only. - */ - findInScope(name: string): CelType | undefined; } /** @@ -98,17 +94,9 @@ class Scope } find(name: string): CelType | undefined { - const found = this.findInScope(name); - if (found !== undefined) { - return found; + if (this._variables.has(name)) { + return this._variables.get(name); } return this._parent?.find(name); } - - findInScope(name: string): CelType | undefined { - if (name.startsWith(".")) { - return this._variables.get(name.slice(1)); - } - return this._variables.get(name); - } }