Skip to content

Feature request: manually run precompilation code during testing #12

@MilesCranmer

Description

@MilesCranmer

It would be great if there was a way I could manually trigger the code within @setup_workload to run, outside of precompilation. The primary use-case for this would be to run the precompilation code during testing so it shows up on code coverage, and so that some precompilation errors show up as errors during testing.

My current workaround is to call a function containing all my precompilation code, with mode=:precompile -> @setup_workload, and mode=:compile -> (run as-is). https://github.com/MilesCranmer/SymbolicRegression.jl/blob/641180a561e350918e3fd6a8fd7c898d31bef11b/src/precompile.jl#L34

macro maybe_compile_workload(mode, ex)
    precompile_ex = Expr(
        :macrocall, Symbol("@compile_workload"), LineNumberNode(@__LINE__), ex
    )
    return quote
        if $(esc(mode)) == :compile
            $(esc(ex))
        elseif $(esc(mode)) == :precompile
            $(esc(precompile_ex))
        else
            error("Invalid value for mode: " * show($(esc(mode))))
        end
    end
end

with the function:

function do_precompilation(; mode=:precompile)
    @maybe_setup_workload mode begin
    ...
end

so I can have do_precompilation() in my precompilation code, and do_precompilation(; mode=:compile) in my testing code.

However this seems like it would be of common interest so it would be great if there could be a way I could force @compile_workload code to execute outside of precompilation.


Brought up in MilesCranmer/SymbolicRegression.jl#198 w/ @timholy

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions