func Match(t *spb.SimpleTest, actual *exprpb.ExprValue) error {
	switch t.ResultMatcher.(type) {
	case *spb.SimpleTest_Value:
		want := t.GetValue()
		switch actual.Kind.(type) {
		case *exprpb.ExprValue_Value:
			return MatchValue(t.Name, want, actual.GetValue())
		}
		return fmt.Errorf("Got %v, want value %v", actual, want)
	case *spb.SimpleTest_EvalError:
		switch actual.Kind.(type) {
		case *exprpb.ExprValue_Error:
			return nil
		}
		return fmt.Errorf("Got %v, want error", actual)
	case *spb.SimpleTest_Unknown:
		switch actual.Kind.(type) {
		case *exprpb.ExprValue_Error:
			return nil
		}
		return fmt.Errorf("Got %v, want unknown", actual)
	case nil:
		switch actual.Kind.(type) {
		case *exprpb.ExprValue_Value:
			return MatchValue(t.Name, trueval, actual.GetValue())
		}
		return fmt.Errorf("Got %v, want true", actual)
	}
	return fmt.Errorf("Unsupported matcher kind")
}
Match checks the expectation in the result matcher against the
actual result of evaluation.  Returns nil if the expectation
matches the actual, otherwise returns an error describing the difference.
Calling this function implies that the interpretation succeeded
in the parse and check phases.  See MatchValue() for the normalization
applied to values for matching.
package simple
import (
	"bytes"
	"context"
	"fmt"
	"github.com/google/cel-spec/tools/celrpc"
	"google.golang.org/protobuf/encoding/prototext"
	spb "github.com/google/cel-spec/proto/test/v1/testpb"
	confpb "google.golang.org/genproto/googleapis/api/expr/conformance/v1alpha1"
	exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
)
var (
	trueval = &exprpb.Value{Kind: &exprpb.Value_BoolValue{BoolValue: true}}
)