optimizer_impl_ut.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include <yql/essentials/parser/pg_wrapper/pg_compat.h>
  2. #include <library/cpp/testing/unittest/registar.h>
  3. #include <library/cpp/testing/hook/hook.h>
  4. #include <yql/essentials/parser/pg_wrapper/arena_ctx.h>
  5. #include "optimizer.h"
  6. extern "C" {
  7. #include <yql/essentials/parser/pg_wrapper/thread_inits.h>
  8. }
  9. #ifdef _WIN32
  10. #define __restrict
  11. #endif
  12. #define TypeName PG_TypeName
  13. #define SortBy PG_SortBy
  14. #undef SIZEOF_SIZE_T
  15. extern "C" {
  16. #include "optimizer/paths.h"
  17. }
  18. #undef TypeName
  19. #undef SortBy
  20. using namespace NYql;
  21. Y_UNIT_TEST_SUITE(PgOptimizerImpl) {
  22. Y_TEST_HOOK_BEFORE_RUN(InitTest) {
  23. pg_thread_init();
  24. }
  25. Y_UNIT_TEST(MakeVar) {
  26. TArenaMemoryContext ctx;
  27. auto* v1 = MakeVar(1, 1);
  28. UNIT_ASSERT(v1);
  29. UNIT_ASSERT_EQUAL(v1->varno, 1);
  30. UNIT_ASSERT_EQUAL(v1->varattno, 1);
  31. auto* v2 = MakeVar(2, 2);
  32. UNIT_ASSERT(v2);
  33. UNIT_ASSERT_EQUAL(v2->varno, 2);
  34. UNIT_ASSERT_EQUAL(v2->varattno, 2);
  35. }
  36. Y_UNIT_TEST(MakeRelOptInfo) {
  37. TArenaMemoryContext ctx;
  38. IOptimizer::TRel rel1 = {10, 100, {{}}};
  39. auto* r1 = MakeRelOptInfo(rel1, 1);
  40. UNIT_ASSERT(r1);
  41. UNIT_ASSERT_EQUAL(r1->reltarget->exprs->length, 1);
  42. UNIT_ASSERT_EQUAL(
  43. ((Var*)r1->reltarget->exprs->elements[0].ptr_value)->varattno, 1
  44. );
  45. UNIT_ASSERT_EQUAL(r1->pathlist->length, 1);
  46. UNIT_ASSERT_EQUAL(
  47. ((Path*)r1->pathlist->elements[0].ptr_value)->rows, 10
  48. );
  49. UNIT_ASSERT_EQUAL(
  50. ((Path*)r1->pathlist->elements[0].ptr_value)->total_cost, 100
  51. );
  52. IOptimizer::TRel rel2 = {100, 99, {{}, {}}};
  53. auto* r2 = MakeRelOptInfo(rel2, 2);
  54. UNIT_ASSERT(r2);
  55. UNIT_ASSERT_EQUAL(r2->reltarget->exprs->length, 2);
  56. }
  57. Y_UNIT_TEST(MakeRelOptInfoListNull) {
  58. TArenaMemoryContext ctx;
  59. auto* l = MakeRelOptInfoList({});
  60. UNIT_ASSERT(l == nullptr);
  61. }
  62. Y_UNIT_TEST(MakeRelOptInfoList) {
  63. TArenaMemoryContext ctx;
  64. IOptimizer::TRel rel1 = {10, 100, {{}}};
  65. IOptimizer::TRel rel2 = {100, 99, {{}}};
  66. IOptimizer::TInput input = {.Rels={rel1, rel2}};
  67. auto* l = MakeRelOptInfoList(input);
  68. UNIT_ASSERT(l);
  69. UNIT_ASSERT_EQUAL(l->length, 2);
  70. }
  71. } // PgOptimizerImpl