MCPcopy Create free account
hub / github.com/cel-expr/cel-go / TestFunctionMerge

Function TestFunctionMerge

common/decls/decls_test.go:388–441  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

386}
387
388func TestFunctionMerge(t *testing.T) {
389 sizeFunc, err := NewFunction("size",
390 FunctionDocs(`compute the number of entries in a list or map`),
391 MemberOverload("list_size",
392 []*types.Type{types.NewListType(types.NewTypeParamType("T"))}, types.IntType),
393 MemberOverload("map_size",
394 []*types.Type{types.NewMapType(types.NewTypeParamType("K"), types.NewTypeParamType("V"))}, types.IntType),
395 )
396 if err != nil {
397 t.Fatalf("NewFunction() failed: %v", err)
398 }
399 out, err := sizeFunc.Merge(sizeFunc)
400 if err != nil {
401 t.Errorf("sizeFunc.Merge(sizeFunc) failed: %v", err)
402 }
403 if out != sizeFunc {
404 t.Errorf("sizeFunc.Merge(sizeFunc) != sizeFunc: %v", out)
405 }
406 sizeVecFunc, err := NewFunction("size",
407 MemberOverload("vector_size",
408 []*types.Type{types.NewOpaqueType("vector", types.NewTypeParamType("T"))}, types.IntType),
409 SingletonUnaryBinding(func(sizer ref.Val) ref.Val {
410 return sizer.(traits.Sizer).Size()
411 }, traits.SizerType),
412 )
413 if err != nil {
414 t.Fatalf("NewFunction() failed: %v", err)
415 }
416 sizeMerged, err := sizeFunc.Merge(sizeVecFunc)
417 if err != nil {
418 t.Fatalf("Merge() failed: %v", err)
419 }
420 if sizeMerged.Name() != "size" {
421 t.Errorf("Merge() produced a function with name %v, wanted 'size'", sizeMerged.Name())
422 }
423 if len(sizeMerged.overloads) != 3 {
424 t.Errorf("Merge() produced %d overloads, wanted 3", len(sizeFunc.overloads))
425 }
426 if sizeMerged.Description() != "compute the number of entries in a list or map" {
427 t.Errorf("Description() got %s, wanted %s", sizeMerged.Description(),
428 "compute the number of entries in a list or map")
429 }
430 overloads := map[string]bool{
431 "list_size": true,
432 "map_size": true,
433 "vector_size": true,
434 }
435 for _, o := range sizeMerged.overloads {
436 delete(overloads, o.ID())
437 }
438 if len(overloads) != 0 {
439 t.Errorf("Merge() did not include overloads: %v", overloads)
440 }
441}
442
443func TestFunctionMergeWrongName(t *testing.T) {
444 sizeFunc, err := NewFunction("size",

Callers

nothing calls this directly

Calls 13

NewListTypeFunction · 0.92
NewTypeParamTypeFunction · 0.92
NewMapTypeFunction · 0.92
NewOpaqueTypeFunction · 0.92
MergeMethod · 0.80
NewFunctionFunction · 0.70
FunctionDocsFunction · 0.70
MemberOverloadFunction · 0.70
SingletonUnaryBindingFunction · 0.70
SizeMethod · 0.65
NameMethod · 0.65
DescriptionMethod · 0.65

Tested by

no test coverage detected