Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_expr_sqlite3ExprVectorSize.c200 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <stdlib.h>4#include <string.h>5 6/* Helpers to allocate and initialize internal structs needed by tests */7 8static ExprList* helperAllocExprList(int nExpr){9  ExprList *p = (ExprList*)sqlite3_malloc(sizeof(ExprList));10  TEST_ASSERT_NOT_NULL(p);11  memset(p, 0, sizeof(*p));12  p->nExpr = nExpr;13  return p;14}15 16static Select* helperAllocSelectWithNExpr(int nExpr){17  Select *pS = (Select*)sqlite3_malloc(sizeof(Select));18  TEST_ASSERT_NOT_NULL(pS);19  memset(pS, 0, sizeof(*pS));20 21  ExprList *pEList = helperAllocExprList(nExpr);22  pS->pEList = pEList;23  return pS;24}25 26static Expr* helperAllocExpr(void){27  Expr *p = (Expr*)sqlite3_malloc(sizeof(Expr));28  TEST_ASSERT_NOT_NULL(p);29  memset(p, 0, sizeof(*p));30  return p;31}32 33/* Constructors for the expressions we need */34 35static Expr* makeScalarExpr(int op){36  Expr *p = helperAllocExpr();37  p->op = (u8)op;38  return p;39}40 41static Expr* makeVectorExpr(int nExpr){42  Expr *p = helperAllocExpr();43  p->op = TK_VECTOR;44  p->x.pList = helperAllocExprList(nExpr);45  return p;46}47 48static Expr* makeSelectExpr(int nExpr){49  Expr *p = helperAllocExpr();50  p->op = TK_SELECT;51  p->x.pSelect = helperAllocSelectWithNExpr(nExpr);52  return p;53}54 55static Expr* makeRegisterOfVectorExpr(int nExpr){56  Expr *p = helperAllocExpr();57  p->op = TK_REGISTER;58  p->op2 = TK_VECTOR;59  p->x.pList = helperAllocExprList(nExpr);60  return p;61}62 63static Expr* makeRegisterOfSelectExpr(int nExpr){64  Expr *p = helperAllocExpr();65  p->op = TK_REGISTER;66  p->op2 = TK_SELECT;67  p->x.pSelect = helperAllocSelectWithNExpr(nExpr);68  return p;69}70 71static Expr* makeRegisterOfScalarExpr(int scalarOp){72  Expr *p = helperAllocExpr();73  p->op = TK_REGISTER;74  p->op2 = (u8)scalarOp;75  /* No x.* needed for scalar ops */76  return p;77}78 79/* Deep-free for the minimal allocations performed above */80 81static void helperFreeExpr(Expr *p){82  if( p==NULL ) return;83  u8 op = p->op;84  if( op==TK_REGISTER ) op = p->op2;85 86  if( op==TK_VECTOR ){87    if( p->x.pList ){88      sqlite3_free(p->x.pList);89      p->x.pList = NULL;90    }91  }else if( op==TK_SELECT ){92    if( p->x.pSelect ){93      if( p->x.pSelect->pEList ){94        sqlite3_free(p->x.pSelect->pEList);95        p->x.pSelect->pEList = NULL;96      }97      sqlite3_free(p->x.pSelect);98      p->x.pSelect = NULL;99    }100  }101  sqlite3_free(p);102}103 104/* Unity setup/teardown */105void setUp(void) {106  /* No global setup required */107}108void tearDown(void) {109  /* No global teardown required */110}111 112/* Tests */113 114void test_sqlite3ExprVectorSize_scalar_returns_one(void){115  Expr *p = makeScalarExpr(TK_INTEGER);116  int n = sqlite3ExprVectorSize(p);117  TEST_ASSERT_EQUAL_INT(1, n);118  helperFreeExpr(p);119}120 121void test_sqlite3ExprVectorSize_vector_counts_nexpr_small(void){122  Expr *p = makeVectorExpr(1);123  int n = sqlite3ExprVectorSize(p);124  TEST_ASSERT_EQUAL_INT(1, n);125  helperFreeExpr(p);126}127 128void test_sqlite3ExprVectorSize_vector_counts_nexpr_multi(void){129  Expr *p = makeVectorExpr(3);130  int n = sqlite3ExprVectorSize(p);131  TEST_ASSERT_EQUAL_INT(3, n);132  helperFreeExpr(p);133}134 135void test_sqlite3ExprVectorSize_select_counts_result_columns_single(void){136  Expr *p = makeSelectExpr(1);137  int n = sqlite3ExprVectorSize(p);138  TEST_ASSERT_EQUAL_INT(1, n);139  helperFreeExpr(p);140}141 142void test_sqlite3ExprVectorSize_select_counts_result_columns_multi(void){143  Expr *p = makeSelectExpr(5);144  int n = sqlite3ExprVectorSize(p);145  TEST_ASSERT_EQUAL_INT(5, n);146  helperFreeExpr(p);147}148 149void test_sqlite3ExprVectorSize_register_wrapped_vector(void){150  Expr *p = makeRegisterOfVectorExpr(4);151  int n = sqlite3ExprVectorSize(p);152  TEST_ASSERT_EQUAL_INT(4, n);153  helperFreeExpr(p);154}155 156void test_sqlite3ExprVectorSize_register_wrapped_select(void){157  Expr *p = makeRegisterOfSelectExpr(6);158  int n = sqlite3ExprVectorSize(p);159  TEST_ASSERT_EQUAL_INT(6, n);160  helperFreeExpr(p);161}162 163void test_sqlite3ExprVectorSize_register_wrapped_scalar_returns_one(void){164  Expr *p = makeRegisterOfScalarExpr(TK_INTEGER);165  int n = sqlite3ExprVectorSize(p);166  TEST_ASSERT_EQUAL_INT(1, n);167  helperFreeExpr(p);168}169 170void test_sqlite3ExprVectorSize_large_vector_count(void){171  int N = 100;172  Expr *p = makeVectorExpr(N);173  int n = sqlite3ExprVectorSize(p);174  TEST_ASSERT_EQUAL_INT(N, n);175  helperFreeExpr(p);176}177 178void test_sqlite3ExprVectorSize_large_select_count(void){179  int N = 128;180  Expr *p = makeSelectExpr(N);181  int n = sqlite3ExprVectorSize(p);182  TEST_ASSERT_EQUAL_INT(N, n);183  helperFreeExpr(p);184}185 186/* main */187int main(void){188  UNITY_BEGIN();189  RUN_TEST(test_sqlite3ExprVectorSize_scalar_returns_one);190  RUN_TEST(test_sqlite3ExprVectorSize_vector_counts_nexpr_small);191  RUN_TEST(test_sqlite3ExprVectorSize_vector_counts_nexpr_multi);192  RUN_TEST(test_sqlite3ExprVectorSize_select_counts_result_columns_single);193  RUN_TEST(test_sqlite3ExprVectorSize_select_counts_result_columns_multi);194  RUN_TEST(test_sqlite3ExprVectorSize_register_wrapped_vector);195  RUN_TEST(test_sqlite3ExprVectorSize_register_wrapped_select);196  RUN_TEST(test_sqlite3ExprVectorSize_register_wrapped_scalar_returns_one);197  RUN_TEST(test_sqlite3ExprVectorSize_large_vector_count);198  RUN_TEST(test_sqlite3ExprVectorSize_large_select_count);199  return UNITY_END();200}