|
1 | 1 | package optimizer_test |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "fmt" |
5 | 4 | "reflect" |
6 | 5 | "strings" |
7 | 6 | "testing" |
@@ -340,124 +339,3 @@ func TestOptimize_filter_map_first(t *testing.T) { |
340 | 339 |
|
341 | 340 | assert.Equal(t, ast.Dump(expected), ast.Dump(tree.Node)) |
342 | 341 | } |
343 | | - |
344 | | -func TestOptimize_predicate_combination(t *testing.T) { |
345 | | - tests := []struct { |
346 | | - op string |
347 | | - fn string |
348 | | - wantOp string |
349 | | - }{ |
350 | | - {"and", "all", "and"}, |
351 | | - {"&&", "all", "&&"}, |
352 | | - {"or", "all", "or"}, |
353 | | - {"||", "all", "||"}, |
354 | | - {"and", "any", "and"}, |
355 | | - {"&&", "any", "&&"}, |
356 | | - {"or", "any", "or"}, |
357 | | - {"||", "any", "||"}, |
358 | | - {"and", "none", "or"}, |
359 | | - {"&&", "none", "||"}, |
360 | | - {"and", "one", "or"}, |
361 | | - {"&&", "one", "||"}, |
362 | | - } |
363 | | - |
364 | | - for _, tt := range tests { |
365 | | - rule := fmt.Sprintf(`%s(users, .Age > 18 and .Name != "Bob") %s %s(users, .Age < 30)`, tt.fn, tt.op, tt.fn) |
366 | | - t.Run(rule, func(t *testing.T) { |
367 | | - tree, err := parser.Parse(rule) |
368 | | - require.NoError(t, err) |
369 | | - |
370 | | - err = optimizer.Optimize(&tree.Node, nil) |
371 | | - require.NoError(t, err) |
372 | | - |
373 | | - expected := &ast.BuiltinNode{ |
374 | | - Name: tt.fn, |
375 | | - Arguments: []ast.Node{ |
376 | | - &ast.IdentifierNode{Value: "users"}, |
377 | | - &ast.ClosureNode{ |
378 | | - Node: &ast.BinaryNode{ |
379 | | - Operator: tt.wantOp, |
380 | | - Left: &ast.BinaryNode{ |
381 | | - Operator: "and", |
382 | | - Left: &ast.BinaryNode{ |
383 | | - Operator: ">", |
384 | | - Left: &ast.MemberNode{ |
385 | | - Node: &ast.PointerNode{}, |
386 | | - Property: &ast.StringNode{Value: "Age"}, |
387 | | - }, |
388 | | - Right: &ast.IntegerNode{Value: 18}, |
389 | | - }, |
390 | | - Right: &ast.BinaryNode{ |
391 | | - Operator: "!=", |
392 | | - Left: &ast.MemberNode{ |
393 | | - Node: &ast.PointerNode{}, |
394 | | - Property: &ast.StringNode{Value: "Name"}, |
395 | | - }, |
396 | | - Right: &ast.StringNode{Value: "Bob"}, |
397 | | - }, |
398 | | - }, |
399 | | - Right: &ast.BinaryNode{ |
400 | | - Operator: "<", |
401 | | - Left: &ast.MemberNode{ |
402 | | - Node: &ast.PointerNode{}, |
403 | | - Property: &ast.StringNode{Value: "Age"}, |
404 | | - }, |
405 | | - Right: &ast.IntegerNode{Value: 30}, |
406 | | - }, |
407 | | - }, |
408 | | - }, |
409 | | - }, |
410 | | - } |
411 | | - assert.Equal(t, ast.Dump(expected), ast.Dump(tree.Node)) |
412 | | - }) |
413 | | - } |
414 | | -} |
415 | | - |
416 | | -func TestOptimize_predicate_combination_nested(t *testing.T) { |
417 | | - tree, err := parser.Parse(`any(users, {all(.Friends, {.Age == 18 })}) && any(users, {all(.Friends, {.Name != "Bob" })})`) |
418 | | - require.NoError(t, err) |
419 | | - |
420 | | - err = optimizer.Optimize(&tree.Node, nil) |
421 | | - require.NoError(t, err) |
422 | | - |
423 | | - expected := &ast.BuiltinNode{ |
424 | | - Name: "any", |
425 | | - Arguments: []ast.Node{ |
426 | | - &ast.IdentifierNode{Value: "users"}, |
427 | | - &ast.ClosureNode{ |
428 | | - Node: &ast.BuiltinNode{ |
429 | | - Name: "all", |
430 | | - Arguments: []ast.Node{ |
431 | | - &ast.MemberNode{ |
432 | | - Node: &ast.PointerNode{}, |
433 | | - Property: &ast.StringNode{Value: "Friends"}, |
434 | | - }, |
435 | | - &ast.ClosureNode{ |
436 | | - Node: &ast.BinaryNode{ |
437 | | - Operator: "&&", |
438 | | - Left: &ast.BinaryNode{ |
439 | | - Operator: "==", |
440 | | - Left: &ast.MemberNode{ |
441 | | - Node: &ast.PointerNode{}, |
442 | | - Property: &ast.StringNode{Value: "Age"}, |
443 | | - }, |
444 | | - Right: &ast.IntegerNode{Value: 18}, |
445 | | - }, |
446 | | - Right: &ast.BinaryNode{ |
447 | | - Operator: "!=", |
448 | | - Left: &ast.MemberNode{ |
449 | | - Node: &ast.PointerNode{}, |
450 | | - Property: &ast.StringNode{Value: "Name"}, |
451 | | - }, |
452 | | - Right: &ast.StringNode{Value: "Bob"}, |
453 | | - }, |
454 | | - }, |
455 | | - }, |
456 | | - }, |
457 | | - }, |
458 | | - }, |
459 | | - }, |
460 | | - } |
461 | | - |
462 | | - assert.Equal(t, ast.Dump(expected), ast.Dump(tree.Node)) |
463 | | -} |
0 commit comments