diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e8bbfdd4..f3351b1c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,372 +15,11 @@ jobs: fail-fast: false matrix: label: - # Bare Metal - - Bare Metal Nvidia PTX 64 - # FIXME: fontdb currently can't handle this target. - # The `alloc::sync` module does not exist. - # - Bare Metal ARM Cortex-M thumbv6m - - Bare Metal ARM Cortex-M thumbv7em - - Bare Metal ARM Cortex-M thumbv7em Hardware Float - - Bare Metal ARM Cortex-M thumbv7m - - Bare Metal ARM Cortex-M thumbv8m.base - - Bare Metal ARM Cortex-M thumbv8m.main - - Bare Metal ARM Cortex-M thumbv8m.main Hardware Float - # FIXME: RISC-V without atomics doesn't work with ahash - # - Bare Metal RISC-V 32 i - # - Bare Metal RISC-V 32 imc - - Bare Metal RISC-V 32 imac - - Bare Metal RISC-V 64 gc - - Bare Metal RISC-V 64 imac - - # WebAssembly - - WebAssembly Unknown - - WebAssembly Web - - WebAssembly WASI - - # Windows - - Windows aarch64 - # FIXME: The `windows` crate doesn't compile on this target. - # - Windows i586 - - Windows i686 - - Windows x86_64 - - Windows i686 gnu - - Windows x86_64 gnu - - # Linux - - Linux i586 - - Linux i586 musl - - Linux i686 - - Linux i686 musl - - Linux x86_64 - - Linux x86_64 musl - # FIXME: We can't link anything without cross. - # - Linux x86_64 gnux32 - - Linux arm - - Linux arm musl - - Linux arm Hardware Float - - Linux arm musl Hardware Float - - Linux armv5te - - Linux armv5te musl - - Linux armv7 - - Linux armv7 musl - - Linux armv7 Hardware Float - - Linux armv7 musl Hardware Float - - Linux thumbv7neon - - Linux aarch64 - - Linux aarch64 musl - Linux powerpc - Linux powerpc64 - - Linux powerpc64le - - Linux riscv64gc - Linux s390x - Linux sparc64 - - # macOS - - macOS aarch64 - - macOS x86_64 - - # iOS - - iOS aarch64 - - iOS x86_64 - - # Android - - Android i686 - - Android x86_64 - - Android arm - - Android armv7 - - Android thumbv7neon - - Android aarch64 - - # Other Unixes - - FreeBSD i686 - - FreeBSD x86_64 - - illumos x86_64 - # FIXME: The target currently fails to link due to - # "ld: cannot find -lexecinfo" - # - NetBSD x86_64 - - Solaris sparcv9 - # - Solaris x86_64 - - # Testing other channels - - Windows Beta - - Windows Nightly - - Windows Beta gnu - - Windows Nightly gnu - - Linux Beta - - Linux Nightly - - macOS Beta - - macOS Nightly - include: - # Bare Metal - - label: Bare Metal Nvidia PTX 64 - target: nvptx64-nvidia-cuda - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - # FIXME: fontdb currently can't handle this target. - # The `alloc::sync` module does not exist. - # - label: Bare Metal ARM Cortex-M thumbv6m - # target: thumbv6m-none-eabi - # tests: skip - # dylib: skip - # release: skip - # no_std: true - # install_target: true - - - label: Bare Metal ARM Cortex-M thumbv7em - target: thumbv7em-none-eabi - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - - label: Bare Metal ARM Cortex-M thumbv7em Hardware Float - target: thumbv7em-none-eabihf - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - - label: Bare Metal ARM Cortex-M thumbv7m - target: thumbv7m-none-eabi - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - - label: Bare Metal ARM Cortex-M thumbv8m.base - target: thumbv8m.base-none-eabi - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - - label: Bare Metal ARM Cortex-M thumbv8m.main - target: thumbv8m.main-none-eabi - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - - label: Bare Metal ARM Cortex-M thumbv8m.main Hardware Float - target: thumbv8m.main-none-eabihf - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - # - label: Bare Metal RISC-V 32 i - # target: riscv32i-unknown-none-elf - # tests: skip - # dylib: skip - # release: skip - # no_std: true - # install_target: true - - # - label: Bare Metal RISC-V 32 imc - # target: riscv32imc-unknown-none-elf - # tests: skip - # dylib: skip - # release: skip - # no_std: true - # install_target: true - - - label: Bare Metal RISC-V 32 imac - target: riscv32imac-unknown-none-elf - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - - label: Bare Metal RISC-V 64 gc - target: riscv64gc-unknown-none-elf - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - - label: Bare Metal RISC-V 64 imac - target: riscv64imac-unknown-none-elf - tests: skip - dylib: skip - release: skip - no_std: true - install_target: true - - # WebAssembly - - label: WebAssembly Unknown - target: wasm32-unknown-unknown - cross: skip - tests: skip - dylib: skip - release: skip - install_target: true - - - label: WebAssembly Web - target: wasm32-unknown-unknown - cross: skip - tests: skip - dylib: skip - install_target: true - features: "--features wasm-web" - - - label: WebAssembly WASI - target: wasm32-wasi - auto_splitting: skip - cross: skip - dylib: skip - install_target: true - - # Windows - - label: Windows aarch64 - target: aarch64-pc-windows-msvc - os: windows-latest - cross: skip - tests: skip - install_target: true - - # - label: Windows i586 - # target: i586-pc-windows-msvc - # os: windows-latest - # cross: skip - # auto_splitting: skip - # install_target: true - - - label: Windows i686 - target: i686-pc-windows-msvc - os: windows-latest - cross: skip - auto_splitting: skip - install_target: true - - - label: Windows x86_64 - target: x86_64-pc-windows-msvc - os: windows-latest - cross: skip - - - label: Windows i686 gnu - target: i686-pc-windows-gnu - toolchain: stable-i686-pc-windows-gnu - os: windows-latest - cross: skip - auto_splitting: skip - install_target: true - - - label: Windows x86_64 gnu - target: x86_64-pc-windows-gnu - toolchain: stable-x86_64-pc-windows-gnu - os: windows-latest - cross: skip - install_target: true - - # Linux - - label: Linux i586 - target: i586-unknown-linux-gnu - auto_splitting: skip - # FIXME: rustls currently does not support i586. - networking: skip - - - label: Linux i586 musl - target: i586-unknown-linux-musl - auto_splitting: skip - dylib: skip - # FIXME: rustls currently does not support i586. - networking: skip - - - label: Linux i686 - target: i686-unknown-linux-gnu - auto_splitting: skip - - - label: Linux i686 musl - target: i686-unknown-linux-musl - auto_splitting: skip - dylib: skip - - - label: Linux x86_64 - target: x86_64-unknown-linux-gnu - - - label: Linux x86_64 musl - target: x86_64-unknown-linux-musl - dylib: skip - - # FIXME: We can't link anything without cross. - # - label: Linux x86_64 gnux32 - # target: x86_64-unknown-linux-gnux32 - # cross: skip - # install_target: true - # dylib: skip - - - label: Linux arm - target: arm-unknown-linux-gnueabi - auto_splitting: skip - - - label: Linux arm musl - target: arm-unknown-linux-musleabi - auto_splitting: skip - dylib: skip - - - label: Linux arm Hardware Float - target: arm-unknown-linux-gnueabihf - auto_splitting: skip - dylib: skip - - - label: Linux arm musl Hardware Float - target: arm-unknown-linux-musleabihf - auto_splitting: skip - dylib: skip - - - label: Linux armv5te - target: armv5te-unknown-linux-gnueabi - auto_splitting: skip - dylib: skip - - - label: Linux armv5te musl - target: armv5te-unknown-linux-musleabi - auto_splitting: skip - dylib: skip - - - label: Linux armv7 - target: armv7-unknown-linux-gnueabi - auto_splitting: skip - - - label: Linux armv7 musl - target: armv7-unknown-linux-musleabi - auto_splitting: skip - dylib: skip - - - label: Linux armv7 Hardware Float - target: armv7-unknown-linux-gnueabihf - auto_splitting: skip - - - label: Linux armv7 musl Hardware Float - target: armv7-unknown-linux-musleabihf - auto_splitting: skip - dylib: skip - - - label: Linux thumbv7neon - target: thumbv7neon-unknown-linux-gnueabihf - auto_splitting: skip - - - label: Linux aarch64 - target: aarch64-unknown-linux-gnu - - - label: Linux aarch64 musl - target: aarch64-unknown-linux-musl - dylib: skip - - label: Linux powerpc target: powerpc-unknown-linux-gnu auto_splitting: skip @@ -389,13 +28,6 @@ jobs: target: powerpc64-unknown-linux-gnu auto_splitting: skip - - label: Linux powerpc64le - target: powerpc64le-unknown-linux-gnu - auto_splitting: skip - - - label: Linux riscv64gc - target: riscv64gc-unknown-linux-gnu - - label: Linux s390x target: s390x-unknown-linux-gnu software_rendering: skip @@ -409,143 +41,6 @@ jobs: # FIXME: rustls currently does not support sparc64. networking: skip - # macOS - - label: macOS aarch64 - target: aarch64-apple-darwin - os: macos-latest - cross: skip - - - label: macOS x86_64 - target: x86_64-apple-darwin - os: macos-latest - cross: skip - install_target: true - - # iOS - - label: iOS aarch64 - target: aarch64-apple-ios - os: macOS-latest - cross: skip - dylib: skip - tests: skip - install_target: true - - - label: iOS x86_64 - target: x86_64-apple-ios - os: macOS-latest - cross: skip - dylib: skip - tests: skip - install_target: true - - # Android - - label: Android i686 - target: i686-linux-android - auto_splitting: skip - - - label: Android x86_64 - target: x86_64-linux-android - auto_splitting: skip - - - label: Android arm - target: arm-linux-androideabi - auto_splitting: skip - - - label: Android armv7 - target: armv7-linux-androideabi - auto_splitting: skip - - - label: Android thumbv7neon - target: thumbv7neon-linux-androideabi - auto_splitting: skip - - - label: Android aarch64 - target: aarch64-linux-android - auto_splitting: skip - - # Other Unixes - - label: FreeBSD i686 - target: i686-unknown-freebsd - tests: skip - - - label: FreeBSD x86_64 - target: x86_64-unknown-freebsd - tests: skip - - - label: illumos x86_64 - target: x86_64-unknown-illumos - tests: skip - - # FIXME: The target currently fails to link due to - # "ld: cannot find -lexecinfo" - # - label: NetBSD x86_64 - # target: x86_64-unknown-netbsd - # tests: skip - - - label: Solaris sparcv9 - target: sparcv9-sun-solaris - tests: skip - - # FIXME: The target got renamed and cross doesn't support it yet. - # - label: Solaris x86_64 - # target: x86_64-pc-solaris - # tests: skip - - # Testing other channels - - label: Windows Beta - target: x86_64-pc-windows-msvc - os: windows-latest - toolchain: beta - release: skip - cross: skip - - - label: Windows Nightly - target: x86_64-pc-windows-msvc - os: windows-latest - toolchain: nightly - release: skip - cross: skip - - - label: Windows Beta gnu - target: x86_64-pc-windows-gnu - toolchain: beta-x86_64-pc-windows-gnu - release: skip - os: windows-latest - cross: skip - install_target: true - - - label: Windows Nightly gnu - target: x86_64-pc-windows-gnu - toolchain: nightly-x86_64-pc-windows-gnu - release: skip - os: windows-latest - cross: skip - install_target: true - - - label: Linux Beta - target: x86_64-unknown-linux-gnu - toolchain: beta - release: skip - - - label: Linux Nightly - target: x86_64-unknown-linux-gnu - toolchain: nightly - release: skip - - - label: macOS Beta - target: aarch64-apple-darwin - os: macOS-latest - toolchain: beta - release: skip - cross: skip - - - label: macOS Nightly - target: aarch64-apple-darwin - os: macOS-latest - toolchain: nightly - release: skip - cross: skip - steps: - name: Checkout Commit uses: actions/checkout@v4 @@ -574,24 +69,6 @@ jobs: cd ~/.cargo/bin tar -xzf cross-x86_64-unknown-linux-gnu.tar.gz - - name: Build Static Library - run: sh .github/workflows/build_static.sh - env: - TARGET: ${{ matrix.target }} - SKIP_CROSS: ${{ matrix.cross }} - IS_DEPLOY: ${{ startsWith(github.ref, 'refs/tags/') && (matrix.release_anyway != '' || !(startsWith(matrix.toolchain, 'nightly') || startsWith(matrix.toolchain, 'beta'))) }} - FEATURES: ${{ matrix.features }} - NO_STD: ${{ matrix.no_std }} - - - name: Build Shared Library - if: matrix.dylib == '' - run: sh .github/workflows/build_shared.sh - env: - TARGET: ${{ matrix.target }} - SKIP_CROSS: ${{ matrix.cross }} - IS_DEPLOY: ${{ startsWith(github.ref, 'refs/tags/') && (matrix.release_anyway != '' || !(startsWith(matrix.toolchain, 'nightly') || startsWith(matrix.toolchain, 'beta'))) }} - FEATURES: ${{ matrix.features }} - - name: Test if: matrix.tests == '' run: sh .github/workflows/test.sh diff --git a/.github/workflows/test.sh b/.github/workflows/test.sh index aa537dd9..1a2615cf 100644 --- a/.github/workflows/test.sh +++ b/.github/workflows/test.sh @@ -29,8 +29,7 @@ main() { features="$features,wasm-web,web-rendering" fi - $cargo test -p livesplit-core $features --target $TARGET - $cargo test -p livesplit-core --no-default-features --features std --target $TARGET + $cargo test -p livesplit-core --no-default-features --features std --target $TARGET -- --nocapture } main diff --git a/Cargo.toml b/Cargo.toml index df8d2ab5..df65f3b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ hashbrown = "0.14.0" libm = "0.2.1" livesplit-hotkey = { path = "crates/livesplit-hotkey", version = "0.7.0", default-features = false } livesplit-title-abbreviations = { path = "crates/livesplit-title-abbreviations", version = "0.3.0" } -memchr = { version = "2.3.4", default-features = false } +memchr = { version = "2.7.3", default-features = false } simdutf8 = { git = "https://github.com/CryZe/simdutf8", branch = "wasm-ub-panic", default-features = false, features = [ "aarch64_neon", ] } diff --git a/src/lib.rs b/src/lib.rs index ec89ea38..77fcad87 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -97,3 +97,12 @@ pub use crate::platform::{register_clock, Clock, Duration}; #[cfg(feature = "std")] pub use crate::{hotkey_config::HotkeyConfig, hotkey_system::HotkeySystem, timing::SharedTimer}; + +#[test] +fn foo() { + "123".parse::().unwrap(); + "123456789".parse::().unwrap(); + "-123456789".parse::().unwrap(); + "-123".parse::().unwrap(); + "0".parse::().unwrap(); +} diff --git a/src/timing/time_span.rs b/src/timing/time_span.rs index 93622253..438aade1 100644 --- a/src/timing/time_span.rs +++ b/src/timing/time_span.rs @@ -103,18 +103,19 @@ impl FromStr for TimeSpan { false }; - let (seconds_text, nanos) = - if let Some((seconds, mut nanos)) = AsciiChar::DOT.split_once(text) { - if nanos.len() > 9 { - nanos = nanos.get(..9).context(FractionDigits)?; - } - ( - seconds, - nanos.parse::().context(Fraction)? * 10_u32.pow(9 - nanos.len() as u32), - ) - } else { - (text, 0u32) - }; + let (seconds_text, nanos) = if let Some((seconds, mut nanos)) = + AsciiChar::DOT.split_once(text) + { + if nanos.len() > 9 { + nanos = nanos.get(..9).context(FractionDigits)?; + } + ( + seconds, + dbg!(nanos).parse::().context(Fraction)? * 10_u32.pow(9 - nanos.len() as u32), + ) + } else { + (text, 0u32) + }; ensure!(!seconds_text.is_empty(), Empty); @@ -124,7 +125,7 @@ impl FromStr for TimeSpan { seconds = seconds .checked_mul(60) .context(Overflow)? - .checked_add(split.parse::().context(Time)?) + .checked_add(dbg!(split).parse::().context(Time)?) .context(Overflow)?; } diff --git a/src/util/ascii_char.rs b/src/util/ascii_char.rs index 206ded11..d0160c3b 100644 --- a/src/util/ascii_char.rs +++ b/src/util/ascii_char.rs @@ -39,7 +39,8 @@ impl AsciiChar { } pub fn split_once(self, text: &str) -> Option<(&str, &str)> { - let pos = memchr::memchr(self.0, text.as_bytes())?; + let pos = memchr::memchr(dbg!(self.0), text.as_bytes())?; + dbg!(pos); // SAFETY: memchr guarantees that the position is valid. Also since we // are looking for ASCII bytes, splitting at the position is guaranteed // to be valid UTF-8.