Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_build_sqlite3TableColumnToStorage.c159 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <stdlib.h>4#include <string.h>5 6/* Unity setup/teardown */7void setUp(void) {8  /* No global setup needed */9}10void tearDown(void) {11  /* No global teardown needed */12}13 14/* Helper to zero a Table structure fields we care about */15static void initTable(Table *pTab, Column *aCol, int nCol, int hasVirtual){16  memset(pTab, 0, sizeof(*pTab));17  pTab->nCol = (i16)nCol;18  pTab->aCol = aCol;19#ifndef SQLITE_OMIT_GENERATED_COLUMNS20  if( hasVirtual ){21    pTab->tabFlags |= TF_HasVirtual;22  }23#else24  (void)hasVirtual;25#endif26  /* Compute nNVCol based on COLFLAG_VIRTUAL */27  int i, nNV = 0;28  for(i=0; i<nCol; i++){29    if( (aCol[i].colFlags & COLFLAG_VIRTUAL)==0 ) nNV++;30  }31#ifndef SQLITE_OMIT_GENERATED_COLUMNS32  pTab->nNVCol = (i16)nNV;33#endif34}35 36/* Test: No virtual columns and no TF_HasVirtual flag -> identity mapping. */37void test_sqlite3TableColumnToStorage_noVirtualFlag_identity(void){38  Column cols[5];39  memset(cols, 0, sizeof(cols));40  Table tab;41  initTable(&tab, cols, 5, 0);42 43  TEST_ASSERT_EQUAL_INT(-1, sqlite3TableColumnToStorage(&tab, (i16)-1));44  for(int i=0; i<5; i++){45    TEST_ASSERT_EQUAL_INT(i, sqlite3TableColumnToStorage(&tab, (i16)i));46  }47}48 49/* Test: TF_HasVirtual set but all columns non-virtual -> identity mapping. */50void test_sqlite3TableColumnToStorage_hasVirtualFlag_but_no_virtual_columns_identity(void){51  Column cols[5];52  memset(cols, 0, sizeof(cols)); /* all non-virtual */53  Table tab;54  initTable(&tab, cols, 5, 1);55 56  TEST_ASSERT_EQUAL_INT(-1, sqlite3TableColumnToStorage(&tab, (i16)-1));57  for(int i=0; i<5; i++){58    TEST_ASSERT_EQUAL_INT(i, sqlite3TableColumnToStorage(&tab, (i16)i));59  }60}61 62/* Test: Documented mapping example:63   CREATE TABLE ex(N,S,V,N,S,V,N,S,V);64   inputs:  0 1 2 3 4 5 6 7 865   outputs: 0 1 6 2 3 7 4 5 866*/67void test_sqlite3TableColumnToStorage_document_example(void){68  Column cols[9];69  memset(cols, 0, sizeof(cols));70  /* Mark virtual columns: positions 2,5,8 */71  cols[2].colFlags |= COLFLAG_VIRTUAL;72  cols[5].colFlags |= COLFLAG_VIRTUAL;73  cols[8].colFlags |= COLFLAG_VIRTUAL;74 75  Table tab;76  initTable(&tab, cols, 9, 1);77 78  int expected[9] = {0,1,6,2,3,7,4,5,8};79  for(int i=0; i<9; i++){80    TEST_ASSERT_EQUAL_INT(expected[i],81      sqlite3TableColumnToStorage(&tab, (i16)i));82  }83}84 85/* Test: Leading virtuals: V, V, N -> expect [1,2,0] */86void test_sqlite3TableColumnToStorage_leading_virtuals(void){87  Column cols[3];88  memset(cols, 0, sizeof(cols));89  cols[0].colFlags |= COLFLAG_VIRTUAL;90  cols[1].colFlags |= COLFLAG_VIRTUAL;91  /* cols[2] non-virtual */92 93  Table tab;94  initTable(&tab, cols, 3, 1);95 96  TEST_ASSERT_EQUAL_INT(1, sqlite3TableColumnToStorage(&tab, (i16)0));97  TEST_ASSERT_EQUAL_INT(2, sqlite3TableColumnToStorage(&tab, (i16)1));98  TEST_ASSERT_EQUAL_INT(0, sqlite3TableColumnToStorage(&tab, (i16)2));99}100 101/* Test: All virtual columns: V, V, V -> expect identity [0,1,2] */102void test_sqlite3TableColumnToStorage_all_virtual_identity(void){103  Column cols[3];104  memset(cols, 0, sizeof(cols));105  cols[0].colFlags |= COLFLAG_VIRTUAL;106  cols[1].colFlags |= COLFLAG_VIRTUAL;107  cols[2].colFlags |= COLFLAG_VIRTUAL;108 109  Table tab;110  initTable(&tab, cols, 3, 1);111 112  for(int i=0; i<3; i++){113    TEST_ASSERT_EQUAL_INT(i, sqlite3TableColumnToStorage(&tab, (i16)i));114  }115}116 117/* Test: Mixed pattern N, V, V, N -> expect [0,2,3,1] */118void test_sqlite3TableColumnToStorage_mixed_NVVN(void){119  Column cols[4];120  memset(cols, 0, sizeof(cols));121  /* N at 0 */122  cols[1].colFlags |= COLFLAG_VIRTUAL; /* V */123  cols[2].colFlags |= COLFLAG_VIRTUAL; /* V */124  /* N at 3 */125 126  Table tab;127  initTable(&tab, cols, 4, 1);128 129  int expected[4] = {0,2,3,1};130  for(int i=0; i<4; i++){131    TEST_ASSERT_EQUAL_INT(expected[i],132      sqlite3TableColumnToStorage(&tab, (i16)i));133  }134}135 136/* Test: Negative iCol with TF_HasVirtual set -> returns unchanged (-1) */137void test_sqlite3TableColumnToStorage_negative_iCol_with_virtual_flag(void){138  Column cols[2];139  memset(cols, 0, sizeof(cols));140  cols[1].colFlags |= COLFLAG_VIRTUAL;141 142  Table tab;143  initTable(&tab, cols, 2, 1);144 145  TEST_ASSERT_EQUAL_INT(-1, sqlite3TableColumnToStorage(&tab, (i16)-1));146}147 148/* Main to run Unity tests */149int main(void){150  UNITY_BEGIN();151  RUN_TEST(test_sqlite3TableColumnToStorage_noVirtualFlag_identity);152  RUN_TEST(test_sqlite3TableColumnToStorage_hasVirtualFlag_but_no_virtual_columns_identity);153  RUN_TEST(test_sqlite3TableColumnToStorage_document_example);154  RUN_TEST(test_sqlite3TableColumnToStorage_leading_virtuals);155  RUN_TEST(test_sqlite3TableColumnToStorage_all_virtual_identity);156  RUN_TEST(test_sqlite3TableColumnToStorage_mixed_NVVN);157  RUN_TEST(test_sqlite3TableColumnToStorage_negative_iCol_with_virtual_flag);158  return UNITY_END();159}