#!/bin/sh

export PYTHONPATH=${HOME}/src/pkgcore:${PYTHONPATH}
export PATH=${HOME}/src/pkgcore/bin:${PATH}

cat_bench() {
    echo
    echo "cat search"
    echo
    echo
    for command in \
        "paludis --list-packages --categry dev-util" \
        "pquery -nv -m 'dev-util/*'" \
        "emerge -s @dev-util/"
    do
        echo "uncached: $command"
        for x in 1 2; do
            sudo sync
            echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
            { time $command &> /dev/null; } 2>&1
        done
        echo
        echo "cached: $command"
        $command &> /dev/null
        for x in 1 2 3; do
            { time $command &> /dev/null; } 2>&1
        done
        echo
    done
}

pkg_bench() {
    echo
    echo "categoryless lookups"
    echo
    for command in \
        "paludis -q bsdiff xorg-server" \
        "pquery -nv -m bsdiff -m xorg-server" \
        "emerge -s bsdiff xorg-server"
    do
        echo "uncached: $command"
        for x in 1 2; do
            sudo sync
            echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
            { time $command &> /dev/null; } 2>&1
        done
        echo
        echo "cached: $command"
        $command &> /dev/null
        for x in 1 2 3; do
            { time $command &> /dev/null; } 2>&1
        done
        echo
    done
}

atom_bench() {
    echo
    echo "full atom lookups"
    echo
    for command in \
        "paludis -q dev-util/bsdiff x11-base/xorg-server" \
        "pquery -nv -m dev-util/bsdiff -m x11-base/xorg-server" \
        "emerge -s dev-util/bsdiff x11-base/xorg-server"
    do
        echo "uncached: $command"
        for x in 1 2; do
            sudo sync
            echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
            { time $command &> /dev/null; } 2>&1
        done
        echo
        echo "cached: $command"
        $command &> /dev/null
        for x in 1 2 3; do
            { time $command &> /dev/null; } 2>&1
        done
        echo
    done
}

deep_system_bench() {
    echo
    echo "resolving deep system upgrade"
    echo
    for command in \
        "paludis -pi system" \
       "pmerge -Dups system" \
        "emerge -Dup system"
    do
        echo "uncached: $command"
        for x in 1 2 3; do
            sudo sync
            echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
            { time $command &> /dev/null; } 2>&1
        done
        echo
        echo "cached: $command"
        $command &> /dev/null
        for x in 1 2 3; do
            { time $command &> /dev/null; } 2>&1
        done
        echo
    done
}

empty_system_bench() {
    echo
    echo "resolving empty system"
    echo
    for command in \
        "paludis -pie system" \
        "pmerge -Deps system" \
        "emerge -Dep system"
    do
        echo "uncached: $command"
        for x in 1 2 3; do
            sudo sync
            echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
            { time $command &> /dev/null; } 2>&1
        done
        echo
        echo "cached: $command"
        $command &> /dev/null
        for x in 1 2 3; do
            { time $command &> /dev/null; } 2>&1
        done
        echo
    done
}

for x in ${*:-pkg atom deep_system empty_system}; do
    ${x}_bench
done
