Skip to content

Commit e7e12db

Browse files
Add book-tore - tidy
1 parent 8fdb9ba commit e7e12db

File tree

3 files changed

+65
-104
lines changed

3 files changed

+65
-104
lines changed

exercises/practice/book-store/.meta/example.s

Lines changed: 45 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -8,75 +8,69 @@ count:
88
beqz a0, .return
99

1010
.loop:
11-
addi a0, a0, -2
11+
addi a0, a0, -2
1212
add t5, a1, a0
13-
lhu t0, 0(t5) /* book */
14-
slli t0, t0, 1
13+
lhu t0, 0(t5) /* book */
14+
slli t0, t0, 1
1515
add t5, a2, t0
16-
lhu t1, 0(t5)
17-
addi t1, t1, 1 /* increment tally */
18-
sh t1, 0(t5)
16+
lhu t1, 0(t5)
17+
addi t1, t1, 1 /* increment tally */
18+
sh t1, 0(t5)
1919
bnez a0, .loop
2020

2121
.return:
2222
jalr zero, 0(t6) /* return */
2323

2424

2525

26-
2726
/* void sort(uint16_t *tally) */
2827
sort:
29-
addi t0, a0, 4
30-
addi t1, a0, 12 /* offsets 4..10 for books 2..5 */
28+
addi t0, a0, 4
29+
addi t1, a0, 12 /* offsets 4..10 for books 2..5 */
3130

3231
.outer:
33-
lhu t2, 0(t0)
34-
move t3, t0 /* offset for inner loop of insertion sort */
32+
lhu t2, 0(t0)
33+
move t3, t0 /* offset for inner loop of insertion sort */
3534

3635
.inner:
3736
addi t3, t3, -2
3837
beq t3, a0, .exit
3938

40-
lhu t4, 0(t3)
41-
bge t4, t2, .exit
39+
lhu t4, 0(t3)
40+
bge t4, t2, .exit
4241

4342
sh t4, 2(t3)
4443
j .inner
4544

4645
.exit:
47-
sh t2, 2(t3)
48-
46+
sh t2, 2(t3)
4947
addi t0, t0, 2
5048
bne t0, t1, .outer
5149

5250
jalr zero, 0(t6) /* return */
5351

5452

55-
56-
57-
5853
/* void difference(uint16_t *tally); */
5954
difference:
60-
lh t0, 10(a0)
61-
lh t1, 8(a0)
55+
lh t0, 10(a0)
56+
lh t1, 8(a0)
6257
sub t3, t1, t0
63-
sh t3, 8(a0) /* tally[4] - tally[5] */
58+
sh t3, 8(a0) /* tally[4] - tally[5] */
6459

65-
lh t0, 6(a0)
60+
lh t0, 6(a0)
6661
sub t3, t0, t1
67-
sh t3, 6(a0) /* tally[3] - tally[4] */
62+
sh t3, 6(a0) /* tally[3] - tally[4] */
6863

69-
lh t1, 4(a0)
64+
lh t1, 4(a0)
7065
sub t3, t1, t0
71-
sh t3, 4(a0) /* tally[2] - tally[3] */
66+
sh t3, 4(a0) /* tally[2] - tally[3] */
7267

73-
lh t0, 2(a0)
68+
lh t0, 2(a0)
7469
sub t3, t0, t1
75-
sh t3, 2(a0) /* tally[1] - tally[2] */
70+
sh t3, 2(a0) /* tally[1] - tally[2] */
7671
jalr zero, 0(t6) /* return */
7772

7873

79-
8074
/* void adjust(uint16_t *tally); */
8175
adjust:
8276
lhu t0, 6(a0)
@@ -90,52 +84,57 @@ adjust:
9084

9185
.adjust:
9286
sub t0, t0, t3
93-
sh t0, 6(a0)
87+
sh t0, 6(a0)
9488
add t1, t1, t3
9589
add t1, t1, t3
96-
sh t1, 8(a0)
90+
sh t1, 8(a0)
9791
sub t2, t2, t3
98-
sh t2, 10(a0)
92+
sh t2, 10(a0)
9993

10094
jalr zero, 0(t6) /* return */
10195

10296

103-
10497
/* uint32_t score(uint16_t *tally); */
10598
score:
106-
lhu t1, 2(a0)
107-
li t0, 800 /* price of 1 book */
99+
lhu t1, 2(a0)
100+
li t0, 800 /* price of 1 book */
108101
mul t2, t0, t1
109102

110-
lhu t1, 4(a0)
111-
li t0, 1520 /* price of 2 books */
112-
mul t3, t0, t1
103+
lhu t1, 4(a0)
104+
li t0, 1520 /* price of 2 books */
105+
mul t3, t0, t1
113106
add t2, t2, t3
114107

115-
lhu t1, 6(a0)
116-
li t0, 2160 /* price of 3 books */
117-
mul t3, t0, t1
108+
lhu t1, 6(a0)
109+
li t0, 2160 /* price of 3 books */
110+
mul t3, t0, t1
118111
add t2, t2, t3
119112

120-
lhu t1, 8(a0)
121-
li t0, 2560 /* price of 4 books */
122-
mul t3, t0, t1
113+
lhu t1, 8(a0)
114+
li t0, 2560 /* price of 4 books */
115+
mul t3, t0, t1
123116
add t2, t2, t3
124117

125-
lhu t1, 10(a0)
126-
li t0, 3000 /* price of 5 books */
127-
mul t3, t0, t1
118+
lhu t1, 10(a0)
119+
li t0, 3000 /* price of 5 books */
120+
mul t3, t0, t1
128121
add a0, t2, t3
129122

130123
jalr zero, 0(t6) /* return */
131124

132125

133126
/* extern void total(size_t basket_count, const uint16_t *basket, uint16_t *tally); */
134127
total:
128+
addi sp, sp, -16
129+
sw zero, 0(sp)
130+
sw zero, 4(sp)
131+
sw zero, 8(sp)
132+
move a2, sp
135133
jal t6, count
136134
move a0, a2
137135
jal t6, sort
138136
jal t6, difference
139137
jal t6, adjust
140138
jal t6, score
139+
addi sp, sp, 16
141140
ret

exercises/practice/book-store/book_store_test.c

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55

66
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
77

8-
extern uint32_t total(size_t basket_count, const uint16_t *basket, uint16_t *tally);
9-
10-
/* extern uint32_t total_true(size_t basket_count, const uint16_t *basket); */
8+
extern uint32_t total(size_t basket_count, const uint16_t *basket);
119

1210
void setUp(void) {
1311
}
@@ -16,127 +14,109 @@ void tearDown(void) {
1614
}
1715

1816
void test_only_a_single_book(void) {
19-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
2017
const uint16_t basket[] = {1};
21-
TEST_ASSERT_EQUAL_UINT32(800, total(ARRAY_SIZE(basket), basket, tally));
18+
TEST_ASSERT_EQUAL_UINT32(800, total(ARRAY_SIZE(basket), basket));
2219
}
2320

2421
void test_two_of_the_same_book(void) {
2522
TEST_IGNORE();
26-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
2723
const uint16_t basket[] = {2, 2};
28-
TEST_ASSERT_EQUAL_UINT32(1600, total(ARRAY_SIZE(basket), basket, tally));
24+
TEST_ASSERT_EQUAL_UINT32(1600, total(ARRAY_SIZE(basket), basket));
2925
}
3026

3127
void test_empty_basket(void) {
3228
TEST_IGNORE();
33-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
34-
TEST_ASSERT_EQUAL_UINT32(0, total(0, NULL, tally));
29+
TEST_ASSERT_EQUAL_UINT32(0, total(0, NULL));
3530
}
3631

3732
void test_two_different_books(void) {
3833
TEST_IGNORE();
39-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
4034
const uint16_t basket[] = {1, 2};
41-
TEST_ASSERT_EQUAL_UINT32(1520, total(ARRAY_SIZE(basket), basket, tally));
35+
TEST_ASSERT_EQUAL_UINT32(1520, total(ARRAY_SIZE(basket), basket));
4236
}
4337

4438
void test_three_different_books(void) {
4539
TEST_IGNORE();
46-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
4740
const uint16_t basket[] = {1, 2, 3};
48-
TEST_ASSERT_EQUAL_UINT32(2160, total(ARRAY_SIZE(basket), basket, tally));
41+
TEST_ASSERT_EQUAL_UINT32(2160, total(ARRAY_SIZE(basket), basket));
4942
}
5043

5144
void test_four_different_books(void) {
5245
TEST_IGNORE();
53-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
5446
const uint16_t basket[] = {1, 2, 3, 4};
55-
TEST_ASSERT_EQUAL_UINT32(2560, total(ARRAY_SIZE(basket), basket, tally));
47+
TEST_ASSERT_EQUAL_UINT32(2560, total(ARRAY_SIZE(basket), basket));
5648
}
5749

5850
void test_five_different_books(void) {
5951
TEST_IGNORE();
60-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
6152
const uint16_t basket[] = {1, 2, 3, 4, 5};
62-
TEST_ASSERT_EQUAL_UINT32(3000, total(ARRAY_SIZE(basket), basket, tally));
53+
TEST_ASSERT_EQUAL_UINT32(3000, total(ARRAY_SIZE(basket), basket));
6354
}
6455

6556
void test_two_groups_of_four_is_cheaper_than_group_of_five_plus_group_of_three(void) {
6657
TEST_IGNORE();
67-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
6858
const uint16_t basket[] = {1, 1, 2, 2, 3, 3, 4, 5};
69-
TEST_ASSERT_EQUAL_UINT32(5120, total(ARRAY_SIZE(basket), basket, tally));
59+
TEST_ASSERT_EQUAL_UINT32(5120, total(ARRAY_SIZE(basket), basket));
7060
}
7161

7262
void test_two_groups_of_four_is_cheaper_than_groups_of_five_and_three(void) {
7363
TEST_IGNORE();
74-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
7564
const uint16_t basket[] = {1, 1, 2, 3, 4, 4, 5, 5};
76-
TEST_ASSERT_EQUAL_UINT32(5120, total(ARRAY_SIZE(basket), basket, tally));
65+
TEST_ASSERT_EQUAL_UINT32(5120, total(ARRAY_SIZE(basket), basket));
7766
}
7867

7968
void test_group_of_four_plus_group_of_two_is_cheaper_than_two_groups_of_three(void) {
8069
TEST_IGNORE();
81-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
8270
const uint16_t basket[] = {1, 1, 2, 2, 3, 4};
83-
TEST_ASSERT_EQUAL_UINT32(4080, total(ARRAY_SIZE(basket), basket, tally));
71+
TEST_ASSERT_EQUAL_UINT32(4080, total(ARRAY_SIZE(basket), basket));
8472
}
8573

8674
void test_two_each_of_first_four_books_and_one_copy_each_of_rest(void) {
8775
TEST_IGNORE();
88-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
8976
const uint16_t basket[] = {1, 1, 2, 2, 3, 3, 4, 4, 5};
90-
TEST_ASSERT_EQUAL_UINT32(5560, total(ARRAY_SIZE(basket), basket, tally));
77+
TEST_ASSERT_EQUAL_UINT32(5560, total(ARRAY_SIZE(basket), basket));
9178
}
9279

9380
void test_two_copies_of_each_book(void) {
9481
TEST_IGNORE();
95-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
9682
const uint16_t basket[] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5};
97-
TEST_ASSERT_EQUAL_UINT32(6000, total(ARRAY_SIZE(basket), basket, tally));
83+
TEST_ASSERT_EQUAL_UINT32(6000, total(ARRAY_SIZE(basket), basket));
9884
}
9985

10086
void test_three_copies_of_first_book_and_two_each_of_remaining(void) {
10187
TEST_IGNORE();
102-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
10388
const uint16_t basket[] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1};
104-
TEST_ASSERT_EQUAL_UINT32(6800, total(ARRAY_SIZE(basket), basket, tally));
89+
TEST_ASSERT_EQUAL_UINT32(6800, total(ARRAY_SIZE(basket), basket));
10590
}
10691

10792
void test_three_each_of_first_two_books_and_two_each_of_remaining_books(void) {
10893
TEST_IGNORE();
109-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
11094
const uint16_t basket[] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1, 2};
111-
TEST_ASSERT_EQUAL_UINT32(7520, total(ARRAY_SIZE(basket), basket, tally));
95+
TEST_ASSERT_EQUAL_UINT32(7520, total(ARRAY_SIZE(basket), basket));
11296
}
11397

11498
void test_four_groups_of_four_are_cheaper_than_two_groups_each_of_five_and_three(void) {
11599
TEST_IGNORE();
116-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
117100
const uint16_t basket[] = {1, 1, 2, 2, 3, 3, 4, 5, 1, 1, 2, 2, 3, 3, 4, 5};
118-
TEST_ASSERT_EQUAL_UINT32(10240, total(ARRAY_SIZE(basket), basket, tally));
101+
TEST_ASSERT_EQUAL_UINT32(10240, total(ARRAY_SIZE(basket), basket));
119102
}
120103

121104
void test_check_that_groups_of_four_are_created_properly_even_when_there_are_more_groups_of_three_than_groups_of_five(void) {
122105
TEST_IGNORE();
123-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
124106
const uint16_t basket[] = {1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5};
125-
TEST_ASSERT_EQUAL_UINT32(14560, total(ARRAY_SIZE(basket), basket, tally));
107+
TEST_ASSERT_EQUAL_UINT32(14560, total(ARRAY_SIZE(basket), basket));
126108
}
127109

128110
void test_one_group_of_one_and_four_is_cheaper_than_one_group_of_two_and_three(void) {
129111
TEST_IGNORE();
130-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
131112
const uint16_t basket[] = {1, 1, 2, 3, 4};
132-
TEST_ASSERT_EQUAL_UINT32(3360, total(ARRAY_SIZE(basket), basket, tally));
113+
TEST_ASSERT_EQUAL_UINT32(3360, total(ARRAY_SIZE(basket), basket));
133114
}
134115

135116
void test_one_group_of_one_and_two_plus_three_groups_of_four_is_cheaper_than_one_group_of_each_size(void) {
136117
TEST_IGNORE();
137-
uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };
138118
const uint16_t basket[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5};
139-
TEST_ASSERT_EQUAL_UINT32(10000, total(ARRAY_SIZE(basket), basket, tally));
119+
TEST_ASSERT_EQUAL_UINT32(10000, total(ARRAY_SIZE(basket), basket));
140120
}
141121

142122
int main(void) {

generators/exercises/book_store.py

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
77
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
88
9-
extern uint32_t total(size_t basket_count, const uint16_t *basket, uint16_t *tally);
10-
11-
/* extern uint32_t total_true(size_t basket_count, const uint16_t *basket); */
9+
extern uint32_t total(size_t basket_count, const uint16_t *basket);
1210
"""
1311

1412

@@ -17,22 +15,6 @@ def array_literal(numbers):
1715

1816

1917
def gen_func_body(prop, inp, expected):
20-
basket = inp["basket"]
21-
str_list = []
22-
str_list.append("uint16_t tally[6] = { 0, 0, 0, 0, 0, 0 };\n")
23-
24-
if len(basket) > 0:
25-
str_list.append(f"const uint16_t basket[] = {array_literal(basket)};\n")
26-
str_list.append(
27-
f"TEST_ASSERT_EQUAL_UINT32({expected}, {prop}(ARRAY_SIZE(basket), basket, tally));\n"
28-
)
29-
else:
30-
str_list.append(f"TEST_ASSERT_EQUAL_UINT32({expected}, {prop}(0, NULL, tally));\n")
31-
32-
33-
return "".join(str_list)
34-
35-
def gen_func_body_true(prop, inp, expected):
3618
basket = inp["basket"]
3719
str_list = []
3820
if len(basket) > 0:

0 commit comments

Comments
 (0)