Fuzion Logo
fuzion-lang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

bench.fz


# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation 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, version 3 of the License.
#
# The Fuzion language implementation 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.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation.  If not, see <https://www.gnu.org/licenses/>.


# -----------------------------------------------------------------------
#
#  Tokiwa Software GmbH, Germany
#
#  Source code of Fuzion standard library feature bench
#
#  Author: Michael Lill (michael.lill@tokiwa.software)
#
# -----------------------------------------------------------------------

# benchmark f by iterating it for nano_seconds
#
# only completed iterations are counted, any iterations started before
# warm_up_nano_seconds has elapsed are not counted either
#
# returns: iterations per second
#
public bench(warm_up time.duration, d time.duration, f ()->unit) time.frequency ! time.nano =>

  wa_start := time.nano.read

  while time.nano.read - wa_start < d
  do
    f.call

  start := time.nano.read
  for iter := (u64 0), iter + 1
  while time.nano.read - start < d
  do
    f.call
  else
    time.frequency iter d


# benchmark f for 10 seconds, warm_up 5 seconds
#
# only completed iterations are counted, any iterations started before
# the one second warmup has elapsed are not counted either
#
# returns: iterations per second
#
public bench(f ()->unit) time.frequency ! time.nano =>
  bench (time.duration.s 5) (time.duration.s 10) f

last changed: 2026-04-02