Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_expr_sqlite3GetTempRange.c121 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <string.h>4#include <stdlib.h>5#include <stdio.h>6 7/* Unity fixtures */8void setUp(void) {9  /* No-op for these tests */10}11 12void tearDown(void) {13  /* No-op for these tests */14}15 16/* Test: nReg == 1 uses sqlite3GetTempReg and returns from temp stack if available */17void test_sqlite3GetTempRange_nReg1_uses_temp_stack_if_available(void) {18  Parse p;19  memset(&p, 0, sizeof(p));20  p.nMem = 10;21  p.nTempReg = 2;22  /* sqlite3GetTempReg uses pre-decrement, so with nTempReg=2 it returns aTempReg[1] */23  p.aTempReg[0] = 5;24  p.aTempReg[1] = 6;25 26  int r = sqlite3GetTempRange(&p, 1);27  TEST_ASSERT_EQUAL_INT(6, r);28  TEST_ASSERT_EQUAL_INT(1, p.nTempReg);29  TEST_ASSERT_EQUAL_INT(10, p.nMem); /* nMem unchanged when using temp stack */30}31 32/* Test: nReg == 1 when no temp regs available increments nMem and returns nMem */33void test_sqlite3GetTempRange_nReg1_no_temp_regs_increments_nMem(void) {34  Parse p;35  memset(&p, 0, sizeof(p));36  p.nMem = 10;37  p.nTempReg = 0;38 39  int r = sqlite3GetTempRange(&p, 1);40  TEST_ASSERT_EQUAL_INT(11, r);41  TEST_ASSERT_EQUAL_INT(11, p.nMem);42  TEST_ASSERT_EQUAL_INT(0, p.nTempReg);43}44 45/* Test: nReg > 1 allocated entirely from range pool when available */46void test_sqlite3GetTempRange_multi_from_range_pool(void) {47  Parse p;48  memset(&p, 0, sizeof(p));49  p.iRangeReg = 20;50  p.nRangeReg = 10;51  p.nMem = 100;52 53  int r1 = sqlite3GetTempRange(&p, 4);54  TEST_ASSERT_EQUAL_INT(20, r1);55  TEST_ASSERT_EQUAL_INT(24, p.iRangeReg);56  TEST_ASSERT_EQUAL_INT(6, p.nRangeReg);57  TEST_ASSERT_EQUAL_INT(100, p.nMem);58 59  /* Allocate exactly the remainder of the pool */60  int r2 = sqlite3GetTempRange(&p, 6);61  TEST_ASSERT_EQUAL_INT(24, r2);62  TEST_ASSERT_EQUAL_INT(30, p.iRangeReg);63  TEST_ASSERT_EQUAL_INT(0, p.nRangeReg);64  TEST_ASSERT_EQUAL_INT(100, p.nMem);65}66 67/* Test: nReg > nRangeReg allocates from nMem and leaves pool untouched */68void test_sqlite3GetTempRange_multi_exceeds_pool_uses_nMem(void) {69  Parse p;70  memset(&p, 0, sizeof(p));71  p.iRangeReg = 30;72  p.nRangeReg = 3;73  p.nMem = 50;74 75  int r = sqlite3GetTempRange(&p, 5);76  TEST_ASSERT_EQUAL_INT(51, r);   /* nMem + 1 */77  TEST_ASSERT_EQUAL_INT(55, p.nMem);  /* nMem increased by nReg */78  TEST_ASSERT_EQUAL_INT(30, p.iRangeReg); /* pool untouched */79  TEST_ASSERT_EQUAL_INT(3, p.nRangeReg);80}81 82/* Test: nReg equal to pool size allocates exactly and zeroes pool */83void test_sqlite3GetTempRange_multi_exact_pool_size(void) {84  Parse p;85  memset(&p, 0, sizeof(p));86  p.iRangeReg = 100;87  p.nRangeReg = 4;88  p.nMem = 5;89 90  int r = sqlite3GetTempRange(&p, 4);91  TEST_ASSERT_EQUAL_INT(100, r);92  TEST_ASSERT_EQUAL_INT(104, p.iRangeReg);93  TEST_ASSERT_EQUAL_INT(0, p.nRangeReg);94  TEST_ASSERT_EQUAL_INT(5, p.nMem);95}96 97/* Test: nReg == 0 returns current iRangeReg and does not modify counters */98void test_sqlite3GetTempRange_zero_request_no_changes(void) {99  Parse p;100  memset(&p, 0, sizeof(p));101  p.iRangeReg = 7;102  p.nRangeReg = 9;103  p.nMem = 77;104 105  int r = sqlite3GetTempRange(&p, 0);106  TEST_ASSERT_EQUAL_INT(7, r);107  TEST_ASSERT_EQUAL_INT(7, p.iRangeReg);108  TEST_ASSERT_EQUAL_INT(9, p.nRangeReg);109  TEST_ASSERT_EQUAL_INT(77, p.nMem);110}111 112int main(void) {113  UNITY_BEGIN();114  RUN_TEST(test_sqlite3GetTempRange_nReg1_uses_temp_stack_if_available);115  RUN_TEST(test_sqlite3GetTempRange_nReg1_no_temp_regs_increments_nMem);116  RUN_TEST(test_sqlite3GetTempRange_multi_from_range_pool);117  RUN_TEST(test_sqlite3GetTempRange_multi_exceeds_pool_uses_nMem);118  RUN_TEST(test_sqlite3GetTempRange_multi_exact_pool_size);119  RUN_TEST(test_sqlite3GetTempRange_zero_request_no_changes);120  return UNITY_END();121}