Skip to content
This repository was archived by the owner on Oct 6, 2024. It is now read-only.
This repository was archived by the owner on Oct 6, 2024. It is now read-only.

Cannot generate f32/f64 values #95

@mamekoro

Description

@mamekoro

paste: 1.0.12
rustc: 1.68.2

When I try to concatenate a minus sign (-), a float literal (e.g. 0.0), and a type suffix (e.g. f32 or f64), rustc reports errors. Here is a reproduction code:

use paste::paste;

fn main() {
    paste! {
        let _ = [< 0.0 f32 >]; // rustc:Error:unsupported literal
        let _ = [< -0.0 f32 >]; // rustc:Error:unexpected punct
    }
}

In my actual project, I used the paste! macro with the duplicate! macro for unit tests using f32/f64 values like this:

use duplicate::duplicate;
use paste::paste;

duplicate! {
    [ float; [f32]; [f64]; ]
    // In this code block, the word `float` is replaced with `f32` and `f64`.
    paste! {
        #[test]
        fn [< ulp_should_return_EPSILON_when_self_is_1_ float >]() {
            // Here is the problematic code `[< 1.0 float >]`.
            assert_eq!([< 1.0 float >].ulp(), float::EPSILON);
        }

        // Many other test functions using f32 and f64 are omitted.
        // ...
    }
}

I expected the following code to be generated:

#[test]
fn ulp_should_return_EPSILON_when_self_is_1_f32() {
    assert_eq!(1.0f32.ulp(), f32::EPSILON);
}

#[test]
fn ulp_should_return_EPSILON_when_self_is_1_f64() {
    assert_eq!(1.0f64.ulp(), f64::EPSILON);
}

The duplicate! macro is not the cause of the compilation error, as shown in the reproduction code at the top of this post.

Please make the paste! macro able to concatenate signs, floating point numbers, and type suffixes 🙏

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions