Rust中的單元測試

概述

Rust內置了單元測試的支持,這點和Golang一樣,非常的棒,我超級喜歡單元測試!!!

本節課的代碼還是基于之前的求公約數的案例。
之前的完整代碼如下:

fn gcd(mut n: u64, mut m: u64) -> u64 {assert!(n != 0 && m != 0);while m != 0 {if m < n {let t = m;m = n;n = t;}m = m % n;}n
}fn main() {let r: u64 = gcd(88, 99);println!("{}", r);
}

添加單元測試代碼

基于之前的代碼,我們可以添加如下測試代碼:

#[test]
fn test_gcd(){assert_eq!(gcd(14, 15), 1);assert_eq!(gcd(2*3*5*11*17, 3*7*11*13*19), 3*11);
}

#[test]是一個標記,將test_gcd標記為一個測試函數,在正常編譯的時候會跳過它。但是如果使用 cargo test命令運行程序,則會自動包含并調用它。

在Rust中,因為這種機制的存在,我們可以將測試代碼緊挨著函數編寫,而不必單獨為測試代碼開辟一個新的文件。

實戰:單元測試

創建項目:

cargo new hello

修改代碼:

cd hello
vim src/main.rs

完整代碼如下:

fn gcd(mut n: u64, mut m: u64) -> u64 {assert!(n != 0 && m != 0);while m != 0 {if m < n {let t = m;m = n;n = t;}m %= n;}n
}#[test]
fn test_gcd(){assert_eq!(gcd(14, 15), 1);assert_eq!(gcd(2*3*5*11*17, 3*7*11*13*19), 3*11);
}fn main() {let r: u64 = gcd(88, 99);println!("{}", r);
}

執行測試:

zhangdapeng@zhangdapeng:~/code/hello$ cargo testCompiling c10_func v0.1.0 (/home/zhangdapeng/code/hello)Finished `test` profile [unoptimized + debuginfo] target(s) in 0.34sRunning unittests src/main.rs (target/debug/deps/c10_func-7066c0fd0fc42bb9)running 1 test
test test_gcd ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

運行代碼:

zhangdapeng@zhangdapeng:~/code/hello$ cargo testCompiling c10_func v0.1.0 (/home/zhangdapeng/code/hello)Finished `test` profile [unoptimized + debuginfo] target(s) in 0.34sRunning unittests src/main.rs (target/debug/deps/c10_func-7066c0fd0fc42bb9)running 1 test
test test_gcd ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

代碼清理:

zhangdapeng@zhangdapeng:~/code/hello$ cargo cleanRemoved 52 files, 14.0MiB total

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12243.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習筆記 PostgresML教程:使用SQL進行機器學習

機器學習的基本做法是將數據轉移到模型的環境中進行訓練。由于今天的數據庫比機器學習模型大好多個數量級,所以PostgresML的思路是,如果我們將模型引入數據集不是會容易得多嗎? PostgresML 是一個建立在流行的 PostgreSQL 數據庫之上的綜合機器學習平臺。它引入了一種稱為“…

最新極空間部署iCloudpd教程,實現自動同步iCloud照片到NAS硬盤

【iPhone福利】最新極空間部署iCloudpd教程&#xff0c;實現自動同步iCloud照片到NAS硬盤 哈嘍小伙伴們好&#xff0c;我是Stark-C~ 我記得我前年的時候發過一篇群暉使用Docker部署iCloudpd容器來實現自動同步iCloud照片的教程&#xff0c;當時熱度還很高&#xff0c;可見大家…

二分答案(區間范圍)

D. Jumping Through Segments 輸入數據 4 5 1 5 3 4 5 6 8 10 0 1 3 0 2 0 1 0 3 3 3 8 10 18 6 11 4 10 20 0 5 15 17 2 2 輸出范圍 7 0 5 13#include<bits/stdc.h> #define int long long using namespace std; typedef pair<char,int>PII; const int N2e510;…

測試和開發工作必備的17個Python自動化代碼

您是否厭倦了在日常工作中做那些重復性的任務&#xff1f;簡單但多功能的Python腳本可以解決您的問題。 我們將通過上下兩個篇章為您介紹17個能夠自動執行各種任務并提高工作效率Python腳本及其代碼。無論您是開發人員、數據分析師&#xff0c;還是只是希望簡化工作流程的人&…

算法學習筆記(Tarjan)

本文介紹 T a r j a n Tarjan Tarjan求強聯通分量、找割點和割邊、找環。 Tarjan求強聯通分量 例題&#xff1a;【模板】有向圖縮點 題目描述 給定一個 n n n點 m m m邊的有向圖&#xff08;保證不存在重邊與自環&#xff0c;但不保證連通&#xff09;&#xff0c;請你求出…

解決webstorm沒有vue語法提示;webstorm沒有代碼提示

解決webstorm沒有vue語法提示&#xff1b;webstorm沒有代碼提示 使用webstorm 2023.x 開發vue項目。發現死活沒有vue語法提示&#xff0c;即便是npm install、清理緩存。對比其他vue項目卻有語法提示&#xff0c;最后發現依賴庫被忽略了&#xff1a; 刪除掉node_modules 的忽略…

每日一學—K鄰算法:在風險傳導中的創新應用與實踐價值

文章目錄 &#x1f4cb; 前言&#x1f3af; K鄰算法的實踐意義&#x1f3af; 創新應用與案例分析&#x1f525; 參與方式 &#x1f4cb; 前言 在當今工業領域&#xff0c;圖思維方式與圖數據技術的應用日益廣泛&#xff0c;成為圖數據探索、挖掘與應用的堅實基礎。本文旨在分享…

linux的知識點分享

每個rpm都是獨立的&#xff0c;不需要依賴包&#xff0c;可以直接安裝成功 這個說法是不準確的。在Linux系統中&#xff0c;RPM&#xff08;Red Hat Package Manager&#xff09;軟件包管理器確實可以自動解決軟件包之間的依賴關系&#xff0c;并且通常會確保在安裝一個軟件包之…

【C/C++筆試練習】DNS劫持、三次握手、TCP協議、HTTPS、四次揮手、HTTP報文、擁塞窗口、POP3協議、UDP協議、收件人列表、養兔子

文章目錄 C/C筆試練習選擇部分&#xff08;1&#xff09;DNS劫持&#xff08;2&#xff09;三次握手&#xff08;3&#xff09;TCP協議&#xff08;4&#xff09;HTTPS&#xff08;5&#xff09;四次揮手&#xff08;6&#xff09;HTTP報文&#xff08;7&#xff09;擁塞窗口&a…

Windows內存管理 - 使用宏、斷言

DDK提供了大量的宏。在使用這些宏的時候&#xff0c;要注意一種錯誤的發生&#xff0c;這就是“側效”(Side Effect)。 宏一般由多行組成&#xff0c;如下面的形式&#xff0c;其中“\”代表換行。 #define PRINT(msg) KdPrint(("\n")); \KdPrint(msg); \KdPrint…

商務分析方法與工具(八):Python的趣味快捷-年少不知numpy好,再見才覺很簡單

Tips&#xff1a;"分享是快樂的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不僅有知識的海洋&#x1f30a;&#xff0c;還有滿滿的正能量加持&#x1f4aa;&#xff0c;快來和我一起分享這份快樂吧&#x1f60a;&#xff01; 喜歡我的博客的話&#xff0c;記得…

MySQL數據庫核心面試題

數據庫中的引擎 常用的引擎有InnoDB、MyIsam、Memory三種。 MyIsam&#xff1a;組織形式分為三種&#xff1a; frm文件存儲表結構、MyData文件存儲表中的數據、MyIndex文件存儲表的索引數據。是分開存儲的。 Memory&#xff1a;基于內存的&#xff0c;訪問速度快&#xff0…

C++11特性(二)

文章目錄 右值引用和移動語義左值引用和右值引用左值與左值引用右值與右值引用 右值引用有什么用完美轉發與萬能引用 右值引用和移動語義 左值引用和右值引用 所謂的引用就是給變量起別名&#xff0c;那么左值引用和右值引用的區別其實就在于左值和右值 左值與左值引用 左值…

算法_前綴和

DP34 【模板】前綴和 import java.util.Scanner;// 注意類名必須為 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的區別int n in.nextInt(),q in.ne…

JavaFX布局-HBox

JavaFX布局-HBox 常用屬性alignmentspacingchildrenmarginpaddinghgrow 實現方式Java實現Xml實現 綜合案例 HBox按照水平方向排列其子節點改變窗口大小,不會該部整體布局窗口太小會遮住內部元素&#xff0c;不會產生滾動條 常用屬性 alignment 對齊方式 new HBox().setAlign…

Angular前端項目在Apache httpd服務器上的部署

Apache Httpd和Tomcat主要區別&#xff1a;Tomcat是一個Java Servlet容器&#xff0c;用于運行Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;&#xff0c;而Apache HTTP服務器是一個通用的Web服務器&#xff0c;用于提供靜態和動態內容。 Apache httpd安裝&#…

RT Thread + CLion環境搭建

RT Thread CLion環境搭建 0.前言一、準備工具1. Env RT Thread v5.12.CLion安裝3.編譯及下載工具 二、新建Env工程三、CLion配置四、運行測試 0.前言 事情的起因是最近在使用RT Thread Studio時&#xff0c;發現默認的 rtt 內核版本及交叉編譯鏈版本都過于陳舊&#xff0c;于…

SpringBoot 表單提交參數綁定 List 下標越界,超過 256,報數組越界異常

文章目錄 》原因》解決方案 》原因 Spring Validation 的 org.springframework.validation.DataBinder 類中默認限制&#xff0c;表單提交 List 元素數量超過 256 時就會拋出異常 public class DataBinder implements PropertyEditorRegistry, TypeConverter {/** Default li…

JS算法-十大排序算法(上)

思想小劇場 如果我的相對論被證明是正確的&#xff0c;德國人就會說我是德國人&#xff0c;法國人會說我是一個世界公民&#xff1b;如果我的相對論被否定了&#xff0c;法國佬就會罵我是德國鬼子&#xff0c;而德國人就會把我歸為猶太人。—愛因斯坦 以下案例都是升序 const a…

《無畏契約》游戲畫面出現“撕裂感“,你清楚背后的原理嗎?

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄:&#x1f355; Collection與數據結構 (91平均質量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …