sqlite / tests /tests_alter_renameSetENames.c
AryaWu's picture
Upload folder using huggingface_hub
7510827 verified
#include "sqliteInt.h"
#include "unity.h"
#include <stdlib.h>
#include <string.h>
/* Wrapper for the static function provided by the build system */
void test_renameSetENames(ExprList *pEList, int val);
/* Unity setup/teardown */
void setUp(void) {
/* Setup code here, or leave empty */
}
void tearDown(void) {
/* Cleanup code here, or leave empty */
}
/* Helpers to construct and destroy minimal ExprList instances */
static ExprList *makeExprList(int nExpr, int initEName){
ExprList *p = (ExprList*)sqlite3_malloc(sizeof(*p));
TEST_ASSERT_NOT_NULL(p);
memset(p, 0, sizeof(*p));
p->nExpr = nExpr;
p->nAlloc = nExpr;
if( nExpr>0 ){
p->a = (typeof(p->a))sqlite3_malloc(sizeof(p->a[0]) * (size_t)nExpr);
TEST_ASSERT_NOT_NULL(p->a);
memset(p->a, 0, sizeof(p->a[0]) * (size_t)nExpr);
for(int i=0; i<nExpr; i++){
p->a[i].fg.eEName = (u8)initEName;
}
}else{
p->a = 0;
}
return p;
}
static void freeExprList(ExprList *p){
if( p ){
if( p->a ) sqlite3_free(p->a);
sqlite3_free(p);
}
}
/* Tests */
void test_renameSetENames_null_list(void){
/* Should be a no-op and not crash */
test_renameSetENames(NULL, ENAME_NAME);
}
void test_renameSetENames_zero_length_list(void){
ExprList *p = makeExprList(0, ENAME_NAME);
test_renameSetENames(p, ENAME_TAB);
TEST_ASSERT_EQUAL_INT(0, p->nExpr);
TEST_ASSERT_EQUAL_INT(0, p->nAlloc); /* nAlloc set in helper equals 0 */
TEST_ASSERT_NULL(p->a);
freeExprList(p);
}
void test_renameSetENames_set_to_NAME_from_mixed_values(void){
/* Initial values can be anything when setting to ENAME_NAME */
ExprList *p = makeExprList(6, ENAME_TAB);
/* Mix in some different initial values */
if( p->nExpr >= 2 ){
p->a[1].fg.eEName = ENAME_SPAN;
}
if( p->nExpr >= 4 ){
p->a[3].fg.eEName = ENAME_NAME;
}
if( p->nExpr >= 6 ){
p->a[5].fg.eEName = ENAME_SPAN;
}
test_renameSetENames(p, ENAME_NAME);
for(int i=0; i<p->nExpr; i++){
TEST_ASSERT_EQUAL_INT(ENAME_NAME & 0x3, p->a[i].fg.eEName);
}
freeExprList(p);
}
void test_renameSetENames_set_to_TAB_from_NAME(void){
/* Must initialize all entries to ENAME_NAME to satisfy the internal assert */
ExprList *p = makeExprList(5, ENAME_NAME);
test_renameSetENames(p, ENAME_TAB);
for(int i=0; i<p->nExpr; i++){
TEST_ASSERT_EQUAL_INT(ENAME_TAB & 0x3, p->a[i].fg.eEName);
}
freeExprList(p);
}
void test_renameSetENames_set_to_SPAN_from_NAME(void){
ExprList *p = makeExprList(7, ENAME_NAME);
test_renameSetENames(p, ENAME_SPAN);
for(int i=0; i<p->nExpr; i++){
TEST_ASSERT_EQUAL_INT(ENAME_SPAN & 0x3, p->a[i].fg.eEName);
}
freeExprList(p);
}
int main(void){
UNITY_BEGIN();
RUN_TEST(test_renameSetENames_null_list);
RUN_TEST(test_renameSetENames_zero_length_list);
RUN_TEST(test_renameSetENames_set_to_NAME_from_mixed_values);
RUN_TEST(test_renameSetENames_set_to_TAB_from_NAME);
RUN_TEST(test_renameSetENames_set_to_SPAN_from_NAME);
return UNITY_END();
}