From 79d58180159a03721e4a6d3b90f3af1c6318a3d6 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Mon, 2 Mar 2026 17:50:31 -0800 Subject: [PATCH] Add regression tests for vec0_parse_vector_column edge cases Add SQLITE_EMPTY tests for non-vector column inputs (primary key, partition key, unknown types) and SQLITE_ERROR tests for zero dimensions and empty brackets. Tighten existing error assertions from rc != SQLITE_OK to exact expected return codes. Co-Authored-By: Claude Opus 4.6 --- tests/test-unit.c | 64 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 11 deletions(-) diff --git a/tests/test-unit.c b/tests/test-unit.c index 9457de8..959a083 100644 --- a/tests/test-unit.c +++ b/tests/test-unit.c @@ -336,53 +336,95 @@ void test_vec0_parse_vector_column() { sqlite3_free(col.name); } - // Error: empty string + // SQLITE_EMPTY: empty string { const char *input = ""; rc = vec0_parse_vector_column(input, 0, &col); - assert(rc != SQLITE_OK); + assert(rc == SQLITE_EMPTY); } - // Error: no type + // SQLITE_EMPTY: non-vector column (text primary key) + { + const char *input = "document_id text primary key"; + rc = vec0_parse_vector_column(input, (int)strlen(input), &col); + assert(rc == SQLITE_EMPTY); + } + + // SQLITE_EMPTY: non-vector column (partition key) + { + const char *input = "user_id integer partition key"; + rc = vec0_parse_vector_column(input, (int)strlen(input), &col); + assert(rc == SQLITE_EMPTY); + } + + // SQLITE_EMPTY: no type (single identifier) { const char *input = "emb"; rc = vec0_parse_vector_column(input, (int)strlen(input), &col); - assert(rc != SQLITE_OK); + assert(rc == SQLITE_EMPTY); } - // Error: unknown type + // SQLITE_EMPTY: unknown type { const char *input = "emb double[128]"; rc = vec0_parse_vector_column(input, (int)strlen(input), &col); - assert(rc != SQLITE_OK); + assert(rc == SQLITE_EMPTY); } - // Error: missing dimensions + // SQLITE_EMPTY: unknown type (unknowntype) + { + const char *input = "v unknowntype[128]"; + rc = vec0_parse_vector_column(input, (int)strlen(input), &col); + assert(rc == SQLITE_EMPTY); + } + + // SQLITE_EMPTY: missing brackets entirely { const char *input = "emb float"; rc = vec0_parse_vector_column(input, (int)strlen(input), &col); - assert(rc != SQLITE_OK); + assert(rc == SQLITE_EMPTY); + } + + // Error: zero dimensions + { + const char *input = "v float[0]"; + rc = vec0_parse_vector_column(input, (int)strlen(input), &col); + assert(rc == SQLITE_ERROR); + } + + // Error: empty brackets (no dimensions) + { + const char *input = "v float[]"; + rc = vec0_parse_vector_column(input, (int)strlen(input), &col); + assert(rc == SQLITE_ERROR); } // Error: unknown distance metric { const char *input = "emb float[128] distance_metric=hamming"; rc = vec0_parse_vector_column(input, (int)strlen(input), &col); - assert(rc != SQLITE_OK); + assert(rc == SQLITE_ERROR); + } + + // Error: unknown distance metric (foo) + { + const char *input = "v float[128] distance_metric=foo"; + rc = vec0_parse_vector_column(input, (int)strlen(input), &col); + assert(rc == SQLITE_ERROR); } // Error: unknown option key { const char *input = "emb float[128] foobar=baz"; rc = vec0_parse_vector_column(input, (int)strlen(input), &col); - assert(rc != SQLITE_OK); + assert(rc == SQLITE_ERROR); } // Error: distance_metric on bit type { const char *input = "emb bit[64] distance_metric=cosine"; rc = vec0_parse_vector_column(input, (int)strlen(input), &col); - assert(rc != SQLITE_OK); + assert(rc == SQLITE_ERROR); } printf(" All vec0_parse_vector_column tests passed.\n");