Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Comparing decimals in Swift Testing
Search
417.72KI
July 29, 2025
Programming
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Comparing decimals in Swift Testing
https://love-swift.connpass.com/event/361053/
417.72KI
July 29, 2025
More Decks by 417.72KI
See All by 417.72KI
Reboot a personal app abandoned for 10 years with recent techs
417_72ki
0
130
iTunes・おぼえていますか〜ScriptingBridge今昔物語〜
417_72ki
1
240
The history of entry-point in iOS app Development
417_72ki
0
540
R.swift to Asset Symbols
417_72ki
0
400
Refactor with using `available` and `deprecated`
417_72ki
3
840
CLIツールにSwift Concurrencyを適用させようとしている話
417_72ki
3
520
CI with Danger-Swift
417_72ki
1
280
Graduation from Playground beginner
417_72ki
3
1k
Trap Questions in Java and Obj-C
417_72ki
1
380
Other Decks in Programming
See All in Programming
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
140
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
140
信頼性の目標を誰も求めてない
shubox
0
490
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
460
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
860
ALB ログから Trace を気合で繋げる技術
fohte
7
880
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
430
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
170
高専キャリア LT 発表内容
crysta1221
6
5.6k
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
470
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
How to train your dragon (web standard)
notwaldorf
97
6.8k
Transcript
4XJGU5FTUJOHʹ͓͚Δ খͷൺֱ 4XJGUѪձWPM!8FBMUI/BWJ
"CPVU struct Me { let name = “(redacted)” let twitter
= "417_72ki" let gitHub = "417-72KI" let workAt = "(redacted)" let job = "Software Engineer in Mobile" let communities = ["love_swift", "Chiba.swift"] }
None
ςετɺॻ͍ͯ·͔͢ʁ ❌
ςετɺॻ͍ͯ·͢ΑͶʁ
খͷςετɺॻ͍ͯ·͔͢ʁ
খͷςετͷྫ ࡶ import XCTest final class SampleTests: XCTestCase { func
testExample() { let a = 0.1 let b = 0.2 XCTAssertEqual(a, 0.1) XCTAssertEqual(b, 0.2) XCTAssertEqual(a + b, 0.3) XCTAssertEqual(a - b, -0.1) XCTAssertEqual(b - a, 0.1) XCTAssertEqual(a * b, 0.02) XCTAssertEqual(a / b, 0.5) XCTAssertEqual(b / a, 2) } }
খͷςετͷྫ ࣮ߦ݁Ռ w খͷςετɺॻ͍ͯ·͔͢ʁ
🤔
খͷςετͷྫ ී௨Βͳ͍ func testExample2() { func doSomething(_ a: Int, _
b: Int) -> Int { let tmp = Double(a) / 10 + Double(b) / 10 return Int(tmp * 10) } XCTAssertEqual(doSomething(1, 7), 8) }
খͷςετͷྫ ࣮ߦ݁Ռ
ࡶʹղઆ %PVCMF'MPBUුಈখ w ਐͷখΛਐʹม͢Δ w OͷͰදݱ w
w େ៉ྷͳʹͳΒͳ͍ w ࣮ମదͳॴͰؙΊΒΕͨۙࣅͰܭࢉ͢Δ
ࡶʹղઆ ਐʹมͯ͠ҰఆͷॴͰؙΊΒΕΔ IUUQTUPPMTNCTZTDPNDBMDVMBUPSTJFFFQIQ
ࡶʹղઆ ਐʹมͯ͠ҰఆͷॴͰؙΊΒΕΔ IUUQTUPPMTNCTZTDPNDBMDVMBUPSTJFFFQIQ
ࡶʹղઆ ਐʹมͯ͠ҰఆͷॴͰؙΊΒΕΔ IUUQTUPPMTNCTZTDPNDBMDVMBUPSTJFFFQIQ
ුಈখͷςετ ؙΊޡࠩΛߟ্ྀͨ͠Ͱ࣮͢Δඞཁ͕͋Δ
ରॲ๏ 9$5FTUͷ߹ func testExample() { let a = 0.1 let
b = 0.2 XCTAssertEqual(a, 0.1) XCTAssertEqual(b, 0.2) XCTAssertEqual(a + b, 0.3) XCTAssertEqual(a - b, -0.1) XCTAssertEqual(b - a, 0.1) XCTAssertEqual(a * b, 0.02) XCTAssertEqual(a / b, 0.5) XCTAssertEqual(b / a, 2) }
ରॲ๏ 9$5FTUͷ߹ func testExample() { let a = 0.1 let
b = 0.2 XCTAssertEqual(a, 0.1, accuracy: 0.01) XCTAssertEqual(b, 0.2, accuracy: 0.01) XCTAssertEqual(a + b, 0.3, accuracy: 0.01) XCTAssertEqual(a - b, -0.1, accuracy: 0.01) XCTAssertEqual(b - a, 0.1, accuracy: 0.01) XCTAssertEqual(a * b, 0.02, accuracy: 0.01) XCTAssertEqual(a / b, 0.5, accuracy: 0.01) XCTAssertEqual(b / a, 2, accuracy: 0.01) }
ରॲ๏ 9$5FTUͷ߹
4XJGU5FTUJOHͷ߹ʁ
ͱΓ͋͑ͣมͯ͠ΈΔ HJHJOFUTXJGUUFTUJOHSFWPMVUJPOBSZ
TXJGUUFTUJOHSFWPMVUJPOBSZͰม #FGPSF import XCTest final class SwiftTestingSampleTests: XCTestCase { func
testExample() { let a = 0.1 let b = 0.2 XCTAssertEqual(a, 0.1, accuracy: 0.01) XCTAssertEqual(b, 0.2, accuracy: 0.01) XCTAssertEqual(a + b, 0.3, accuracy: 0.01) XCTAssertEqual(a - b, -0.1, accuracy: 0.01) XCTAssertEqual(b - a, 0.1, accuracy: 0.01) XCTAssertEqual(a * b, 0.02, accuracy: 0.01) XCTAssertEqual(a / b, 0.5, accuracy: 0.01) XCTAssertEqual(b / a, 2, accuracy: 0.01) } }
TXJGUUFTUJOHSFWPMVUJPOBSZͰม "GUFS import Testing @Suite struct SwiftTestingSampleTests { @Test func
example() { let a = 0.1 let b = 0.2 #expect(a == 0.1, accuracy: 0.01) #expect(b == 0.2, accuracy: 0.01) #expect(a + b == 0.3, accuracy: 0.01) #expect(a - b == -0.1, accuracy: 0.01) #expect(b - a == 0.1, accuracy: 0.01) #expect(a * b == 0.02, accuracy: 0.01) #expect(a / b == 0.5, accuracy: 0.01) #expect(b / a == 2, accuracy: 0.01) } }
TXJGUUFTUJOHSFWPMVUJPOBSZͰม "GUFS 🤮
4XJGU5FTUJOHͷ w 4XJGU5FTUJOHʹ9$5"TTFSU&RVBM @@BDDVSBDZ ʹΘΔ"1*͕ແ͍ w 4XJGU5FBNࣗ༻ҙ͢Δؾແ͍༷ w TXJGUOVNFSJDTΛ͑ͱͷ͜ͱ
TXJGUOVNFSJDTΛ͏ #FGPSF import Testing @Suite struct SwiftTestingSampleTests { @Test func
example() { let a = 0.1 let b = 0.2 #expect(a == 0.1, accuracy: 0.01) #expect(b == 0.2, accuracy: 0.01) #expect(a + b == 0.3, accuracy: 0.01) #expect(a - b == -0.1, accuracy: 0.01) #expect(b - a == 0.1, accuracy: 0.01) #expect(a * b == 0.02, accuracy: 0.01) #expect(a / b == 0.5, accuracy: 0.01) #expect(b / a == 2, accuracy: 0.01) } }
TXJGUOVNFSJDTΛ͏ "GUFS import Testing import Numerics @Suite struct SwiftTestingSampleTests {
@Test func example() { let a = 0.1 let b = 0.2 #expect(a.isApproximatelyEqual(to: 0.1, relativeTolerance: 0.01)) #expect(b.isApproximatelyEqual(to: 0.2, relativeTolerance: 0.01)) #expect((a + b).isApproximatelyEqual(to: 0.3, relativeTolerance: 0.01)) #expect((a - b).isApproximatelyEqual(to: -0.1, relativeTolerance: 0.01)) #expect((b - a).isApproximatelyEqual(to: 0.1, relativeTolerance: 0.01)) #expect((a * b).isApproximatelyEqual(to: 0.02, relativeTolerance: 0.01)) #expect((a / b).isApproximatelyEqual(to: 0.5, relativeTolerance: 0.01)) #expect((b / a).isApproximatelyEqual(to: 2, relativeTolerance: 0.01)) } }
Ͱ͜Ε͚ͩͷͨΊʹ ϥΠϒϥϦՃ͢Δͷݏ͡Όͳ͍ʁ
ඪ४"1*͚ͩͰͳΜͱ͔͍ͨ͠
9$5"TTFSU&RVBM @@BDDVSBDZ fi MFMJOF "TTFSUTUIBUUXP fl PBUJOHQPJOUWBMVFTBSFFRVBMXJUIJOBTQFDJ fi FEBDDVSBDZ w
1BSBNFUFST w FYQSFTTJPO w FYQSFTTJPO w BDDVSBDZ 5IJTQBSBNFUFSEFTDSJCFTUIFNBYJNVNEJ ff FSFODF CFUXFFO FYQSFTTJPO BOE FYQSFTTJPO GPSUIFTFWBMVFTUPCF DPOTJEFSFEFRVBM IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOYDUFTUYDUBTTFSUFRVBM @@BDDVSBDZ@ fi MFMJOF GSGX
5IJTQBSBNFUFSEFTDSJCFTUIFNBYJNVNEJ ff FSFODF CFUXFFO FYQSFTTJPO BOE FYQSFTTJPO GPSUIFTF WBMVFTUPCFDPOTJEFSFEFRVBM
BDDVSBDZ FYQSFTTJPOͱFYQSFTTJPOΛ ͍͠ͱΈͳͤΔޡࠩͷ࠷େ
FYQSFTTJPOͱFYQSFTTJPOͷ ͕ࠩBDDVSBDZҎԼͳΒ0,
࠷ऴతʹ ͜ΕΛ import XCTest final class SwiftTestingSampleTests: XCTestCase { func
testExample() { let a = 0.1 let b = 0.2 XCTAssertEqual(a, 0.1, accuracy: 0.01) XCTAssertEqual(b, 0.2, accuracy: 0.01) XCTAssertEqual(a + b, 0.3, accuracy: 0.01) XCTAssertEqual(a - b, -0.1, accuracy: 0.01) XCTAssertEqual(b - a, 0.1, accuracy: 0.01) XCTAssertEqual(a * b, 0.02, accuracy: 0.01) XCTAssertEqual(a / b, 0.5, accuracy: 0.01) XCTAssertEqual(b / a, 2, accuracy: 0.01) } }
࠷ऴతʹ ͜͏ͯ͠ import Testing @Suite struct SwiftTestingSampleTests { @Test func
example() { let a = 0.1 let b = 0.2 #expect(a == 0.1, accuracy: 0.01) #expect(b == 0.2, accuracy: 0.01) #expect(a + b == 0.3, accuracy: 0.01) #expect(a - b == -0.1, accuracy: 0.01) #expect(b - a == 0.1, accuracy: 0.01) #expect(a * b == 0.02, accuracy: 0.01) #expect(a / b == 0.5, accuracy: 0.01) #expect(b / a == 2, accuracy: 0.01) } }
࠷ऴతʹ ͜͏͡Ό import Testing @Suite struct SwiftTestingSampleTests { @Test func
example() { let a = 0.1 let b = 0.2 #expect(abs(a - 0.1) < 0.01) #expect(abs(b - 0.2) < 0.01) #expect(abs(a + b - 0.3) < 0.01) #expect(abs(a - b - -0.1) < 0.01) #expect(abs(b - a - 0.1) < 0.01) #expect(abs(a * b - 0.02) < 0.01) #expect(abs(a / b - 0.5) < 0.01) #expect(abs(b / a - 2) < 0.01) } }
·ͱΊ w ුಈখͷςετؙΊޡࠩΛߟྀ͠ͳ͍ͱ͍͚ͳ͍ w 9$5FTUͰ͋Ε9$5"TTFSU&RVBM @@BDDVSBDZ Λ͓͏ w 4XJGU5FTUJOHʹରԠ͢Δ"1*͕ແ͍ͷͰ͠Α͏ w
ͳΔ͘ϥΠϒϥϦʹཔΒͳ͍
fi O