AryaWu/sqlite
0
1#include "sqliteInt.h"2#include "unity.h"3#include <string.h>4#include <stdint.h>5#include <stdlib.h>6 7/* Target under test:8 Pgno sqlite3PagerMaxPageCount(Pager *pPager, Pgno mxPage);9*/10 11void setUp(void) {12 /* No global setup needed */13}14 15void tearDown(void) {16 /* No global teardown needed */17}18 19/* Helper to initialize a Pager with safe defaults for this test */20static void initPagerForTest(Pager *p){21 memset(p, 0, sizeof(*p));22 /* Ensure we are not in PAGER_OPEN state to satisfy the assert in the function.23 Since we may not have the PAGER_* enum here, set to a non-zero value. */24 /* eState is typically a small integer type; assign a non-zero value. */25 /* We intentionally avoid referencing PAGER_OPEN directly. */26 p->eState = 1;27}28 29/* Test: When mxPage > 0, function updates mxPgno and returns new value */30void test_sqlite3PagerMaxPageCount_sets_when_positive(void){31 Pager p;32 initPagerForTest(&p);33 p.mxPgno = (Pgno)100;34 35 Pgno newMax = (Pgno)250;36 Pgno ret = sqlite3PagerMaxPageCount(&p, newMax);37 38 TEST_ASSERT_EQUAL_HEX32(newMax, ret);39 TEST_ASSERT_EQUAL_HEX32(newMax, p.mxPgno);40}41 42/* Test: When mxPage == 0, function does not change mxPgno and returns current value */43void test_sqlite3PagerMaxPageCount_no_change_on_zero(void){44 Pager p;45 initPagerForTest(&p);46 p.mxPgno = (Pgno)300;47 48 Pgno ret = sqlite3PagerMaxPageCount(&p, (Pgno)0);49 50 TEST_ASSERT_EQUAL_HEX32((Pgno)300, ret);51 TEST_ASSERT_EQUAL_HEX32((Pgno)300, p.mxPgno);52}53 54/* Test: Multiple sequential calls mixing zero and positive values */55void test_sqlite3PagerMaxPageCount_sequential_calls(void){56 Pager p;57 initPagerForTest(&p);58 p.mxPgno = (Pgno)0;59 60 /* First set to 10 */61 Pgno ret1 = sqlite3PagerMaxPageCount(&p, (Pgno)10);62 TEST_ASSERT_EQUAL_HEX32((Pgno)10, ret1);63 TEST_ASSERT_EQUAL_HEX32((Pgno)10, p.mxPgno);64 65 /* Call with 0 should not change */66 Pgno ret2 = sqlite3PagerMaxPageCount(&p, (Pgno)0);67 TEST_ASSERT_EQUAL_HEX32((Pgno)10, ret2);68 TEST_ASSERT_EQUAL_HEX32((Pgno)10, p.mxPgno);69 70 /* Increase to 20 */71 Pgno ret3 = sqlite3PagerMaxPageCount(&p, (Pgno)20);72 TEST_ASSERT_EQUAL_HEX32((Pgno)20, ret3);73 TEST_ASSERT_EQUAL_HEX32((Pgno)20, p.mxPgno);74 75 /* Another zero call remains unchanged */76 Pgno ret4 = sqlite3PagerMaxPageCount(&p, (Pgno)0);77 TEST_ASSERT_EQUAL_HEX32((Pgno)20, ret4);78 TEST_ASSERT_EQUAL_HEX32((Pgno)20, p.mxPgno);79}80 81/* Test: Starting from zero, zero input keeps zero */82void test_sqlite3PagerMaxPageCount_zero_initial_zero_input(void){83 Pager p;84 initPagerForTest(&p);85 p.mxPgno = (Pgno)0;86 87 Pgno ret = sqlite3PagerMaxPageCount(&p, (Pgno)0);88 89 TEST_ASSERT_EQUAL_HEX32((Pgno)0, ret);90 TEST_ASSERT_EQUAL_HEX32((Pgno)0, p.mxPgno);91}92 93/* Test: Large value (max Pgno). Ensure it sets and returns correctly */94void test_sqlite3PagerMaxPageCount_sets_max_value(void){95 Pager p;96 initPagerForTest(&p);97 p.mxPgno = (Pgno)123;98 99 Pgno maxPg = (Pgno)(~(Pgno)0); /* All-bits-1 for Pgno type */100 Pgno ret = sqlite3PagerMaxPageCount(&p, maxPg);101 102 TEST_ASSERT_EQUAL_HEX32(maxPg, ret);103 TEST_ASSERT_EQUAL_HEX32(maxPg, p.mxPgno);104}105 106int main(void) {107 UNITY_BEGIN();108 RUN_TEST(test_sqlite3PagerMaxPageCount_sets_when_positive);109 RUN_TEST(test_sqlite3PagerMaxPageCount_no_change_on_zero);110 RUN_TEST(test_sqlite3PagerMaxPageCount_sequential_calls);111 RUN_TEST(test_sqlite3PagerMaxPageCount_zero_initial_zero_input);112 RUN_TEST(test_sqlite3PagerMaxPageCount_sets_max_value);113 return UNITY_END();114}