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

Function TestFunctionMerge

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

Source from the content-addressed store, hash-verified

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