1# $NetBSD: t_nbperf.sh,v 1.5 2021/02/14 01:27:33 joerg Exp $ 2# 3# Copyright (c) 2012 The NetBSD Foundation, Inc. 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25# POSSIBILITY OF SUCH DAMAGE. 26# 27 28cleanup() 29{ 30 rm -f reference.txt input.txt hash.c hash.map testprog 31} 32 33atf_test_case chm 34chm_head() 35{ 36 atf_set "descr" "Checks chm algorithm" 37 atf_set "require.files" "/usr/share/dict/web2" 38 atf_set "require.progs" "cc" 39} 40chm_body() 41{ 42 for n in 4 32 128 1024 65536; do 43 seq 0 $(($n - 1)) > reference.txt 44 atf_check -o file:reference.txt \ 45 $(atf_get_srcdir)/h_nbperf /usr/share/dict/web2 chm cat \ 46 $n $(atf_get_srcdir)/hash_driver.c 47 atf_check -o file:hash.map \ 48 $(atf_get_srcdir)/h_nbperf /usr/share/dict/web2 chm cat \ 49 $n $(atf_get_srcdir)/hash_driver.c 50 done 51} 52chm_clean() 53{ 54 cleanup 55} 56 57atf_test_case chm_fudged 58chm_fudged_head() 59{ 60 atf_set "descr" "Checks chm algorithm with fudged hash" 61 atf_set "require.progs" "cc" 62} 63chm_fudged_body() 64{ 65 seq 0 11 > reference.txt 66 seq 1 12 > input.txt 67 68 atf_check -o file:reference.txt \ 69 $(atf_get_srcdir)/h_nbperf input.txt "chm -p" cat \ 70 12 $(atf_get_srcdir)/hash_driver.c 71 atf_check -s exit:1 fgrep -q '^=' hash.c 72 73 atf_check -o file:reference.txt \ 74 $(atf_get_srcdir)/h_nbperf input.txt "chm -f -p" cat \ 75 12 $(atf_get_srcdir)/hash_driver.c 76 atf_check -s exit:0 fgrep -q '^=' hash.c 77} 78chm_fudged_clean() 79{ 80 cleanup 81} 82 83atf_test_case chm3 84chm3_head() 85{ 86 atf_set "descr" "Checks chm3 algorithm" 87 atf_set "require.files" "/usr/share/dict/web2" 88 atf_set "require.progs" "cc" 89} 90chm3_body() 91{ 92 for n in 4 32 128 1024 65536; do 93 seq 0 $(($n - 1)) > reference.txt 94 atf_check -o file:reference.txt \ 95 $(atf_get_srcdir)/h_nbperf /usr/share/dict/web2 chm3 cat \ 96 $n $(atf_get_srcdir)/hash_driver.c 97 atf_check -o file:hash.map \ 98 $(atf_get_srcdir)/h_nbperf /usr/share/dict/web2 chm3 cat \ 99 $n $(atf_get_srcdir)/hash_driver.c 100 done 101} 102chm3_clean() 103{ 104 cleanup 105} 106 107atf_test_case chm3_fudged 108chm3_fudged_head() 109{ 110 atf_set "descr" "Checks chm3 algorithm with fudged hash" 111 atf_set "require.progs" "cc" 112} 113chm3_fudged_body() 114{ 115 seq 0 9 > reference.txt 116 seq 1 10 > input.txt 117 118 atf_check -o file:reference.txt \ 119 $(atf_get_srcdir)/h_nbperf input.txt "chm3 -p" cat \ 120 10 $(atf_get_srcdir)/hash_driver.c 121 atf_check -s exit:1 fgrep -q '^=' hash.c 122 123 atf_check -o file:reference.txt \ 124 $(atf_get_srcdir)/h_nbperf input.txt "chm3 -f -p" cat \ 125 10 $(atf_get_srcdir)/hash_driver.c 126 atf_check -s exit:0 fgrep -q '^= (' hash.c 127 atf_check -s exit:0 fgrep -q '^= 2' hash.c 128} 129chm3_fudged_clean() 130{ 131 cleanup 132} 133 134atf_test_case bpz 135bpz_head() 136{ 137 atf_set "descr" "Checks bpz algorithm" 138 atf_set "require.files" "/usr/share/dict/web2" 139 atf_set "require.progs" "cc" 140} 141bpz_body() 142{ 143 for n in 4 32 128 1024 65536 131072; do 144 seq 0 $(($n - 1)) > reference.txt 145 atf_check -o file:reference.txt \ 146 $(atf_get_srcdir)/h_nbperf /usr/share/dict/web2 bpz "sort -n" \ 147 $n $(atf_get_srcdir)/hash_driver.c 148 atf_check -o file:hash.map \ 149 $(atf_get_srcdir)/h_nbperf /usr/share/dict/web2 bpz cat \ 150 $n $(atf_get_srcdir)/hash_driver.c 151 done 152} 153bpz_clean() 154{ 155 cleanup 156} 157 158atf_test_case bpz_fudged 159bpz_fudged_head() 160{ 161 atf_set "descr" "Checks bpz algorithm with fudged hash" 162 atf_set "require.progs" "cc" 163} 164bpz_fudged_body() 165{ 166 seq 0 11 > reference.txt 167 seq 1 12 > input.txt 168 169 atf_check -o file:reference.txt \ 170 $(atf_get_srcdir)/h_nbperf input.txt "bpz -p" "sort -n" \ 171 12 $(atf_get_srcdir)/hash_driver.c 172 atf_check -s exit:1 fgrep -q '^=' hash.c 173 174 atf_check -o file:reference.txt \ 175 $(atf_get_srcdir)/h_nbperf input.txt "bpz -f -p" "sort -n" \ 176 12 $(atf_get_srcdir)/hash_driver.c 177 atf_check -s exit:0 fgrep -q '^= (' hash.c 178 atf_check -s exit:0 fgrep -q '^= 2' hash.c 179} 180bpz_fudged_clean() 181{ 182 cleanup 183} 184 185atf_test_case handle_dup 186handle_dup_head() 187{ 188 atf_set "descr" "Checks different algorithms deal with duplicates" 189 atf_set "require.progs" "cc" 190} 191handle_dup_body() 192{ 193 seq 0 9 > reference.txt 194 echo 0 >> reference.txt 195 atf_check -s exit:1 -e match:"nbperf: Duplicate keys detected" \ 196 nbperf -a chm < reference.txt 197 atf_check -s exit:1 -e match:"nbperf: Duplicate keys detected" \ 198 nbperf -a chm3 < reference.txt 199 atf_check -s exit:1 -e match:"nbperf: Duplicate keys detected" \ 200 nbperf -a bpz < reference.txt 201} 202handle_dup_clean() 203{ 204 cleanup 205} 206 207atf_init_test_cases() 208{ 209 atf_add_test_case chm 210 atf_add_test_case chm_fudged 211 atf_add_test_case chm3 212 atf_add_test_case chm3_fudged 213 atf_add_test_case bpz 214 atf_add_test_case bpz_fudged 215 atf_add_test_case handle_dup 216} 217