Fixed memcpy/memmove mistake in btree tests

A classic C footgun, overlapping mempcpys, that somtimes only fail when
optimizations are enabled. Adopting memmove as needed.
This commit is contained in:
Christopher Haster
2023-03-13 03:57:50 -05:00
parent 8732904ef6
commit c55cc4d010
+8 -6
View File
@@ -449,9 +449,10 @@ code = '''
&alphas[i % 26], 1) => 0; &alphas[i % 26], 1) => 0;
// add to sim // add to sim
memcpy(&sim[id+1], &sim[id], sim_size-id); memmove(&sim[id+1], &sim[id], sim_size-id);
sim[id] = alphas[i % 26]; sim[id] = alphas[i % 26];
sim_size += 1; sim_size += 1;
printf("%c\n", alphas[i % 26]);
} }
// check that btree matches sim // check that btree matches sim
@@ -493,6 +494,7 @@ code = '''
// clean up sim // clean up sim
free(sim); free(sim);
lfs_deinit(&lfs) => 0;
} }
''' '''
@@ -615,8 +617,8 @@ code = '''
&alphas[i % 26], 1) => 0; &alphas[i % 26], 1) => 0;
// add to sim // add to sim
memcpy(&sim[id+1], &sim[id], sim_size-id); memmove(&sim[id+1], &sim[id], sim_size-id);
memcpy(&sim_weights[id+1], &sim_weights[id], memmove(&sim_weights[id+1], &sim_weights[id],
(sim_size-id)*sizeof(lfs_size_t)); (sim_size-id)*sizeof(lfs_size_t));
sim[id] = alphas[i % 26]; sim[id] = alphas[i % 26];
sim_weights[id] = weight; sim_weights[id] = weight;
@@ -1756,7 +1758,7 @@ code = '''
lfsr_btree_pop(&lfs, &btree, id) => 0; lfsr_btree_pop(&lfs, &btree, id) => 0;
// remove from sim // remove from sim
memcpy(&sim[id], &sim[id+1], sim_size-(id+1)); memmove(&sim[id], &sim[id+1], sim_size-(id+1));
sim_size -= 1; sim_size -= 1;
} }
@@ -1979,8 +1981,8 @@ code = '''
lfsr_btree_pop(&lfs, &btree, weighted_id+sim_weights[id]-1) => 0; lfsr_btree_pop(&lfs, &btree, weighted_id+sim_weights[id]-1) => 0;
// remove from sim // remove from sim
memcpy(&sim[id], &sim[id+1], sim_size-(id+1)); memmove(&sim[id], &sim[id+1], sim_size-(id+1));
memcpy(&sim_weights[id], &sim_weights[id+1], memmove(&sim_weights[id], &sim_weights[id+1],
(sim_size-(id+1))*sizeof(lfs_size_t)); (sim_size-(id+1))*sizeof(lfs_size_t));
sim_size -= 1; sim_size -= 1;
} }