Skip to content

Commit

Permalink
Added alloc_len
Browse files Browse the repository at this point in the history
  • Loading branch information
TimoLassmann committed May 8, 2024
1 parent a147ff2 commit 172adbb
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 12 deletions.
7 changes: 3 additions & 4 deletions src/data/bitfield.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ int tl_bitfield_hamming(tl_bitfield *b1, tl_bitfield *b2, int32_t* dist)
int32_t len = b1->alloc_len;
int32_t count = 0;
for(int i = 0; i < len; i++){
/* fprintf(stderr, "b1->m[%d] = %llX b2->m[%d] = %llX\n", i, b1->m[i], i, b2->m[i]); */
count += _tl_bitfield_popcount_branchless(b1->m[i] ^ b2->m[i]);
}
*dist = count;
Expand Down Expand Up @@ -51,12 +50,13 @@ int tl_bitfield_set(tl_bitfield *b, int32_t index)
return OK;
}

int tl_bitfield_get(tl_bitfield *b, int32_t index)
int tl_bitfield_get(tl_bitfield *b, int32_t index, uint8_t* bit)
{
if(index < 0 || index >= b->len){
return FAIL;
}
return (b->m[index >> BIT_SHIFT] & (1ULL << (index & BIT_MASK))) != 0;
*bit = (b->m[index >> BIT_SHIFT] & (1ULL << (index & BIT_MASK))) != 0;
return OK;
}

int tl_bitfield_clear(tl_bitfield *b, int32_t index)
Expand Down Expand Up @@ -101,7 +101,6 @@ void tl_bitfield_free(tl_bitfield *b)
}



#undef BIT_MASK
#undef BIT_SHIFT
#undef BITS_W
2 changes: 1 addition & 1 deletion src/data/bitfield.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ tld_external int tl_bitfield_hamming(tl_bitfield *b1, tl_bitfield *b2, int32_t*


tld_external int tl_bitfield_set(tl_bitfield *b, int32_t index);
tld_external int tl_bitfield_get(tl_bitfield *b, int32_t index);
tld_external int tl_bitfield_get(tl_bitfield *b, int32_t index, uint8_t* bit);
tld_external int tl_bitfield_clear(tl_bitfield *b, int32_t index);

tld_external int tl_bitfield_reset(tl_bitfield *b);
Expand Down
8 changes: 4 additions & 4 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ target_link_libraries(unit-tpool PRIVATE tld-dev Threads::Threads)

endif(Threads_FOUND)

add_executable(unit_bit
add_executable(unit-bit
utests/unit_bitfield.c
)
target_link_libraries(unit_bit PRIVATE tld-dev)
target_link_libraries(unit-bit PRIVATE tld-dev)
add_test(
NAME unit_bit
COMMAND unit_bit
NAME unit-bit
COMMAND unit-bit
)

add_executable(unit-kdtree utests/unit_kdtree.c)
Expand Down
34 changes: 31 additions & 3 deletions tests/utests/unit_bitfield.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,20 @@ To make sure bits are set and can be retrieved
int tl_bitfield_test3(void) {
tl_bitfield *b = NULL;
int status = 0;
uint8_t bit = 0;
tl_bitfield_alloc(&b, 100);
for(int i = 0; i < 100; i++){
tl_bitfield_set(b, i);
}

for(int i = 0; i < 100; i++){
status = tl_bitfield_get(b, i);
if(status != 1){
RUN(tl_bitfield_get(b, i,&bit));
if(bit != 1){
ERROR_MSG("tl_bitfield_get failed");
}
}

status = tl_bitfield_get(b, 100);
status = tl_bitfield_get(b, 100,&bit);
if(status != FAIL){
ERROR_MSG("tl_bitfield_get failed");
}
Expand Down Expand Up @@ -106,7 +107,33 @@ int tl_bitfield_test4(void)
return OK;
ERROR:
return FAIL;
}

/* Test to set and get bits */
int tl_bitfield_test5(void)
{
tl_bitfield *b = NULL;
int status = 0;
uint8_t bit = 0;
tl_bitfield_alloc(&b, 100);
for(int i = 0; i < 100; i++){
tl_bitfield_set(b, i);
}

for(int i = 0; i < 100; i++){
RUN(tl_bitfield_get(b, i,&bit));
if(bit != 1){
ERROR_MSG("tl_bitfield_get failed");
}
}

status = tl_bitfield_get(b, 100, &bit);
if(status != FAIL){
ERROR_MSG("tl_bitfield_get failed");
}
return OK;
ERROR:
return FAIL;
}

int main(void)
Expand All @@ -117,6 +144,7 @@ int main(void)

RUN(tl_bitfield_test3());
RUN(tl_bitfield_test4());
RUN(tl_bitfield_test5());
return EXIT_SUCCESS;
ERROR:
return EXIT_FAILURE;
Expand Down

0 comments on commit 172adbb

Please sign in to comment.