34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#!/usr/bin/ksh93
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# CDDL HEADER START
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# The contents of this file are subject to the terms of the
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# Common Development and Distribution License (the "License").
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# You may not use this file except in compliance with the License.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# or http://www.opensolaris.org/os/licensing.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# See the License for the specific language governing permissions
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# and limitations under the License.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# When distributing Covered Code, include this CDDL HEADER in each
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# If applicable, add the following below this CDDL HEADER, with the
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# fields enclosed by brackets "[]" replaced with your own identifying
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# information: Portions Copyright [yyyy] [name of copyright owner]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# CDDL HEADER END
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# numtree1 - basic compound variable tree demo+benchmark
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# Solaris needs /usr/xpg6/bin:/usr/xpg4/bin because the tools in /usr/bin are not POSIX-conformant
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzexport PATH=/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# Make sure all math stuff runs in the "C" locale to avoid problems
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# with alternative # radix point representations (e.g. ',' instead of
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# '.' in de_DE.*-locales). This needs to be set _before_ any
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# floating-point constants are defined in this script).
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif [[ "${LC_ALL}" != "" ]] ; then
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz export \
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz LC_MONETARY="${LC_ALL}" \
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz LC_MESSAGES="${LC_ALL}" \
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz LC_COLLATE="${LC_ALL}" \
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz LC_CTYPE="${LC_ALL}"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz unset LC_ALL
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfi
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzexport LC_NUMERIC=C
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfunction fatal_error
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz{
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz print -u2 "${progname}: $*"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz exit 1
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz}
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfunction add_number_to_tree
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz{
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset treename=$1
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz integer num=$2
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz integer i
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset nodepath # full name of compound variable
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz integer -a pe # path elements
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner integer len
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner typeset revnums="$(rev <<<"${num}")"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz # first built an array containing the names of each path element
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz # (e.g. "135" results in an array containing "( 1 3 5 )")
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner # 10#<number> is used to prevent leading zeros being interpreted
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner # as octals
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner for (( len=${#revnums} , i=$( printf "10#%s\n" "${revnums}" ) ; len > 0 ; len--, i=i/10 )) ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz pe+=( $((i % 10)) )
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz # walk path described via the "pe" array and build nodes if
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz # there aren't any nodes yet
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz nodepath="${treename}"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz for (( i=0 ; i < ${#pe[@]} ; i++ )) ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz nameref x="${nodepath}"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner # [[ -v ]] does not work for arrays because [[ -v ar ]]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner # is equal to [[ -v ar[0] ]]. In this case we can
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner # use the output of typeset +p x.nodes
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${ typeset +p x.nodes ;}" == "" ]] && compound -a x.nodes
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz nodepath+=".nodes[${pe[i]}]"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner # insert element (leaf)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz nameref node="${nodepath}"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${ typeset +p node.elements ;}" == "" ]] && integer -a node.elements
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz node.elements+=( ${num} )
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner # DEBUG only
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${!node.elements[*]}" != "" ]] || fatal_error "assertion $LINENO FAILED"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${ typeset +p node.elements ;}" == *-a* ]] || fatal_error "assertion $LINENO FAILED"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${ typeset +p node.elements ;}" == *-i* ]] || fatal_error "assertion $LINENO FAILED"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ -v node ]] || fatal_error "assertion $LINENO FAILED"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ -R node ]] || fatal_error "assertion $LINENO FAILED"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${ typeset +p ${!node} ;}" == *-C* ]] || fatal_error "assertion $LINENO FAILED"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${!x.nodes[*]}" != "" ]] || fatal_error "assertion $LINENO FAILED"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${ typeset +p x.nodes ;}" == *-a* ]] || fatal_error "assertion $LINENO FAILED"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${ typeset +p x.nodes ;}" == *-C* ]] || fatal_error "assertion $LINENO FAILED"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz return 0
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz}
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# floating-point version of "seq"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfunction floatseq
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz{
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz float i
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz float arg1=$1
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz float arg2=$2
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz float arg3=$3
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz case $# in
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz 1)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz for (( i=1. ; i <= arg1 ; i=i+1. )) ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz printf "%a\n" i
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz 2)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz for (( i=arg1 ; i <= arg2 ; i=i+1. )) ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz printf "%a\n" i
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz 3)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz for (( i=arg1 ; i <= arg3 ; i+=arg2 )) ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz printf "%a\n" i
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz *)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz print -u2 -f "%s: Illegal number of arguments %d\n" "$0" $#
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz return 1
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz esac
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz return 0
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz}
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfunction usage
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz{
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz OPTIND=0
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz getopts -a "${progname}" "${numtree1_usage}" OPT '-?'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz exit 2
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz}
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# main
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzbuiltin basename
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzbuiltin rev
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzset -o noglob
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzset -o errexit
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzset -o nounset
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcompound base
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcompound bench=(
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz float start
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz float stop
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzinteger i
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztypeset progname="${ basename "${0}" ; }"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztypeset -r numtree1_usage=$'+
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner[-?\n@(#)\$Id: numtree1 (Roland Mainz) 2010-03-27 \$\n]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[-author?Roland Mainz <roland.mainz@nrubsig.org>]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[+NAME?numtree1 - generate sorted variable tree containing numbers]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[+DESCRIPTION?\bnumtree1\b is a simple variable tree generator
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz sorts a given set of numbers into a ksh compound variable tree).
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz the application supports two different modes: \'seq\' takes
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz 1-3 arguments to specify the set of numbers via seq(1) and
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz \'stdin\' reads the numbers from stdin (one per line)]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzmethod [ arguments ]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[+SEE ALSO?\bksh93\b(1), \bseq\b(1)]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzwhile getopts -a "${progname}" "${numtree1_usage}" OPT ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# printmsg "## OPT=|${OPT}|, OPTARG=|${OPTARG}|"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz case ${OPT} in
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz *) usage ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz esac
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzdone
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzshift $((OPTIND-1))
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# prechecks
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz(( $# > 0 )) || usage
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcmd=$1
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzshift
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# Read numbers from stdin outside benchmark loop
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif [[ ${cmd} == 'stdin' ]] ; then
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz stdin_numbers="$( cat /dev/stdin )" || fatal_error "stdin read error"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfi
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz(( bench.start=SECONDS ))
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcase ${cmd} in
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz "seq")
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz for i in ${ floatseq "$@" ; } ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz add_number_to_tree base "${i}"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz "stdin")
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz for i in ${stdin_numbers} ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz add_number_to_tree base "${i}"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz "demo1")
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz for i in 1 32 33 34 34 38 90 ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz add_number_to_tree base "${i}"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz "demo2")
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz for (( i=1000000000 ; i < 1000000000+10 ; i++ )) ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz add_number_to_tree base "$i"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz done
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz *)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz fatal_error "Invalid command ${cmd}."
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ;;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzesac
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz(( bench.stop=SECONDS ))
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzprint -u2 -f "# time used: %f\n" $((bench.stop - bench.start))
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# print tree
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzprint -v base
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzexit 0
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# EOF.