BitVecJaccardSimilarity

Table of Contents

BitVecJaccardSimilarity

Description

Calculate Jaccard similarity between two bitvectors. Jaccard similarity = |intersection| / |union|

Parameters

NameDirectionDescription
bv1inFirst bitvector
bv2inSecond bitvector

Usage example (from documentation)

  double similarity = BitVecJaccardSimilarity(&bv1, &bv2);

Usage example (Cross-references)

    }
    
    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;

Share :

Related Posts

ALIGN_DOWN

ALIGN_DOWN Description Aligns the given value down to the nearest multiple of alignment.

Read More

BitVecRemoveLast

BitVecRemoveLast Description Remove the last occurrence of a specific bit value. Returns true if a bit was found and removed, false otherwise.

Read More

BitVecRemoveRange

BitVecRemoveRange Description Remove multiple consecutive bits starting at a specific position. All bits after the removed range are shifted left.

Read More