浏览代码

INIT: task5

Michael Mächtel 8 年前
父节点
当前提交
e25342f85a
共有 4 个文件被更改,包括 104 次插入0 次删除
  1. 5
    0
      files/hw1.txt
  2. 32
    0
      hw1/task5/README.md
  3. 40
    0
      hw1/task5/src/main.rs
  4. 27
    0
      hw1/task5/tests/output.bats

+ 5
- 0
files/hw1.txt 查看文件

@@ -27,3 +27,8 @@
27 27
 ./hw1/task4/src/lib.rs
28 28
 ./hw1/task4/tests/task4.rs
29 29
 
30
+./hw1/task5/Cargo.toml
31
+./hw1/task5/Cargo.lock
32
+./hw1/task5/src/main.rs
33
+./hw1/task5/tests/output.bats
34
+

+ 32
- 0
hw1/task5/README.md 查看文件

@@ -0,0 +1,32 @@
1
+# Homework hw1 task 5
2
+
3
+## Vorbereitungen
4
+
5
+Rufen Sie im `task5/` Verzeichnis: `cargo init --bin` auf. Dadurch wird ein Rust Binary Projekt in `task5/` angelegt. Mit `cargo build` wird die Library erstellt, der Aufruf `cargo run` startet das Programm. Der Aufruf von `cargo test` ruft die UNIT-Tests im `src/main.rs` auf.
6
+
7
+Ausserdem können die korrekten Outputs Ihres Programms auf der Console mit dem Aufruf von `bats tests/output.bats` getestet werden.
8
+
9
+## task
10
+
11
+Schreiben Sie ein Programm, in welchem eine von Ihnen selbst geschriebene Funktion
12
+
13
+```rust
14
+fn is_prime(n: u64) -> bool
15
+```
16
+
17
+genutzt wird, die überprüft, ob eine gegebene Zahl eine Primzahl ist. Die Funktion muss nicht auf Laufzeit optimiert werden.
18
+
19
+Die *main()* Funktion gibt in einer Schleife die Zahlen von 1 bis 30 aus. Die Zahlen, die eine Primzahlt sind werden in der Ausgabe mit einem `*`` Zeichen markiert.
20
+
21
+```
22
+1
23
+2*
24
+3*
25
+4
26
+5*
27
+...
28
+```
29
+
30
+Nutzen Sie die schon vorgegebene Datei `main.rs`!
31
+
32
+Verwenden Sie keine Funktionen aus Bibliotheken dafür, sondern implementieren Sie die Funktion selbst.

+ 40
- 0
hw1/task5/src/main.rs 查看文件

@@ -0,0 +1,40 @@
1
+//! hw01t5: Primzahltest
2
+fn is_prime(n: u64) -> bool {
3
+    unimplemented!();
4
+}
5
+
6
+
7
+fn main() {
8
+    unimplemented!();
9
+}
10
+
11
+#[test]
12
+fn small_primes() {
13
+    assert!(is_prime(2));
14
+    assert!(is_prime(3));
15
+    assert!(is_prime(5));
16
+    assert!(is_prime(7));
17
+}
18
+
19
+#[test]
20
+fn small_composites() {
21
+    assert!(!is_prime(1));
22
+    assert!(!is_prime(4));
23
+    assert!(!is_prime(6));
24
+    assert!(!is_prime(8));
25
+    assert!(!is_prime(9));
26
+}
27
+
28
+#[test]
29
+fn large_primes() {
30
+    assert!(is_prime(1_300_769));
31
+    assert!(is_prime(1_300_297));
32
+    assert!(is_prime(7_367_287));
33
+}
34
+
35
+#[test]
36
+fn large_composites() {
37
+    assert!(!is_prime(908_209));
38
+    assert!(!is_prime(3_073_009));
39
+    assert!(!is_prime(4_897_369));
40
+}

+ 27
- 0
hw1/task5/tests/output.bats 查看文件

@@ -0,0 +1,27 @@
1
+#!/usr/bin/env bats
2
+
3
+
4
+@test "Check that we have a debug output" {
5
+    run stat "$BATS_TEST_DIRNAME/../target/debug/task5"
6
+    [ "$status" -eq 0 ]
7
+}
8
+
9
+@test "Output must be from 1..30 and correct formated" {
10
+    run "$BATS_TEST_DIRNAME/../target/debug/task5"
11
+    [[ "${lines[0]}" =~ "1" ]]
12
+    [[ "${lines[1]}" =~ "2*" ]]
13
+    [[ "${lines[2]}" =~ "3*" ]]
14
+    [[ "${lines[3]}" =~ "4" ]]
15
+    [[ "${lines[4]}" =~ "5" ]]
16
+    [[ "${lines[25]}" =~ "26" ]]
17
+    [[ "${lines[26]}" =~ "27" ]]
18
+    [[ "${lines[27]}" =~ "28" ]]
19
+    [[ "${lines[28]}" =~ "29*" ]]
20
+    [[ "${lines[29]}" =~ "30" ]]
21
+}
22
+
23
+# wc output with white spaces is trimmed by xargs
24
+@test "Output must be exact 30 lines long" {
25
+    run bash -c "'$BATS_TEST_DIRNAME/../target/debug/task5' | wc -l | xargs"
26
+    [ "$output" = "30" ]
27
+}

正在加载...
取消
保存