Skip to content

Commit 4e23918

Browse files
author
Gioh Kim
committed
Move exercises into tests directory
It's easy to manage the tests. No need to change cargo.toml and src directory if tests exists in tests directory. So I can add test at anytime without touching any other file.
1 parent 16d3470 commit 4e23918

8 files changed

+52
-100
lines changed

Diff for: Cargo.toml

-16
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,6 @@ path = "src/project/main.rs"
9191
name = "functional_iterator"
9292
path = "src/functional_iterator/main.rs"
9393

94-
[[bin]]
95-
name = "functional_iterator_ex"
96-
path = "src/functional_iterator/ex/main.rs"
97-
9894
[[bin]]
9995
name = "functional_function_pointer"
10096
path = "src/functional_function_pointer/main.rs"
@@ -103,10 +99,6 @@ path = "src/functional_function_pointer/main.rs"
10399
name = "functional_closure_nocapture"
104100
path = "src/functional_closure_nocapture/main.rs"
105101

106-
[[bin]]
107-
name = "functional_closure_nocapture_ex"
108-
path = "src/functional_closure_nocapture/ex/main.rs"
109-
110102
[[bin]]
111103
name = "functional_closure_capture"
112104
path = "src/functional_closure_capture/main.rs"
@@ -135,10 +127,6 @@ path = "src/functional_map_debugging/main.rs"
135127
name = "functional_filter"
136128
path = "src/functional_filter/main.rs"
137129

138-
[[bin]]
139-
name = "functional_filter_ex"
140-
path = "src/functional_filter/ex/main.rs"
141-
142130
[[bin]]
143131
name = "functional_reduce"
144132
path = "src/functional_reduce/main.rs"
@@ -227,10 +215,6 @@ path = "src/lifetime/main.rs"
227215
name = "smart_pointer_basic"
228216
path = "src/smart_pointer_basic/main.rs"
229217

230-
[[bin]]
231-
name = "smart_pointer_basic_ex"
232-
path = "src/smart_pointer_basic/ex/main.rs"
233-
234218
[[bin]]
235219
name = "smart_pointer_application"
236220
path = "src/smart_pointer_application/main.rs"

Diff for: README.md

+14
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,20 @@ Hello, function_for!
4747
10 - Buzz
4848
```
4949

50+
## 테스트 실행 방법
51+
52+
tests/functional_closure_nocapture.rs 파일에 있는 test_functional_closure_nocapture 테스트 실행하기
53+
```
54+
% cargo test --test functional_closure_nocapture
55+
Finished `test` profile [unoptimized + debuginfo] target(s) in 0.05s
56+
Running tests/functional_closure_nocapture.rs (target/debug/deps/functional_closure_nocapture-f131d74e44a09c8b)
57+
58+
running 1 test
59+
test test_functional_closure_nocapture ... ok
60+
61+
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
62+
```
63+
5064
## License
5165

5266
이 책의 컨텐츠와 예제 코드는 다음 라이선스를 따릅니다.

Diff for: src/smart_pointer_basic/ex/main.rs

-16
This file was deleted.

Diff for: tests/functional_closure_capture.rs

-21
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,5 @@
11
#![allow(dead_code)]
22

3-
/*func adder() func(int) int {
4-
sum := 0
5-
return func(x int) int {
6-
sum += x
7-
return sum
8-
}
9-
}
10-
11-
func main() {
12-
pos, neg := adder(), adder()
13-
for i := 0; i < 10; i++ {
14-
fmt.Println(
15-
pos(i),
16-
neg(-2*i),
17-
)
18-
}
19-
}
20-
*/
21-
22-
fn main() {}
23-
243
fn adder() -> impl FnMut(i32) -> i32 {
254
let mut sum = 0;
265
move |x| {

Diff for: src/functional_closure_nocapture/ex/main.rs renamed to tests/functional_closure_nocapture.rs

+8-13
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,14 @@ fn main() {
2020
println!("result={}", r(5));
2121
}
2222

23-
#[cfg(test)]
24-
mod tests {
25-
use super::*;
23+
#[test]
24+
fn test_functional_closure_nocapture() {
25+
let f = double(double(inc));
26+
assert_eq!(9, f(5));
2627

27-
#[test]
28-
fn test_functional_closure_nocapture() {
29-
let f = double(double(inc));
30-
assert_eq!(9, f(5));
28+
let _f = double(double(double(inc)));
29+
//assert_eq!(0 /* FIX this number */, f(5));
3130

32-
let _f = double(double(double(inc)));
33-
//assert_eq!(0 /* FIX this number */, f(5));
34-
35-
let _f = double(double(double(double(inc))));
36-
//assert_eq!(0 /* FIX this number */, f(5));
37-
}
31+
let _f = double(double(double(double(inc))));
32+
//assert_eq!(0 /* FIX this number */, f(5));
3833
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#![allow(dead_code)]
22

3-
fn main() {}
4-
53
fn check_fibonacci(_v: i32) -> bool {
64
// v로 전달받은 수가 피보나치 수열에 있는 수인지 확인하는 함수입니다.
75
// 피보나치 수열에 속한 수이면 true, 아니면 false를 반환하세요.
@@ -14,13 +12,8 @@ fn get_fibonacci(_limit: i32) -> Vec<i32> {
1412
vec![1, 1, 2, 3, 5, 8]
1513
}
1614

17-
#[cfg(test)]
18-
mod tests {
19-
use super::*;
20-
21-
#[test]
22-
fn test_functional_filter() {
23-
assert_eq!(false, check_fibonacci(4));
24-
assert_eq!(vec![1, 1, 2, 3, 5, 8], get_fibonacci(10));
25-
}
15+
#[test]
16+
fn test_functional_filter() {
17+
assert_eq!(false, check_fibonacci(4));
18+
assert_eq!(vec![1, 1, 2, 3, 5, 8], get_fibonacci(10));
2619
}

Diff for: src/functional_iterator/ex/main.rs renamed to tests/functional_iterator.rs

+15-23
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,20 @@ impl Iterator for Fibonacci {
3030
Some(current)
3131
}
3232
}
33-
34-
fn main() {}
35-
36-
#[cfg(test)]
37-
mod tests {
38-
use super::*;
39-
40-
#[test]
41-
fn test_functional_iterator() {
42-
// Solution
43-
let mut fib_iter = Fibonacci {
44-
curr: 0,
45-
next: 1,
46-
buffer: Vec::new(),
47-
counter: 0,
48-
};
49-
50-
for _ in 1..=10 {
51-
let _ = fib_iter.next().unwrap();
52-
}
53-
54-
// Exercise
55-
assert_eq!(5, fib_iter.nth(5));
33+
#[test]
34+
fn test_functional_iterator() {
35+
// Solution
36+
let mut fib_iter = Fibonacci {
37+
curr: 0,
38+
next: 1,
39+
buffer: Vec::new(),
40+
counter: 0,
41+
};
42+
43+
for _ in 1..=10 {
44+
let _ = fib_iter.next().unwrap();
5645
}
46+
47+
// Exercise
48+
assert_eq!(5, fib_iter.nth(5));
5749
}

Diff for: tests/smart_pointer_basic.rs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#[test]
2+
fn test_smart_pointer_basic() {
3+
// 아래 코드는 패닉을 발생시키고 테스트를 종료시킵니다.
4+
// 왜 패닉이 발생할까요? 어떡게 고칠 수 있을까요?
5+
// 힌트: Box만 사용하면 고칠 수 없습니다.
6+
// Box::new([0; 1024*1024*1024])와 같이 Box에 전달할 슬라이스를 만들 때 이미 스택에 배열을 생성한 후 Box에 전달하기 때문입니다.
7+
// reference: https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-TryFrom%3CVec%3CT%3E%3E-for-Box%3C%5BT;+N%5D%3E
8+
//let big_array: [i32; 1024 * 1024 * 1024] = [0; 1024 * 1024 * 1024];
9+
//let l = big_array.len();
10+
//println!("last element:{}", big_array[l - 1]);
11+
}

0 commit comments

Comments
 (0)