BitVecClone
- Function
- August 22, 2025
Table of Contents
BitVecClone
BitVecClone
Description
Create a deep copy of a bitvector. The returned bitvector must be deinitialized when no longer needed.
Parameters
Name | Direction | Description |
---|---|---|
bv | in | Bitvector to clone |
Usage example (from documentation)
BitVec copy = BitVecClone(&flags);
// ... use copy ...
BitVecDeinit(©);
Usage example (Cross-references)
- In
BitVec.c:165
:
}
BitVec BitVecClone(BitVec *bv) {
ValidateBitVec(bv);
- In
BitVec.c:925
:
// Create a temporary copy
BitVec temp = BitVecClone(bv);
// Rotate left
- In
BitVec.c:949
:
// 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);