⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test4600.cal

📁 Calc Software Package for Number Calc
💻 CAL
字号:
/* * test4600 - 4600 series of the regress.cal test suite * * Copyright (C) 1999  Ernest Bowen and Landon Curt Noll * * Primary author:  Ernest Bowen * * Calc is open software; you can redistribute it and/or modify it under * the terms of the version 2.1 of the GNU Lesser General Public License * as published by the Free Software Foundation. * * Calc 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 Lesser General * Public License for more details. * * A copy of version 2.1 of the GNU Lesser General Public License is * distributed with calc under the filename COPYING-LGPL.  You should have * received a copy with calc; if not, write to Free Software Foundation, Inc. * 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA. * * @(#) $Revision: 29.5 $ * @(#) $Id: test4600.cal,v 29.5 2006/06/20 09:29:16 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $ * * Under source code control:	1996/07/02 20:04:40 * File existed as early as:	1996 * * Share and enjoy!  :-)	http://www.isthe.com/chongo/tech/comp/calc/ */defaultverbose = 1;	/* default verbose value *//* * test globals */global A, f, pos;define stest(str, verbose){	local x;	/* setup */	if (isnull(verbose))		verbose = defaultverbose;	if (verbose > 0) {		print str:":",:;	}	x = rm("-f", "junk4600");	/*	 * do file operations	 */	f = fopen("junk4600", "wb");	if (iserror(f)) {		print 'failed';		print '**** fopen("junk4600", "wb") failed';		return 1;	}	if (iserror(fputs(f,	 "Fourscore and seven years ago our fathers brought forth\n",	 "on this continent a new nation, conceived in liberty and dedicated\n",	 "to the proposition that all men are created equal.\n"))) {		print 'failed';		print '**** fputs(f, "Fourscore ... failed';		return 1;	}	if (iserror(freopen(f, "rb"))) {		print 'failed';		print '**** iserror(freopen(f, "rb")) failed';		return 1;	}	if (iserror(rewind(f))) {		print 'failed';		print '**** iserror(rewind(f)) failed';		return 1;	}	if (search(f, "and") != 10) {		print 'failed';		print '**** search(f, "and") != 10 failed';		return 1;	}	if (ftell(f) != 13) {		print 'failed';		print '**** ftell(f) != 13 failed';		return 1;	}	if (search(f, "and") != 109) {		print 'failed';		print '**** search(f, "and") != 109 failed';		return 1;	}	if (ftell(f) != 112) {		print 'failed';		print '**** ftell(f) != 112 failed';		return 1;	}	if (!isnull(search(f, "and"))) {		print 'failed';		print '**** !isnull(search(f, "and")) failed';		return 1;	}	if (ftell(f) != 172) {		print 'failed';		print '**** ftell(f) != 172 failed';		return 1;	}	if (rsearch(f, "and") != 109) {		print 'failed';		print '**** rsearch(f, "and") != 109 failed';		return 1;	}	if (ftell(f) != 111) {		print 'failed';		print '**** ftell(f) != 111 failed';		return 1;	}	if (iserror(fseek(f, -4, 1))) {		print 'failed';		print '**** iserror(fseek(f, -4, 1)) failed';		return 1;	}	if (rsearch(f, "and") != 10) {		print 'failed';		print '**** rsearch(f, "and") != 10 failed';		return 1;	}	if (ftell(f) != 12) {		print 'failed';		print '**** ftell(f) != 12 failed';		return 1;	}	if (iserror(fseek(f, -4, 1))) {		print 'failed';		print '**** iserror(fseek(f, -4, 1)) failed';		return 1;	}	if (!isnull(rsearch(f, "and"))) {		print 'failed';		print '**** !isnull(rsearch(f, "and")) failed';		return 1;	}	if (ftell(f) != 0) {		print 'failed';		print '**** ftell(f) != 0 failed';		return 1;	}	if (iserror(fclose(f))) {		print 'failed';		print '**** iserror(fclose(f)) failed';		return 1;	}	/*	 * cleanup	 */	x = rm("junk4600");	if (verbose > 0) {		printf("passed\n");	}	return 0;}define ttest(str, m, n, verbose){	local a, s, i, j;	if (isnull(verbose))		verbose = defaultverbose;	if (verbose > 0) {		print str:":",:;	}	i = rm("-f", "junk4600");	f = fopen("junk4600", "wb");	if (isnull(n))		n = 4;	if (isnull(m))		m = 4;	mat A[m];	mat pos[m + 1];	pos[0] = 0;	for (i = 0; i < m; i++) {		j = 1 + randbit(n);		a = "";		while (j-- > 0)			a = strcat(a, char(rand(32, 127)));		A[i] = a;		fputs(f, a);		pos[i+1] = ftell(f);		if (verbose > 1)			printf("A[%d] has length %d\n", i, strlen(a));	}	fflush(f);	if (verbose > 1)		printf("File has size %d\n", pos[i]);	freopen(f, "rb");	if (size(f) != pos[i]) {		print 'failed';		printf("**** Failure 1 for file size\n");		return 1;	}	for (i = 0; i < m; i++) {		rewind(f);		for (;;) {			j = search(f, A[i]);			if (isnull(j) || j > pos[i]) {				print 'failed';				printf("**** Failure 2 for i = %d\n", i);				return 1;			}			if (j == pos[i])				break;			fseek(f, j + 1, 0);		}		if (ftell(f) != pos[i + 1]) {			print 'failed';			printf("**** Failure 3 for i = %d\n", i);			return 1;		}	}	for (i = m - 1; i >= 0; i--) {		fseek(f, 0, 2);		for (;;) {			j = rsearch(f, A[i]);			if (isnull(j) || j < pos[i]) {				print 'failed';				printf("**** Failure 4 for i = %d\n", i);				return 1;			}			if (j == pos[i])				break;			fseek(f, -1, 1);		}		if (ftell(f) != pos[i + 1] - 1) {			print 'failed';			printf("**** Failure 5 for i = %d\n", i);			return 1;		}	}	if (iserror(fclose(f))) {		print 'failed';		printf("**** Failure 6 for i = %d\n", i);		return 1;	}	i = rm("junk4600");	if (verbose > 0) {		printf("passed\n");	}	return 0;}define sprint(x){	local i, n;	n = strlen(x);	for (i = 1; i <= n; i++) print ord(substr(x, i, 1)),;	print;}define findline(f,s){	if (!isfile(f))		quit "First argument to be a file";	if (!isstr(s))		quit "Second argument to be a string";	if (!isnull(search(f,s))) {		rsearch(f, "\n");		print fgetline(f);	}}define findlineold(f,s){	local str;	if (!isfile(f))		quit "First argument to be a file";	if (!isstr(s))		quit "Second argument to be a string";	while (!isnull(str = fgetline(f)) && strpos(str, s) == 0);		print str;}/* * test4600 - perform all of the above tests a bunch of times */define test4600(v, tnum){	local n;	/* test parameter */	local i;	/*	 * set test parameters	 */	srand(4600e4600);	/*	 * test a lot of stuff	 */	for (i=0; i < 10; ++i) {		err += ttest(strcat(str(tnum++),			     ": ttest(",str(i),",",str(i),")"), i, i, v);		err += stest(strcat(str(tnum++), ": stest()"), v);	}	/*	 * report results	 */	if (v > 1) {		if (err) {			print "****", err, "error(s) found in testall";		} else {			print "no errors in testall";		}	}	return tnum;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -