Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_callback_matchQuality.c148 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <string.h>4 5/* External wrapper for the static function under test */6extern int test_matchQuality(FuncDef *p, int nArg, u8 enc);7 8/* Dummy SQL function implementation pointer for xSFunc */9static void dummyStep(sqlite3_context *ctx, int argc, sqlite3_value **argv){10  (void)ctx; (void)argc; (void)argv;11}12 13static void initFuncDef(FuncDef *p, int nArg, u8 enc, int hasSFunc){14  memset(p, 0, sizeof(*p));15  p->nArg = nArg;16  p->funcFlags = enc; /* Only encoding bits are needed for matchQuality */17  p->xSFunc = hasSFunc ? dummyStep : 0;18}19 20void setUp(void) {21  /* No global setup needed */22}23 24void tearDown(void) {25  /* No global teardown needed */26}27 28/* 1) Perfect match: exact nArg and exact encoding -> 6 */29void test_matchQuality_perfect_utf8_exact_nArg(void){30  FuncDef f;31  initFuncDef(&f, 2, SQLITE_UTF8, 1);32  int score = test_matchQuality(&f, 2, SQLITE_UTF8);33  TEST_ASSERT_EQUAL_INT(6, score);34}35 36/* 2) Exact nArg, both UTF16 but different byte-order -> 5 */37void test_matchQuality_utf16_byteorder_change_exact_nArg(void){38  FuncDef f;39  initFuncDef(&f, 5, SQLITE_UTF16BE, 1);40  int score = test_matchQuality(&f, 5, SQLITE_UTF16LE);41  TEST_ASSERT_EQUAL_INT(5, score);42}43 44/* 3) Exact nArg, UTF8 vs UTF16 -> 4 */45void test_matchQuality_utf8_vs_utf16_exact_nArg(void){46  FuncDef f;47  initFuncDef(&f, 1, SQLITE_UTF16LE, 1);48  int score = test_matchQuality(&f, 1, SQLITE_UTF8);49  TEST_ASSERT_EQUAL_INT(4, score);50}51 52/* 4) Varargs function (p->nArg=-1) with specific nArg, exact encoding -> 3 */53void test_matchQuality_varargs_specific_nArg_encoding_match(void){54  FuncDef f;55  initFuncDef(&f, -1, SQLITE_UTF8, 1);56  int score = test_matchQuality(&f, 3, SQLITE_UTF8);57  TEST_ASSERT_EQUAL_INT(3, score);58}59 60/* 5) Varargs function (p->nArg=-1), UTF16 different byte order -> 2 */61void test_matchQuality_varargs_utf16_diffbyteorder(void){62  FuncDef f;63  initFuncDef(&f, -1, SQLITE_UTF16BE, 1);64  int score = test_matchQuality(&f, 7, SQLITE_UTF16LE);65  TEST_ASSERT_EQUAL_INT(2, score);66}67 68/* 6) Wrong argcount (non-varargs) -> 0 */69void test_matchQuality_wrong_argcount_nonvarargs_returns0(void){70  FuncDef f;71  initFuncDef(&f, 2, SQLITE_UTF8, 1);72  int score = test_matchQuality(&f, 3, SQLITE_UTF8);73  TEST_ASSERT_EQUAL_INT(0, score);74}75 76/* 7) p->nArg=-3 (>=1) with insufficient args (0) -> 0 */77void test_matchQuality_neg3_requires_min1_insufficient_returns0(void){78  FuncDef f;79  initFuncDef(&f, -3, SQLITE_UTF8, 1);80  int score = test_matchQuality(&f, 0, SQLITE_UTF8);81  TEST_ASSERT_EQUAL_INT(0, score);82}83 84/* 8) p->nArg=-3 (>=1) with sufficient args -> 1 + encoding bonus (3) */85void test_matchQuality_neg3_requires_min1_satisfied_scores(void){86  FuncDef f;87  initFuncDef(&f, -3, SQLITE_UTF8, 1);88  int score = test_matchQuality(&f, 2, SQLITE_UTF8);89  TEST_ASSERT_EQUAL_INT(3, score);90}91 92/* 9) p->nArg=-4 (>=2) insufficient args (1) -> 0 */93void test_matchQuality_neg4_requires_min2_insufficient_returns0(void){94  FuncDef f;95  initFuncDef(&f, -4, SQLITE_UTF16LE, 1);96  int score = test_matchQuality(&f, 1, SQLITE_UTF16LE);97  TEST_ASSERT_EQUAL_INT(0, score);98}99 100/* 10) p->nArg=-4 (>=2) sufficient args -> 1 + exact encoding bonus (3) */101void test_matchQuality_neg4_requires_min2_satisfied_scores(void){102  FuncDef f;103  initFuncDef(&f, -4, SQLITE_UTF16LE, 1);104  int score = test_matchQuality(&f, 2, SQLITE_UTF16LE);105  TEST_ASSERT_EQUAL_INT(3, score);106}107 108/* 11) Request "any" (nArg=-1) against varargs function with exact encoding -> 6 */109void test_matchQuality_request_any_against_varargs_exact_encoding(void){110  FuncDef f;111  initFuncDef(&f, -1, SQLITE_UTF16BE, 1);112  int score = test_matchQuality(&f, -1, SQLITE_UTF16BE);113  TEST_ASSERT_EQUAL_INT(6, score);114}115 116/* 12) Special search mode nArg=-2 with xSFunc==NULL -> 0 */117void test_matchQuality_nArg_neg2_with_xSFunc_null_returns0(void){118  FuncDef f;119  initFuncDef(&f, 3, SQLITE_UTF8, 0); /* xSFunc NULL */120  int score = test_matchQuality(&f, -2, SQLITE_UTF8);121  TEST_ASSERT_EQUAL_INT(0, score);122}123 124/* 13) Special search mode nArg=-2 with xSFunc!=NULL -> 6 */125void test_matchQuality_nArg_neg2_with_xSFunc_nonnull_returns6(void){126  FuncDef f;127  initFuncDef(&f, -1, SQLITE_UTF16LE, 1); /* xSFunc non-NULL */128  int score = test_matchQuality(&f, -2, SQLITE_UTF8 /* any enc; ignored */);129  TEST_ASSERT_EQUAL_INT(6, score);130}131 132int main(void){133  UNITY_BEGIN();134  RUN_TEST(test_matchQuality_perfect_utf8_exact_nArg);135  RUN_TEST(test_matchQuality_utf16_byteorder_change_exact_nArg);136  RUN_TEST(test_matchQuality_utf8_vs_utf16_exact_nArg);137  RUN_TEST(test_matchQuality_varargs_specific_nArg_encoding_match);138  RUN_TEST(test_matchQuality_varargs_utf16_diffbyteorder);139  RUN_TEST(test_matchQuality_wrong_argcount_nonvarargs_returns0);140  RUN_TEST(test_matchQuality_neg3_requires_min1_insufficient_returns0);141  RUN_TEST(test_matchQuality_neg3_requires_min1_satisfied_scores);142  RUN_TEST(test_matchQuality_neg4_requires_min2_insufficient_returns0);143  RUN_TEST(test_matchQuality_neg4_requires_min2_satisfied_scores);144  RUN_TEST(test_matchQuality_request_any_against_varargs_exact_encoding);145  RUN_TEST(test_matchQuality_nArg_neg2_with_xSFunc_null_returns0);146  RUN_TEST(test_matchQuality_nArg_neg2_with_xSFunc_nonnull_returns6);147  return UNITY_END();148}