Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_malloc_sqlite3_memory_alarm.c108 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <stdint.h>4#include <string.h>5#include <limits.h>6 7/* Save/restore global state across tests */8static sqlite3_int64 gSavedSoftLimit = 0;9static sqlite3_int64 gSavedHardLimit = 0;10 11/* A callback that would mark invocation if it were ever called */12static void cb_counter(void *pArg, sqlite3_int64 used, int N){13  (void)used;14  (void)N;15  if( pArg ){16    int *pCnt = (int*)pArg;17    (*pCnt)++;18  }19}20 21void setUp(void) {22  int rc = sqlite3_initialize();23  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);24  /* Capture current limits to restore in tearDown */25  gSavedSoftLimit = sqlite3_soft_heap_limit64(-1);26  gSavedHardLimit = sqlite3_hard_heap_limit64(-1);27}28 29void tearDown(void) {30  /* Restore limits so tests are independent */31  sqlite3_soft_heap_limit64(gSavedSoftLimit);32  sqlite3_hard_heap_limit64(gSavedHardLimit);33}34 35/* Basic: returns SQLITE_OK with null arguments */36void test_sqlite3_memory_alarm_returns_ok_nulls(void){37  int rc = sqlite3_memory_alarm(NULL, NULL, 0);38  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);39}40 41/* Callback should never be invoked */42void test_sqlite3_memory_alarm_never_calls_callback(void){43  int called = 0;44  int rc = sqlite3_memory_alarm(cb_counter, &called, 1000);45  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);46  TEST_ASSERT_EQUAL_INT(0, called);47}48 49/* No effect on soft heap limit */50void test_sqlite3_memory_alarm_no_effect_on_soft_heap_limit(void){51  /* Ensure no hard limit constrains the soft limit for this test */52  sqlite3_hard_heap_limit64(0);53 54  sqlite3_int64 newSoft = 1024*1024; /* 1 MiB */55  (void)sqlite3_soft_heap_limit64(newSoft);56 57  int rc = sqlite3_memory_alarm(cb_counter, NULL, 1234567890);58  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);59 60  sqlite3_int64 current = sqlite3_soft_heap_limit64(-1);61  TEST_ASSERT_EQUAL_INT64(newSoft, current);62}63 64/* Extreme thresholds and multiple calls remain no-ops */65void test_sqlite3_memory_alarm_extreme_values(void){66  int called = 0;67  sqlite3_int64 thresholds[] = {68    (sqlite3_int64)-1,69    (sqlite3_int64)0,70    (sqlite3_int64)1,71    (sqlite3_int64)100,72    (sqlite3_int64)1000000,73    (sqlite3_int64)LLONG_MAX74  };75  size_t i;76  for(i = 0; i < sizeof(thresholds)/sizeof(thresholds[0]); i++){77    called = 0;78    int rc = sqlite3_memory_alarm(cb_counter, &called, thresholds[i]);79    TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);80    TEST_ASSERT_EQUAL_INT(0, called);81  }82}83 84/* Multiple sequential calls should not change memory limits */85void test_sqlite3_memory_alarm_multiple_calls_no_effect_on_soft_limit(void){86  sqlite3_int64 initialSoft = sqlite3_soft_heap_limit64(-1);87 88  int called = 0;89  (void)sqlite3_memory_alarm(cb_counter, &called, 10);90  (void)sqlite3_memory_alarm(cb_counter, &called, 0);91  (void)sqlite3_memory_alarm(cb_counter, &called, 999999);92  (void)sqlite3_memory_alarm(NULL, NULL, -1);93 94  TEST_ASSERT_EQUAL_INT(0, called);95 96  sqlite3_int64 currentSoft = sqlite3_soft_heap_limit64(-1);97  TEST_ASSERT_EQUAL_INT64(initialSoft, currentSoft);98}99 100int main(void){101  UNITY_BEGIN();102  RUN_TEST(test_sqlite3_memory_alarm_returns_ok_nulls);103  RUN_TEST(test_sqlite3_memory_alarm_never_calls_callback);104  RUN_TEST(test_sqlite3_memory_alarm_no_effect_on_soft_heap_limit);105  RUN_TEST(test_sqlite3_memory_alarm_extreme_values);106  RUN_TEST(test_sqlite3_memory_alarm_multiple_calls_no_effect_on_soft_limit);107  return UNITY_END();108}