diff options
Diffstat (limited to 'MapTests/DebouncerTests.swift')
| -rw-r--r-- | MapTests/DebouncerTests.swift | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/MapTests/DebouncerTests.swift b/MapTests/DebouncerTests.swift new file mode 100644 index 0000000..9ac36cd --- /dev/null +++ b/MapTests/DebouncerTests.swift @@ -0,0 +1,71 @@ +// Copyright (C) 2024 Rubén Beltrán del Río + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +import Foundation +// You should have received a copy of the GNU General Public License +// along with this program. If not, see https://map.tranquil.systems. +import Testing + +@testable import Map + +struct DebouncerTests { + + @Test func testDebouncerExecutesAfterDelay() async throws { + let debouncer = Debouncer(seconds: 0.1) + var executed = false + + debouncer.debounce { + executed = true + } + + #expect(executed == false) + + try await Task.sleep(nanoseconds: 150_000_000) // 0.15 seconds + + #expect(executed == true) + } + + @Test func testDebouncerCancelsReplacement() async throws { + let debouncer = Debouncer(seconds: 0.1) + var firstExecuted = false + var secondExecuted = false + + debouncer.debounce { + firstExecuted = true + } + + debouncer.debounce { + secondExecuted = true + } + + try await Task.sleep(nanoseconds: 150_000_000) // 0.15 seconds + + #expect(firstExecuted == false) + #expect(secondExecuted == true) + } + + @Test func testDebouncerMultipleReplacements() async throws { + let debouncer = Debouncer(seconds: 0.1) + var counter = 0 + + for i in 1...5 { + debouncer.debounce { + counter += i + } + } + + try await Task.sleep(nanoseconds: 150_000_000) // 0.15 seconds + + #expect(counter == 5) + } + +} |