Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_main_sqlite3_set_last_insert_rowid.c125 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3 4#include <stdlib.h>5#include <string.h>6#include <limits.h>7 8/* Helper: open an in-memory database and assert success */9static sqlite3* open_memdb(void){10  sqlite3 *db = NULL;11  int rc = sqlite3_open(":memory:", &db);12  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);13  TEST_ASSERT_NOT_NULL(db);14  return db;15}16 17/* Helper: close database and assert success */18static void close_db(sqlite3 *db){19  int rc = sqlite3_close(db);20  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);21}22 23/* Helper: set last insert rowid and verify via API and internal field */24static void assert_set_and_get(sqlite3 *db, sqlite3_int64 val){25  sqlite3_set_last_insert_rowid(db, val);26  sqlite3_int64 got = sqlite3_last_insert_rowid(db);27  TEST_ASSERT_EQUAL_INT64(val, got);28 29  /* Also check internal field for consistency */30  TEST_ASSERT_EQUAL_INT64(val, db->lastRowid);31}32 33void setUp(void) {34  /* No global setup needed */35}36 37void tearDown(void) {38  /* No global teardown needed */39}40 41/* Basic positive value set/get */42void test_sqlite3_set_last_insert_rowid_basic_positive(void){43  sqlite3 *db = open_memdb();44  assert_set_and_get(db, (sqlite3_int64)12345);45  close_db(db);46}47 48/* Zero and negative values */49void test_sqlite3_set_last_insert_rowid_zero_and_negative(void){50  sqlite3 *db = open_memdb();51  assert_set_and_get(db, (sqlite3_int64)0);52  assert_set_and_get(db, (sqlite3_int64)-1);53  assert_set_and_get(db, (sqlite3_int64)-987654321);54  close_db(db);55}56 57/* Extremes of 64-bit range */58void test_sqlite3_set_last_insert_rowid_extremes(void){59  sqlite3 *db = open_memdb();60  assert_set_and_get(db, (sqlite3_int64)LLONG_MAX);61  assert_set_and_get(db, (sqlite3_int64)LLONG_MIN);62  close_db(db);63}64 65/* Sequential updates overwrite previous value */66void test_sqlite3_set_last_insert_rowid_sequential_updates(void){67  sqlite3 *db = open_memdb();68 69  sqlite3_set_last_insert_rowid(db, (sqlite3_int64)42);70  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)42, sqlite3_last_insert_rowid(db));71  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)42, db->lastRowid);72 73  sqlite3_set_last_insert_rowid(db, (sqlite3_int64)1000000000000LL);74  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)1000000000000LL, sqlite3_last_insert_rowid(db));75  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)1000000000000LL, db->lastRowid);76 77  sqlite3_set_last_insert_rowid(db, (sqlite3_int64)-123456789012345LL);78  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)-123456789012345LL, sqlite3_last_insert_rowid(db));79  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)-123456789012345LL, db->lastRowid);80 81  close_db(db);82}83 84/* Per-connection isolation: setting on one db must not affect another */85void test_sqlite3_set_last_insert_rowid_multiple_connections_isolated(void){86  sqlite3 *db1 = open_memdb();87  sqlite3 *db2 = open_memdb();88 89  sqlite3_set_last_insert_rowid(db1, (sqlite3_int64)777);90  sqlite3_set_last_insert_rowid(db2, (sqlite3_int64)888);91 92  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)777, sqlite3_last_insert_rowid(db1));93  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)888, sqlite3_last_insert_rowid(db2));94 95  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)777, db1->lastRowid);96  TEST_ASSERT_EQUAL_INT64((sqlite3_int64)888, db2->lastRowid);97 98  close_db(db2);99  close_db(db1);100}101 102/* If API armor is enabled, NULL db should be safely ignored (no crash) */103#ifdef SQLITE_ENABLE_API_ARMOR104void test_sqlite3_set_last_insert_rowid_api_armor_null_db(void){105  /* Should not crash or have side effects */106  sqlite3_set_last_insert_rowid(NULL, (sqlite3_int64)123);107  /* If we got here, the call returned safely. */108  TEST_ASSERT_TRUE(1);109}110#endif111 112int main(void) {113  UNITY_BEGIN();114 115  RUN_TEST(test_sqlite3_set_last_insert_rowid_basic_positive);116  RUN_TEST(test_sqlite3_set_last_insert_rowid_zero_and_negative);117  RUN_TEST(test_sqlite3_set_last_insert_rowid_extremes);118  RUN_TEST(test_sqlite3_set_last_insert_rowid_sequential_updates);119  RUN_TEST(test_sqlite3_set_last_insert_rowid_multiple_connections_isolated);120  #ifdef SQLITE_ENABLE_API_ARMOR121  RUN_TEST(test_sqlite3_set_last_insert_rowid_api_armor_null_db);122  #endif123 124  return UNITY_END();125}