From 66935f59af2dc394dc65d248e502ff847eab31dc Mon Sep 17 00:00:00 2001 From: Bodigrim Date: Sat, 6 Jul 2024 23:07:14 +0100 Subject: [PATCH] Add guessPolynomialComplexity --- CHANGELOG.md | 1 + src/Test/Tasty/Bench/Fit.hs | 4 ++++ src/Test/Tasty/Bench/Fit/Complexity.hs | 14 ++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccaf151..f076513 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.1.1 * Introduce `Test.Tasty.Bench.Crossover`. +* Introduce `guessPolynomialComplexity`. ## 0.1 diff --git a/src/Test/Tasty/Bench/Fit.hs b/src/Test/Tasty/Bench/Fit.hs index f8a3329..6e598fd 100644 --- a/src/Test/Tasty/Bench/Fit.hs +++ b/src/Test/Tasty/Bench/Fit.hs @@ -1,6 +1,8 @@ +{-# HLINT ignore "Avoid restricted function" #-} {-# LANGUAGE NumDecimals #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} -- | Guess complexity of the function. module Test.Tasty.Bench.Fit ( @@ -14,6 +16,7 @@ module Test.Tasty.Bench.Fit ( Complexity (..), Measurement (..), guessComplexity, + guessPolynomialComplexity, evalComplexity, -- * Predicates @@ -39,6 +42,7 @@ import Test.Tasty.Bench.Fit.Complexity ( Complexity (..), evalComplexity, guessComplexity, + guessPolynomialComplexity, isConstant, isCubic, isLinear, diff --git a/src/Test/Tasty/Bench/Fit/Complexity.hs b/src/Test/Tasty/Bench/Fit/Complexity.hs index e24cbfd..4147857 100644 --- a/src/Test/Tasty/Bench/Fit/Complexity.hs +++ b/src/Test/Tasty/Bench/Fit/Complexity.hs @@ -9,6 +9,7 @@ module Test.Tasty.Bench.Fit.Complexity ( Complexity (..), guessComplexity, + guessPolynomialComplexity, evalComplexity, -- * Predicates @@ -179,6 +180,19 @@ guessComplexity xys = | otherwise = [c1, c2] +-- | Same as guessComplexity, but the power of \( \log x \) ('cmplLogPower') +-- is pinned to be 0. +-- +-- @since 0.1.1 +guessPolynomialComplexity :: Map Word Measurement -> Complexity +guessPolynomialComplexity xys = + trace' + ("guessPolynomialComplexity " ++ show (M.assocs xys)) + bestOf + [cmpl1, cmpl2] + where + (cmpl1, cmpl2) = guessComplexityForFixedLog xys 0 + guessComplexityForFixedLog :: Map Word Measurement -> Word