Skip to content

Commit 241e7f6

Browse files
committed
fix vector write extend
1 parent d06d1a8 commit 241e7f6

File tree

2 files changed

+63
-2
lines changed

2 files changed

+63
-2
lines changed

src/vector.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,13 @@ t_ion_result_code vector_write(t_ion_vector *self, void *src, size_t len) {
104104
len_total = self->unit * len;
105105
curr_total = self->unit * self->curr_w;
106106

107-
if ((self->curr_w + len_total) >= self->size) {
107+
while ((self->curr_w + len) >= self->size) {
108108
result = vector_extend(self);
109109
if (result != RESULT_OK)
110110
return result;
111111
}
112112

113-
memcpy(self->body + (self->unit * self->curr_w), src, len_total);
113+
memcpy(self->body + curr_total, src, len_total);
114114
self->curr_w += len;
115115

116116
return RESULT_OK;

src/vector_test.c

+61
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,67 @@ Test(vector, vector_create) {
1212
cr_expect(vector->size > 0);
1313
cr_expect(vector->curr_r == 0);
1414
cr_expect(vector->curr_w == 0);
15+
16+
free(vector_consume(vector));
17+
}
18+
19+
Test(vector, vector_consume) {
20+
t_ion_vector *vector;
21+
void *data;
22+
23+
vector = vector_new(sizeof(int32_t));
24+
cr_expect(vector != NULL);
25+
26+
data = vector_consume(vector);
27+
cr_expect(data != NULL);
28+
29+
free(data);
30+
}
31+
32+
Test(vector, vector_write_loop) {
33+
t_ion_result_code result;
34+
t_ion_vector *vector;
35+
void *data;
36+
int32_t x;
37+
38+
vector = vector_new(sizeof(int32_t));
39+
cr_expect(vector != NULL);
40+
41+
for (x = 0; x < 1024; x++) {
42+
cr_expect(vector->curr_w == x);
43+
cr_expect(vector->curr_r == 0);
44+
result = vector_write(vector, &x, 1);
45+
cr_expect(result == RESULT_OK);
46+
cr_expect(vector->curr_w == x + 1);
47+
cr_expect(vector->curr_r == 0);
48+
}
49+
50+
free(vector_consume(vector));
51+
}
52+
53+
Test(vector, vector_write_array) {
54+
t_ion_result_code result;
55+
t_ion_vector *vector;
56+
int32_t t[1000000] = {0};
57+
int32_t o[1000000] = {0};
58+
int32_t x;
59+
60+
vector = vector_new(sizeof(int32_t));
61+
cr_expect(vector != NULL);
62+
63+
for (x = 0; x < 1000000; x++) {
64+
t[x] = x;
65+
}
66+
67+
result = vector_write(vector, t, 1000000);
68+
cr_expect(result == RESULT_OK);
69+
70+
result = vector_read(vector, o, 1000000);
71+
cr_expect(result == RESULT_OK);
72+
73+
for (x = 0; x < 1000000; x++) {
74+
cr_expect(t[x] == o[x]);
75+
}
1576
}
1677

1778
#endif

0 commit comments

Comments
 (0)