BitVecJaccardSimilarity
- Function
- August 22, 2025
Table of Contents
BitVecJaccardSimilarity
BitVecJaccardSimilarity
Description
Calculate Jaccard similarity between two bitvectors. Jaccard similarity = |intersection| / |union|
Parameters
Name | Direction | Description |
---|---|---|
bv1 | in | First bitvector |
bv2 | in | Second bitvector |
Usage example (from documentation)
double similarity = BitVecJaccardSimilarity(&bv1, &bv2);
Usage example (Cross-references)
- In
BitVec.c:1182
:
}
double BitVecJaccardSimilarity(BitVec *bv1, BitVec *bv2) {
ValidateBitVec(bv1);
ValidateBitVec(bv2);
// Test BitVecJaccardSimilarity basic functionality
bool test_bitvec_jaccard_similarity_basic(void) {
printf("Testing BitVecJaccardSimilarity basic functionality\n");
BitVec bv1 = BitVecInit();
BitVecPush(&bv2, true);
double similarity = BitVecJaccardSimilarity(&bv1, &bv2);
result = result && (fabs(similarity - 1.0) < 0.001);
BitVecPush(&bv2, true);
similarity = BitVecJaccardSimilarity(&bv1, &bv2);
result = result && (fabs(similarity - 0.0) < 0.001);
// Intersection: 1, Union: 2, Jaccard = 1/2 = 0.5
similarity = BitVecJaccardSimilarity(&bv1, &bv2);
result = result && (fabs(similarity - 0.5) < 0.001);
// Test BitVecJaccardSimilarity edge cases
bool test_bitvec_jaccard_similarity_edge_cases(void) {
printf("Testing BitVecJaccardSimilarity edge cases\n");
BitVec bv1 = BitVecInit();
// Test empty bitvectors
double similarity = BitVecJaccardSimilarity(&bv1, &bv2);
result = result && (fabs(similarity - 1.0) < 0.001);
BitVecPush(&bv2, false);
similarity = BitVecJaccardSimilarity(&bv1, &bv2);
result = result && (fabs(similarity - 1.0) < 0.001);
// Test that all functions complete without crashing
u64 hamming = BitVecHammingDistance(&bv1, &bv2);
double jaccard = BitVecJaccardSimilarity(&bv1, &bv2);
double cosine = BitVecCosineSimilarity(&bv1, &bv2);
u64 dot_prod = BitVecDotProduct(&bv1, &bv2);
bool test_bitvec_jaccard_similarity_null_bv1(void) {
printf("Testing BitVecJaccardSimilarity(NULL, bv2) - should fatal\n");
BitVec bv2 = BitVecInit();
BitVecPush(&bv2, true);
BitVec bv2 = BitVecInit();
BitVecPush(&bv2, true);
BitVecJaccardSimilarity(NULL, &bv2);
BitVecDeinit(&bv2);
return true;
bool test_bitvec_jaccard_similarity_null_bv2(void) {
printf("Testing BitVecJaccardSimilarity(bv1, NULL) - should fatal\n");
BitVec bv1 = BitVecInit();
BitVecPush(&bv1, true);
BitVec bv1 = BitVecInit();
BitVecPush(&bv1, true);
BitVecJaccardSimilarity(&bv1, NULL);
BitVecDeinit(&bv1);
return true;