BitVecClone

Table of Contents

BitVecClone

Description

Create a deep copy of a bitvector. The returned bitvector must be deinitialized when no longer needed.

Parameters

NameDirectionDescription
bvinBitvector to clone

Usage example (from documentation)

  BitVec copy = BitVecClone(&flags);
  // ... use copy ...
  BitVecDeinit(&copy);

Usage example (Cross-references)

    }
    
    BitVec BitVecClone(BitVec *bv) {
    ValidateBitVec(bv);
    
    // Create a temporary copy
    BitVec temp = BitVecClone(bv);
    
    // Rotate left
    
    // Create a temporary copy
    BitVec temp = BitVecClone(bv);
    
    // Rotate right
    // Test BitVecClone function
    bool test_bitvec_clone(void) {
    printf("Testing BitVecClone\n");
    
    BitVec original = BitVecInit();
    
    // Clone the bitvector
    BitVec clone = BitVecClone(&original);
    
    // Check that clone has same content as original
    
    bool test_bitvec_clone_edge_cases(void) {
    printf("Testing BitVecClone edge cases\n");
    
    BitVec bv     = BitVecInit();
    
    // Test clone empty bitvec
    BitVec clone1 = BitVecClone(&bv);
    result        = result && (clone1.length == 0);
    BitVecDeinit(&clone1);
    // Test clone single element
    BitVecPush(&bv, true);
    BitVec clone2 = BitVecClone(&bv);
    result        = result && (clone2.length == 1);
    result        = result && (BitVecGet(&clone2, 0) == true);
    }
    
    BitVec clone3 = BitVecClone(&bv);
    result        = result && (clone3.length == 1000);
    
    // Clone and swap
    BitVec clone = BitVecClone(&bv1);
    BitVecSwap(&bv1, &bv2);
    
    // Test NULL pointer - should abort
    BitVecClone(NULL);
    
    return false;
    
    // Test various shift amounts
    BitVec original = BitVecClone(&bv);
    
    // Shift left by 1, then right by 1 - should NOT restore original (data loss)
    }
    
    BitVec original = BitVecClone(&bv);
    
    // Rotate left by 3, then right by 3
    
    // Test various shift amounts
    BitVec original = BitVecClone(&bv);
    
    // Shift left by 1, then right by 1 - should NOT restore original (data loss)
    }
    
    BitVec original = BitVecClone(&bv);
    
    // Rotate left by 3, then right by 3
    
    // Test equal signed values
    BitVec bv3 = BitVecClone(&bv1);
    result     = result && (BitVecSignedCompare(&bv1, &bv3) == 0);
    
    // Test equal cases
    BitVec bv3 = BitVecClone(&bv1);
    result     = result && !(BitVecCompare(&bv1, &bv3) < 0);
    result     = result && !(BitVecNumericalCompare(&bv1, &bv3) < 0);

Share :

Related Posts

BitVecInsertRange

BitVecInsertRange Description Insert multiple bits of the same value at a specific position. All existing bits at and after the position are shifted right.

Read More

BitVecSwap

BitVecSwap Description Efficiently swap the contents of two bitvectors. This is much faster than copying both bitvectors.

Read More

BitVecInsertPattern

BitVecInsertPattern Description Insert a bit pattern from a byte at a specific position. Only the specified number of bits from the pattern are inserted.

Read More