| Getting Started | Documentation | Glish | Learn More | Programming | Contact Us |
| Version 1.9 Build 1556 |
|
J. McMullin
January 7, 1999
A postscript version of this note is available (193kB).
This note is an effort to consolidate the existing assay tests being performed by the chief tester, site managers and others to establish the state of an AIPS++ installation or release.
We also chart the improvements necessary to further improve these tests as AIPS++ moves into a broader public use.
Integration and unit testing are vital to the success of AIPS++.
The assay class is used to track the results of running the test and demonstration functions. It is useful for verifying an installation. It can also assay any list of functions. The functions must not require arguments.
The functions to be tested should use the Glish fail mechanism for assay to be meaningful.
The standard tests and demonstrations are those that are expected to not fail in a working installation.
- include "assay.g" T - assay().trytests()
There are several implement functions under assay:
For each function in the list, run the function (without arguments) and trap any fails. At the end, the failures and corresponding messages are logged, and the number of failures is returned.
Note that the argument is a list of function names, not the functions themselves; it returns the integer number of functions which failed.
- include "assay.g"
T
- assay().try('foo bar tabletest')
foo failed: argument must be defined
bar failed: argument must be defined
2
The philosophy is a build and smoke test. AIPS++ needs to be the primary authority on the current status of the system.
For AIPS++ site managers, examine each installation sneeze.log for 'fail' and 'error' and do the following:
The chief tester needs to perform more fundamental and deeper tests of the system. In particular, sneeze/inhale logs, unit testing reports and assay() results should all be logged.
The Chief Tester should examine the sneeze.log on at least one machine of every supported architecture/OS:
Automatic filtering of the aips2-inhale exploder can help streamline the time spent in this review for different machines. The process is as follows:
# this is my new .procmailrc 11/16/99
PATH=/bin:/usr/bin:/usr/local/bin # use a minimal path.
MAILDIR=$HOME/mail # my mail directory
LOGFILE=$MAILDIR/procmail.log
TESTDIR=/home/charybdis_2/jmcmulli/computing/chief_tester/test_results
INHALEDIR=/home/charybdis_2/jmcmulli/computing/chief_tester/inhale_logs
# message is to aips2-inhale?
:0:
* ^To.*aips2-inhale
{
# get sneeze files from muse
:0:
* ^From.*aips2mgr@muse
$INHALEDIR/muse_linux
# get sneeze files from argus (SGI)
:0:
* ^From.*aips2mgr@zia
$INHALEDIR/argus_sgi
# get sneeze files from duw01 (sun4sol_gnu)
:0:
* ^From.*aips2mgr@nfra
$INHALEDIR/duw01_sun4sol
# get sneeze files from kaputar (Alpha)
:0:
* ^From.*aips2mgr@kaputar
$INHALEDIR/kaputar_alpha
# get test results summary of aips - linux
:0:
* ^Subject.*linux.*test.*results.*aips
$TESTDIR/aips_linux
# get test results summary of trial - linux
:0:
* ^Subject.*linux.*test.*results.*trial
$TESTDIR/trial_linux
# get test results summary of aips - sun4sol
:0:
* ^Subject.*sun4sol.*test.*results.*aips
$TESTDIR/aips_sun4sol
# get test results summary of trial - sun4sol
:0:
* ^Subject.*sun4sol.*test.*results.*trial
$TESTDIR/trial_sun4sol
# dump all the rest
:0:
/dev/null
}
"|/usr/local/bin/procmail -f-"
The generated files are then examined (grep -i fail/error) each morning and the Assay Checklist sections are filled in appropriately (see Section x).
C++ unit tests are performed every week in both Socorro and NFRA on both the aips and trial modules. Tests are run over the weekend and results are mailed to either aips2-modulebosses (Socorro:aips results, NFRA:aips and trial) or aips2-inhale (Socorro:aips and trial results).
The script which performs this task is testsuite (/aips++/daily/$ARCH/bin/testsuite) which runs runtests (also /aips++/daily/$ARCH/bin/runtests). runtests writes a series of reports in /aips++/daily/$ARCH/bintest/ for each module and then a summary file called runtests.report which is parsed by testsum.sh to write the report which is mailed to aips2-lib, etc.
# # Thursday's daily cumulative inhale is managed by testsuite. # ----------------------------------------------------------- 30 19 * * 4 (. /aips++/daily/.profile ; gmake -C /aips++/daily/code megaunlink ; /aips++/daily/sun4sol_egcs/bin/testsuite -c ; gmake -C /aips++/daily/code megalink) 2>&1 | tee /aips++/daily/testsuite.log | mailx -s "tarzan testsuite.log" aips2-inhale@nrao.edu aips2mgr; mailx -s "sun4sol_egcs test results summary - aips" aips2-modulebosses aips2-inhale < /aips++/daily/sun4sol_egcs/bintest/runtests_aips.summary; mailx -s "sun4sol_egcs test results summary - trial" aips2-inhale < /aips++/daily/sun4sol_egcs/bintest/runtests_trial.summary #
These reports are also dumped to files on disk and reviewed each morning if available.
assay().trytests() should be run daily. A simple crontab automates this procedure:
#!/opt/local/bin/bash # # set up display to prevent tests from failing export DISPLAY=0:0 # get rid of procmail.log rm $HOME/mail/procmail.log # cd /home/charybdis_2/jmcmulli/computing/chief_tester/assay # get rid of old files rm -r *.plot image* 3C* source /aips++/daily/aipsinit.sh aips++ -l ct.g 2>&1 | tee ct.log
where, ct.g is:
#
#
#
#include 'assay.g'
numfail:=assay().trytests()
print 'Number of fails is: ',numfail;
memoryassay();
mymemoryassay := function(verbose=F) {
names := symbol_names();
memory := [];
j:=0;
for (i in 1:length(names)) {
name:=names[i];
list[i] := name;
memory[i] := eval(spaste('sizeof(',name,')'));
}
list:=sort_pair(memory, list);
memory:=sort(memory);
if(verbose) {
for (i in 1:length(list)) {
print list[i], memory[i];
}
}
return sum(memory);
}
fp:=open(">> /home/charybdis_2/jmcmulli/computing/chief_tester/assay/memory.hist");
a:=shell('date');
b:=mymemoryassay();
mem_string:=spaste(a,' -- ',as_string(b));
ok:=fprintf(fp,'%s\n',mem_string);
exit
Time for startup, total memory of glish variables and any fails/errors should be logged as required and mailed to aips2-lib. The total memory in glish variables is also automatically logged to memory.hist.
Requirements for stable release:
This can be complicated by a recent problem encountered in NRAO-CV in which a linux machine would neither spawn a browser when necessary nor drive an existing browser. The problem results from the fact that different systems in that location use either the standard netscape script for the netscape command or a binary executable. The script accepts the 'remote' flag which is what is used by the help menus while the executable happily ignores it. How do we deal with this?
Both e) and f) require a checklist of user interactions in the absence of an automated cron job.
In addition, there are a number of check-in protocols which should be adhered to. Maintaining the stability of daily is a high priority for everyone in the project. Breaking daily affects the work of a large number of people. Maintaining the stability of weekly is essential. Breaking weekly is disastrous for the work of a large number of people. Our goal should be that every weekly can be marked as stable. Checkins of changes to existing code should be made with the above two goals in mind.
Tasks for all supported platforms/OS revisions.
Completed: 11/99
Hardware requirements:
3rd Party Software requirements (README file from pub/import on aips2.nrao.edu):
bison Compiler compiler
When: 1998/06/16 JAU
Version: 1.25
Source: prep.ai.mit.edu:/pub/gnu
Files: bison-1.25.tar.gz
Usage: Needed for compiling the Tables module.
BLAS See LAPACK
dvips Program to convert documents from dvi format to PostScript
When: 1992/06/03
Version: 5.490
Source: labrea.stanford.edu:/pub
Files: dvips-5.490.tar.gz
Usage: Used for optional production of AIPS++ PostScript
documentation.
flex Lexical analyzer generator
When: 1998/06/16 JAU
Version: 2.5.4a
Source: prep.ai.mit.edu:/pub/gnu
Files: flex-2.5.4a.tar.gz
Usage: Needed for compiling the Tables module.
ghostscript GNU "PostScript" interpreter
When: 1998/06/16 JAU
Version: 4.03
Source: prep.ai.mit.edu:/pub/gnu
Files: ghostscript-4.03.tar.gz
ghostscript-fonts-std-4.03.tar.gz
Usage: Used by 'ghostview'.
ghostview GNU "PostScript" previewer
When: 1998/06/16 JAU
Version: 1.5
Source: prep.ai.mit.edu:/pub/gnu
Files: ghostview-1.5.tar.gz
Notes: Requires 'ghostscript'.
Usage: Optionally used to preview/print selected pages from
PostScript files.
gmake GNU make.
When: 1998/06/16 JAU
Version: 3.76.1
Source: prep.ai.mit.edu:/pub/gnu
Files: make-3.76.1.tar.gz
Notes: Installed as 'gmake' to distinguish it from the version
of 'make' supplied with unix operating system.
Usage: Required to rebuild AIPS++ from its sources.
Installed automatically if necessary by 'configure'
when AIPS++ is first installed.
gzip GNU file compression and expansion utility
When: 1994/04/15
Version: 1.2.4
Source: prep.ai.mit.edu:/pub/gnu
Files: gzip-1.2.4.tar
Usage: Required for installing AIPS++ from compressed tar
files. Installed automatically if necessary by
'configure' when AIPS++ is first installed.
LAPACK FORTRAN library of commonly used numerical algorithms
(encompasses LINPACK and EISPACK).
When: 1998/06/16 JAU
Version: 2.0
Source: netlib.org:/lapack
Files: lapack.tar.gz
Notes: Now includes the BLAS library.
Usage: Required.
LaTeX LaTeX document preparation system.
When: 1995/03/06
Version: 2e
Source: ftp.Uni-Mainz.DE:/pub/tex/macros/latex
Files: latex/{base,packages,contrib}.tar.gz
Usage: Optionally used for compilation of AIPS++ printable
documentation.
latex2html LaTeX to HTML document converter.
When: 1998/08/08
Version: 98.2 beta 5
Source: Released:
ftp://www-dsed.llnl.gov/files/programs/unix/latex2html/
Source: Beta:
http://cdc-server.cdc.informatik.th-darmstadt.de/~latex2html/
Files: l2h98_2beta5.tar.gz
Notes: Make sure all the utilities are up-to-date that are
needed by latex2html.
Usage: Optionally used to generate AIPS++ web documentation.
aips2l2h.patch Patch for latex2html
When 1998/09/23
Version 1.
Source /home/sneffels2/wyoung/latex2html
Files aips2l2h.patch
Notes This is an aips++ specific kludge for generating the
User's reference manual.
Usage typically patch -p0 <aips2l2h.patch
make See gmake
perl The perl shell programming language
When: 1998/06/16 JAU
Version: 5.004_04
Source: prep.ai.mit.edu:/pub/gnu
Files: perl-5.004_04.tar.gz
Usage: Required for the document extractor, 'cxx2html'.
PGPLOT Plotting package written by Tim Pearson
When: 1998/06/16 JAU
Version: 5.2
Source: astro.caltech.edu:/pub/pgplot
Files: pgplot5.2.tar.gz
Usage: Required. Currently used for AipsView, Glish, and
related applications.
rcs Revision Control System for source code management
When: 1995/08/21
Version: 5.7
Source: prep.ai.mit.edu:/pub/gnu
Files: rcs-5.7.tar.gz
Usage: Required for code management at AIPS++ development
sites.
tcl/Tk Tool Control Language
When: 1998/06/22
Version: 8.0 (patch level 2)
Source: http://www.scriptics.com/
Files: tcl8.0p2.tar.gz tk8.0p2.tar.gz
Usage: Required by Glish and Aipsview
tex The TeX document formating system
When: -
Version: 3.14
Source: byron.u.washington.edu:/pub/unixtex
Files: unixtex subdirectory
Usage: Optionally used for compilation of AIPS++ printable
documentation.
Notes: All AIPS++ documents are available in PostScript form
from aips2.cv.nrao.edu:/pub/aips++/docs.
The guidelines for testing glish scripts are broken into two parts. The first part can be run automatically and performs tests on all public functions (we assuming that private functions will be effectively tested through the exercise of the public functions which utilize them); the procedures for incorporating a generic set of tests is outlined below (and based on the model used in deconvolver). The second part of testing is a checklist of items for testing the GUI elements of a given task; this list is under development (1/5/00).
checkresult := function(ok, ntest, nametest, ref results) {
if(is_fail(ok)) {
results[ntest] := paste("Test", ntest, " on ", nametest,
"failed ", ok::message);
}
else if(is_boolean(ok)) {
if(ok) {
results[ntest] := paste("Test", ntest, " on ",
nametest, "succeeded");
}
else {
results[ntest] := paste("Test", ntest, " on ",
nametest, "failed ", ok::message);
}
}
else {
results[ntest] := paste("Test", ntest, " on ", nametest,
"returned", ok);
}
}
nametest := 'taskmethod';
note('Test task.method');
ntest+:=1
ok:=task.method(arg1,arg2,etc);
checkresult(ok,ntest,nametest,results);
After all tests have been run:
etime:=time();
With the final results posted as:
for (result in results) {
note(result);
}
note('## task.tasktest()');
note('## Finished in run time = ',(etime-stime),' seconds');
Completed: Initial version 1/5/00
Completed: Generally at 100% for aips test scripts.
Completed: Currently we achieve
80%
List of required hardware and third party software.
Completed: 11/99
Hardware requirements:
3rd Party Software requirements (README file from pub/import on aips2.nrao.edu):
bison Compiler compiler
When: 1998/06/16 JAU
Version: 1.25
Source: prep.ai.mit.edu:/pub/gnu
Files: bison-1.25.tar.gz
Usage: Needed for compiling the Tables module.
BLAS See LAPACK
dvips Program to convert documents from dvi format to PostScript
When: 1992/06/03
Version: 5.490
Source: labrea.stanford.edu:/pub
Files: dvips-5.490.tar.gz
Usage: Used for optional production of AIPS++ PostScript
documentation.
flex Lexical analyzer generator
When: 1998/06/16 JAU
Version: 2.5.4a
Source: prep.ai.mit.edu:/pub/gnu
Files: flex-2.5.4a.tar.gz
Usage: Needed for compiling the Tables module.
ghostscript GNU "PostScript" interpreter
When: 1998/06/16 JAU
Version: 4.03
Source: prep.ai.mit.edu:/pub/gnu
Files: ghostscript-4.03.tar.gz
ghostscript-fonts-std-4.03.tar.gz
Usage: Used by 'ghostview'.
ghostview GNU "PostScript" previewer
When: 1998/06/16 JAU
Version: 1.5
Source: prep.ai.mit.edu:/pub/gnu
Files: ghostview-1.5.tar.gz
Notes: Requires 'ghostscript'.
Usage: Optionally used to preview/print selected pages from
PostScript files.
gmake GNU make.
When: 1998/06/16 JAU
Version: 3.76.1
Source: prep.ai.mit.edu:/pub/gnu
Files: make-3.76.1.tar.gz
Notes: Installed as 'gmake' to distinguish it from the version
of 'make' supplied with unix operating system.
Usage: Required to rebuild AIPS++ from its sources.
Installed automatically if necessary by 'configure'
when AIPS++ is first installed.
gzip GNU file compression and expansion utility
When: 1994/04/15
Version: 1.2.4
Source: prep.ai.mit.edu:/pub/gnu
Files: gzip-1.2.4.tar
Usage: Required for installing AIPS++ from compressed tar
files. Installed automatically if necessary by
'configure' when AIPS++ is first installed.
LAPACK FORTRAN library of commonly used numerical algorithms
(encompasses LINPACK and EISPACK).
When: 1998/06/16 JAU
Version: 2.0
Source: netlib.org:/lapack
Files: lapack.tar.gz
Notes: Now includes the BLAS library.
Usage: Required.
LaTeX LaTeX document preparation system.
When: 1995/03/06
Version: 2e
Source: ftp.Uni-Mainz.DE:/pub/tex/macros/latex
Files: latex/{base,packages,contrib}.tar.gz
Usage: Optionally used for compilation of AIPS++ printable
documentation.
latex2html LaTeX to HTML document converter.
When: 1998/08/08
Version: 98.2 beta 5
Source: Released:
ftp://www-dsed.llnl.gov/files/programs/unix/latex2html/
Source: Beta:
http://cdc-server.cdc.informatik.th-darmstadt.de/~latex2html/
Files: l2h98_2beta5.tar.gz
Notes: Make sure all the utilities are up-to-date that are
needed by latex2html.
Usage: Optionally used to generate AIPS++ web documentation.
aips2l2h.patch Patch for latex2html
When 1998/09/23
Version 1.
Source /home/sneffels2/wyoung/latex2html
Files aips2l2h.patch
Notes This is an aips++ specific kludge for generating the
User's reference manual.
Usage typically patch -p0 <aips2l2h.patch
make See gmake
perl The perl shell programming language
When: 1998/06/16 JAU
Version: 5.004_04
Source: prep.ai.mit.edu:/pub/gnu
Files: perl-5.004_04.tar.gz
Usage: Required for the document extractor, 'cxx2html'.
PGPLOT Plotting package written by Tim Pearson
When: 1998/06/16 JAU
Version: 5.2
Source: astro.caltech.edu:/pub/pgplot
Files: pgplot5.2.tar.gz
Usage: Required. Currently used for AipsView, Glish, and
related applications.
rcs Revision Control System for source code management
When: 1995/08/21
Version: 5.7
Source: prep.ai.mit.edu:/pub/gnu
Files: rcs-5.7.tar.gz
Usage: Required for code management at AIPS++ development
sites.
tcl/Tk Tool Control Language
When: 1998/06/22
Version: 8.0 (patch level 2)
Source: http://www.scriptics.com/
Files: tcl8.0p2.tar.gz tk8.0p2.tar.gz
Usage: Required by Glish and Aipsview
tex The TeX document formating system
When: -
Version: 3.14
Source: byron.u.washington.edu:/pub/unixtex
Files: unixtex subdirectory
Usage: Optionally used for compilation of AIPS++ printable
documentation.
Notes: All AIPS++ documents are available in PostScript form
from aips2.cv.nrao.edu:/pub/aips++/docs.
guidelines for the writing of a glish test script.
The guidelines for testing glish scripts are broken into two parts. The first part can be run automatically and performs tests on all public functions (we assuming that private functions will be effectively tested through the exercise of the public functions which utilize them); the procedures for incorporating a generic set of tests is outlined below (and based on the model used in deconvolver). The second part of testing is a checklist of items for testing the GUI elements of a given task; this list is under development (1/5/00).
checkresult := function(ok, ntest, nametest, ref results) {
if(is_fail(ok)) {
results[ntest] := paste("Test", ntest, " on ", nametest,
"failed ", ok::message);
}
else if(is_boolean(ok)) {
if(ok) {
results[ntest] := paste("Test", ntest, " on ",
nametest, "succeeded");
}
else {
results[ntest] := paste("Test", ntest, " on ",
nametest, "failed ", ok::message);
}
}
else {
results[ntest] := paste("Test", ntest, " on ", nametest,
"returned", ok);
}
}
nametest := 'taskmethod';
note('Test task.method');
ntest+:=1
ok:=task.method(arg1,arg2,etc);
checkresult(ok,ntest,nametest,results);
After all tests have been run:
etime:=time();
With the final results posted as:
for (result in results) {
note(result);
}
note('## task.tasktest()');
note('## Finished in run time = ',(etime-stime),' seconds');
Completed: Initial version 1/5/00
successful completion of all glish test scripts in aips.
Completed: Generally at 100% for aips test scripts.
test script for 50% of the glish functions in trial.
Completed: Currently we achieve
80%
test script for every glish function in aips.
Completed:
DISH test scripts.
Completed:
test programs for all classes in the aips package.
Completed:
assay level specification (0,...n). Highest
level includes largest tests (e.g., WF, MF).
Completed:
assay test areas (e.g., imaging, calibration,
...) as second axis against test level (0,...n), including an
'all' option.
Completed:
standardized GUI test scripts requiring
specific GUI interactions.
Completed:
| Test Script dir | Functions Tools Constructors | Whatis Missing |
| tcomponentlist.g:componentlisttest | ||
| trial/implement/ComponentModels/test | emptycomponentlist(C) | |
| is_componentlist | Functions | |
| type | sort | |
| length | sample | |
| simulate | edit | |
| setshape | select | |
| shapetype | deselect | |
| convertshape | selected | |
| getshape | getlabel | |
| rename | setlabel | |
| close | getfluxvalue | |
| done | getfluxunit | |
| componentlist(T) | getfluxpol | |
| indices | setflux | |
| remove | convertfluxunit | |
| recover | convertfluxpol | |
| purge | getrefdir | |
| getrefdirra | ||
| getrefdirdec | ||
| getrefdirframe | ||
| convertrefdir | ||
| spectrumtype | ||
| getspectrum | ||
| setspectrum | ||
| getfreq | ||
| getfreqvalue | ||
| getfrequnit | ||
| getfreqframe | ||
| setfreq | ||
| setfreqframe | ||
| convertfrequnit | ||
| Tools | ||
| componenteditor | ||
| Constructors | ||
| asciitocomponentlist | ||
| deconvolver.g:deconvolverlongtest | ||
| trial/apps/deconvolver | deconvolver | |
| boxmask | ||
| clarkclean | ||
| setscales | ||
| clean | ||
| ft | ||
| make | ||
| smooth | ||
| makeprior | ||
| mem | ||
| mem-with-prior | ||
| mem-with-mask | ||
| residual | ||
| restore | ||
| summary | ||
| clipimage | ||
| open | ||
| done | ||
| fftserver.g:fftservertest | ||
| trial/implement/Mathematics | complexfft | real test |
| realtocomplexfft | ||
| convolve | ||
| crosscorr | ||
| autocorr | ||
| shift | ||
| mfft | ||
| done | ||
| guientry.g:guientrytest | ||
| trial/implement/Widgets | guientry() | |
| range | ||
| boolean | ||
| booleanarray | ||
| array | ||
| scalar | ||
| choice | ||
| check | ||
| file | ||
| string | ||
| quantity | ||
| record | ||
| region | ||
| epoch | ||
| direction | ||
| position | ||
| imager.g:imageralltests | ||
| imager.g:imagertest | ||
| trial/apps/imager/ | imager(C) | imagertester(C) |
| open | ||
| setjy | ||
| setimage | ||
| setoptions | ||
| setdata | ||
| summary | ||
| make | ||
| weight | ||
| filter | ||
| image | ||
| fitpsf | ||
| close | ||
| done | ||
| boxmask | ||
| clean | ||
| ft | ||
| plotvis | ||
| restore | ||
| smooth | ||
| mask | ||
| imager.g:imagerlongtest | setimage | |
| advise | ||
| setdata | ||
| setoptions | ||
| plotsummary | ||
| plotuv | ||
| plotvis | ||
| plotweights | ||
| fitpsf | ||
| setbeam | ||
| weight | ||
| uvrange | ||
| filter | ||
| make | ||
| boxmask | ||
| regionmask | ||
| smooth | ||
| exprmask | ||
| image | ||
| setscales | ||
| clean | ||
| n | ||
| restore | ||
| residual | ||
| clipimage | ||
| sensitivity | ||
| ft | ||
| correct | ||
| clipvis (in doc) | ||
| done | ||
| imager.g:imagermftest | setimage | |
| make | ||
| clean | ||
| plotvis | ||
| close | ||
| done | ||
| imager.g:imagerpbtest | setimage | |
| setdata | ||
| setvp | ||
| make | ||
| weight | ||
| filter | ||
| setbeam | ||
| clean | ||
| close | ||
| done | ||
| imager.g:imagerselfcaltest | setimage | |
| setdata | ||
| clean | ||
| clipimage | ||
| selfcal | ||
| close | ||
| done | ||
| imager.g:imagercomponenttest | setimage | |
| setdata | ||
| summary | ||
| make | ||
| ft | ||
| plotvis | ||
| clean | ||
| close | ||
| done | ||
| imageservertest.g:imageservertest | ||
| trial/implement/Images/ (tests 1-26) | imagefromarray(C) | |
| flush (not in doc) | ||
| close | ||
| open | ||
| rename | ||
| delete | ||
| done | ||
| image(C) | ||
| shape | ||
| name | ||
| boundingbox | ||
| summary | ||
| stats | ||
| histo | ||
| coord | ||
| coordinates | ||
| getregion | ||
| putregion | ||
| subimage | ||
| moments | ||
| hanning | ||
| padimage | ||
| getchunk | ||
| putchunk | ||
| setmiscinfo | ||
| miscinfo | ||
| tofits | ||
| imagefromfits(C) | ||
| imagefromshape(C) | ||
| subimage(C) | ||
| imageconcat(C) | ||
| imagecalc(C) | ||
| statistics | ||
| is_image | ||
| imagetools | ||
| type | ||
| id | ||
| lock | ||
| unlock | ||
| set | ||
| replacemaskedpixels | ||
| coordmeasures | ||
| setfrequencysystem | ||
| maskhandler | ||
| history | ||
| arrconvolve | ||
| sepconvolve | ||
| histograms | ||
| fitsky | ||
| gausstopixel | ||
| view | ||
| maskhandlergui | ||
| momentsgui | ||
| sepconvolvegui | ||
| interpolate1d.g:interpolate1dtest | ||
| trial/implement/Mathematics | initialize | (a real test) |
| interpolate | ||
| setmethod | ||
| pgplotter.g:pgplottertest | pgplotter(C) | (a real test) |
| trial/implement/Guiutils | busy | commandgui |
| demo | editgui | |
| done | addtool | |
| tool | ||
| (not in doc...) | ||
| gui | ||
| screen | ||
| plotfile | ||
| restore | ||
| type | ||
| (implicit calls) | ||
| postscript(W) | ||
| clear(W) | ||
| record(W) | ||
| displaylist(W) | ||
| refresh(W) | ||
| lastchange(W) | ||
| message(W) | ||
| shortnametofullname | ||
| polyfitter.g:polyfittertest | fit | (a real test) |
| trial/implement/Mathematics | multifit | |
| eval | ||
| randomnumbers.g:randomnumberstest | normal | (a real test) |
| trial/implement/Mathematics | reseed | |
| ttable.g:tabletest | tablecreatescalarcoldesc | |
| trial/apps/table | tablecreatearraycoldesc | |
| tablecreatedesc | ||
| table(C) | tablefromfits(C) | |
| getdesc | iswritable | |
| flush | lock | |
| putinfo | unlock | |
| info(not in doc) | ||
| addreadmeline | hassdatachanged | |
| tableinfo | haslock | |
| colnames | lockoptions | |
| getcoldesc | ismultiused | |
| addcols | browse | |
| name | selectrows | |
| tableopentables | summary | |
| nrows | rownumbers | |
| addrows | setmaxcachesize | |
| putcol | isscalarcol | |
| getcol | coldatatype | |
| getcell | colarraytype | |
| putcell | ncols | |
| putkeyword | removerows | |
| getkeyword | getcellslice | |
| getkeywords | getcolslice | |
| putkeywords | putcellslice | |
| keywordnames | (not in doc) | |
| removekeyword | putcolslice | |
| fieldnames | (not in doc) | |
| putcolkeyword | getcolshapestring | |
| getcolkeyword | removecolkeyword | |
| getcolkeywords | ok | |
| putcolkeywords | ||
| colkeywordnames | (not in doc) | |
| tableiterator(C) | ||
| next | reset | |
| table | ||
| terminate | ||
| tablerow(C) | ||
| get | set | |
| put | ||
| close | ||
| query | ||
| close | ||
| tableexists | is_table | |
| tablecommand | tabledemo | |
| tableiswritable | tablerename | |
| tablecopy | newtb | |
| tabledelete | ||
| closeallTables | (not in doc) | |
| tablefromascii(C) | ||
| toascii |
# assay.g: a glish convenience script for all tests and demos
# Copyright (C) 1996,1997,1998,1999,2000,2001
# Associated Universities, Inc. Washington DC, USA.
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library 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 Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
#
# Correspondence concerning AIPS++ should be addressed as follows:
# Internet email: aips2-request@nrao.edu.
# Postal address: AIPS++ Project Office
# National Radio Astronomy Observatory
# 520 Edgemont Road
# Charlottesville, VA 22903-2475 USA
# $Id: assay.latex,v 19.0 2003/07/16 03:50:40 aips2adm Exp $
#
pragma include once
include "general.g";
include "utility.g";
include "synthesis.g";
include "note.g";
# Runs each function in the list and checks for a fail.
# Tracks the number of fails and reports at the end.
# Returns the number of fails.
const assay:=function() {
self.tests:=['display_multi_column_list_test',
'display_multi_column_text_test',
'fftservertest',
'imageralltests',
'imagetest',
'interpolate1dtest',
'pgplottertest',
'polyfittertest',
'randomnumberstest',
'tabletest'];
self.demos:=['display_multi_column_list_demo',
'display_multi_column_text_demo',
'fftserverdemo',
'imagedemo',
'inputsdemo',
'interpolate1ddemo',
'pgplottertest',
'polyfitterdemo',
'randomnumbersdemo',
'tabledemo'];
const self.dontfail:=function(f) {
if(!is_defined(f)) return 'argument must be defined';
if(!is_string(f)) return 'argument must be a string';
if(!is_function(eval(f))) return paste(f, 'is not a function');
result:=eval(spaste(f,'()'));
if(is_fail(result)) {
print f, 'fails: ', result::message;
return result::message;
}
return '';
}
const public.try:=function(functionlist) {
if(!is_string(functionlist)) fail "Need list of functions";
if(functionlist=='') fail "Need list of functions";
funclist:=split(functionlist);
messages:=array('', len(funclist));
for (i in 1:len(funclist)) {
messages[i]:=self.dontfail(funclist[i]);
}
failed:='';
numberfailed:=0;
for (i in 1:len(funclist)) {
if(messages[i]!='') {
note(paste(funclist[i], 'failed: ', messages[i]));
numberfailed+:=1;
}
}
return numberfailed;
}
# Print tests
const public.tests:=function() {return self.tests;}
# Print demos
const public.demos:=function() {return self.demos;}
# Assay all tests
const public.trytests:=function(tests=F){
if(is_string(tests)&&strlen(tests)) {
return public.try(tests);
}
else {
return public.try(self.tests);
}
}
# Assay all demos
const public.trydemos:=function(demos=F){
if(is_string(demos)&&strlen(demos)) {
return public.try(demos);
}
else {
return public.try(self.demos);
}
}
const public.all:=function() {return trytests()+trydemos();};
const public.type:=function() {return "assay";};
return ref public;
}
# assay_meta.g: Standard meta information for assay
#
# Copyright (C) 1996,1997,1998,1999,2000,2001
# Associated Universities, Inc. Washington DC, USA.
#
# This program 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; either version 2 of the License, or (at your option)
# any later version.
#
# This program 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 this program; if not, write to the Free Software Foundation, Inc.,
# 675 Massachusetts Ave, Cambridge, MA 02139, USA.
#
# Correspondence concerning AIPS++ should be addressed as follows:
# Internet email: aips2-request@nrao.edu.
# Postal address: AIPS++ Project Office
# National Radio Astronomy Observatory
# 520 Edgemont Road
# Charlottesville, VA 22903-2475 USA
#
# $Id: assay.latex,v 19.0 2003/07/16 03:50:40 aips2adm Exp $
#
pragma include once;
include 'types.g';
types.class('assay').includefile('assay.g');
types.method('ctor_assay');
types.method('try').string('functionlist');
types.method('tests').string('return');
types.method('demos').string('return');
types.method('trytests').string('tests').integer('return');
types.method('trydemos').string('demos').integer('return');
types.method('all').integer('return');
# checker.g: check the environment of AIPS++
#
# Copyright (C) 1996,1997,1998,1999,2000,2001
# Associated Universities, Inc. Washington DC, USA.
#
# This program 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; either version 2 of the License, or (at your option)
# any later version.
#
# This program 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 this program; if not, write to the Free Software Foundation, Inc.,
# 675 Massachusetts Ave, Cambridge, MA 02139, USA.
#
# Correspondence concerning AIPS++ should be addressed as follows:
# Internet email: aips2-request@nrao.edu.
# Postal address: AIPS++ Project Office
# National Radio Astronomy Observatory
# 520 Edgemont Road
# Charlottesville, VA 22903-2475 USA
#
# $Id: assay.latex,v 19.0 2003/07/16 03:50:40 aips2adm Exp $
#
pragma include once
include 'note.g';
const checker := function() {
private := [=];
public.gui := function() {
wider private;
warnings := 0;
if(!have_gui()) {
warnings +:= 1;
note('Glish cannot display a GUI: no GUIs will be available',
priority='WARN');
note('Recommend checking value of environment variable DISPLAY',
priority='WARN');
note('Also check if \'xhost +\' needs to be run',
priority='WARN');
}
return warnings;
}
public.display := function() {
wider private;
warnings := 0;
if(strlen(shell('xwininfo -root | grep TrueColor'))) {
warnings +:= 1;
note('X server is running in TrueColor: display via aipsview or viewer will not work',
priority='WARN');
note('Recommend restarting X server with e.g. \'startx -- -bpp 8\'',
priority='WARN');
}
return warnings;
}
public.plotter := function() {
wider private;
warnings := 0;
if(0) {
if(!(is_defined('pgplot')||!is_function(pgplot))) {
warnings +:= 1;
note('pgplot is not available: plotting will not work', priority='WARN');
}
}
found := F;
include 'os.g';
for (field in "PGPLOT_FONT PGPLOT_DIR") {
if(has_field(environ, field)&&dos.fileexists(environ[field])) {
found := T;
if(field=='PGPLOT_DIR') {
if(!dos.fileexists(spaste(environ.PGPLOT_DIR, '/grfont.dat'))) {
warnings +:= 1;
note('The directory pointed to by the pgplot environment PGPLOT_DIR does not contain grfont.dat: labelling on plots will not be available', priority='WARN');
note('Recommend setting PGPLOT_DIR to location of pgplot grfont.dat file',
priority='WARN');
}
break;
}
}
}
if(!found) {
warnings +:= 1;
note('Neither pgplot environment variables PGPLOT_FONT, PGPLOT_DIR are not defined: labelling on plots will not be available', priority='WARN');
note('Recommend setting PGPLOT_FONT to location of pgplot grfont.dat file',
priority='WARN');
}
return warnings;
}
public.memory := function() {
wider private;
include 'sysinfo.g';
warnings := 0;
if(sysinfo().memory()<63) {
note('The physical memory on your system is too low for optimum performance of AIPS++',
priority='WARN');
warnings +:= 1;
}
return warnings;
}
public.perl := function() {
warnings := 0;
if(strlen(which_client('perl')) == 0){
note('Perl is not in your path. The AIPS++ help will not be available to you.',
priority='WARN')
warnings +:= 1;
}
return warnings;
}
public.all := function() {
wider public;
warnings := public.gui() + public.display() + public.memory() + public.plotter()
+ public.perl();
if(warnings) {
note('Environment is not optimum for AIPS++', priority='WARN');
}
else {
note('Environment is suitable for AIPS++');
}
return warnings;
}
public.type := function() {
return 'checker';
}
return public;
}
const defaultchecker := const checker();
const dch := const defaultchecker;
note('defaultchecker (dch) ready', priority='NORMAL', origin='checker.g');
# memoryassay.g: Assay of memory
#
# Copyright (C) 1996,1997,1998,1999,2000,2001
# Associated Universities, Inc. Washington DC, USA.
#
# This program 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; either version 2 of the License, or (at your option)
# any later version.
#
# This program 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 this program; if not, write to the Free Software Foundation, Inc.,
# 675 Massachusetts Ave, Cambridge, MA 02139, USA.
#
# Correspondence concerning AIPS++ should be addressed as follows:
# Internet email: aips2-request@nrao.edu.
# Postal address: AIPS++/ Project Office
# National Radio Astronomy Observatory
# 520 Edgemont Road
# Charlottesville, VA 22903-2475 USA
#
# $Id: assay.latex,v 19.0 2003/07/16 03:50:40 aips2adm Exp $
#
pragma include once;
include 'note.g'
memoryassay := function(verbose=F) {
names := symbol_names();
memory := [];
j:=0;
for (i in 1:length(names)) {
name:=names[i];
list[i] := name;
memory[i] := eval(spaste('sizeof(',name,')'));
}
list:=sort_pair(memory, list);
memory:=sort(memory);
if(verbose) {
for (i in 1:length(list)) {
print list[i], memory[i];
}
}
note('Total memory used in Glish variables = ', sum(memory), ' bytes');
return T;
}
#!/bin/sh
#-----------------------------------------------------------------------------
# testsuite: Run tests on the latest AIPS++ update
#-----------------------------------------------------------------------------
#
# Copyright (C) 1992-1997,1998,2000,2001
# Associated Universities, Inc. Washington DC, USA.
#
# This program 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; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Correspondence concerning AIPS++ should be addressed as follows:
# Internet email: aips2-request@nrao.edu.
# Postal address: AIPS++ Project Office
# National Radio Astronomy Observatory
# 520 Edgemont Road
# Charlottesville, VA 22903-2475 USA
#
#-----------------------------------------------------------------------------
# Usage: testsuite [-i] [-m module ] [-p package]
#-----------------------------------------------------------------------------
# testsuite may optionally run an inhale and then do a gmake runtests.
# It is invoked regularly as a cron job, on aips2.nrao.edu.
#
# Options:
# -i do a gmake runtests after doing an inhale
# -m do a gmake runtests for a specfic module
# -p do a gmake runtests for a specfic package
# the -m and -p options maybe combined
#
# Status return values correspond to the various phases of the operation
# standard testsuite status
#
# Notes:
#=============================================================================
# Initialize
#-----------------------------------------------------------------------------
# Guard against being overwritten.
case $0 in
*-)
ARGS=$*
;;
*)
cp $0 $0-
exec $0- $*
;;
esac
# Identify ourselves.
HOST=`uname -n | sed -e 's/\..*//'`
LOGNAME=${LOGNAME-$USER}
echo ""
echo "testsuite: Execution on $HOST by $LOGNAME commenced at"
echo "testsuite: `adate`"
echo "testsuite: `adate -l`"
echo ""
echo "testsuite: Command line arguments \"$*\""
# Check that AIPSPATH is defined.
if [ "$AIPSPATH" = "" ] ; then
exec 1>&2
echo ""
echo "testsuite: AIPSPATH is undefined, abort!"
exit 1
fi
# Get the site name.
SITE=`echo $AIPSPATH | awk '{print $3}'`
# Produce a status report.
echo ""
echo "testsuite: Current status of the $SITE installation"
avers -l
# Determine the AIPS++ root directory.
AIPSROOT=`echo $AIPSPATH | awk '{print $1}'`
# Check the accessibility of the AIPSROOT area.
if [ ! -d "$AIPSROOT" ]
then
exec 1>&2
echo ""
echo "testsuite: The AIPS++ root directory does not exist or is"
echo " not accessible, $AIPSROOT"
exit 1
fi
# Get account information.
AIPS2MGR=`getrc -i account.manager 2> /dev/null`
AIPS2PRG=`getrc -i account.programmer 2> /dev/null`
MGRACCNT=`echo $AIPS2MGR | sed -e 's/\..*//'`
MGRGROUP=`echo $AIPS2MGR | sed -e 's/.*\.//'`
PRGGROUP=`echo $AIPS2PRG | sed -e 's/.*\.//'`
# Check that this script is being run from the right account.
# if [ "$MGRACCNT" != "$LOGNAME" -a "$MGRACCNT" != "" ]
# then
# exec 1>&2
# echo ""
# echo "testsuite: This script can only be run by $MGRACCNT, not" \
# "$LOGNAME, abort!"
# exit 1
# fi
# Set default file creation mode.
umask 002
# Parse command input.
MODE=incremental
HYBRID=
DINKUM=
DOCSYS=docsys
TARGETS=runtests
LATCHKEY=
INHALE=0
DEFMODULES=0
DEFPACKAGES=0
PACKAGES=""
MODULES=""
HASMODULES=0
HASPACKAGES=0
INHALE_FLAG="-m"
while [ "$#" -gt 0 ]
do
case $1 in
-c)
INHALE_FLAG="-c"
INHALE=1
;;
-i)
INHALE=1
;;
-m*)
DEFMODULES=1
DEFPACKAGES=0
HASMODULES=1;
case $1 in
-m)
shift
MODULES="$1"
;;
*)
MODULES=`echo $1 | sed -e 's/^-m//'`
;;
esac
;;
-p*)
DEFMODULES=0
DEFPACKAGES=1
HASPACKAGES=1;
case $1 in
-p)
shift
PACKAGES="$1"
;;
*)
PACKAGES=`echo $1 | sed -e 's/^-p//'`
;;
esac
;;
*)
if [ $DEFPACKAGES -gt 0 ] ; then
PACKAGES="$PACKAGES $1"
elif [ $DEFMODULES -gt 0 ] ; then
MODULES="$MODULES $1"
else
exec 1>&2
echo ""
echo "Usage: testsuite [-i] [-m module names] [-p package names]"
exit 1
fi
;;
esac
[ "$2" = "" ] && break
shift
done
# Report the amount of free space available for the update.
echo ""
echo "testsuite: Available space in the /tmp and $AIPSROOT partitions"
df /tmp $AIPSROOT
# Define major AIPS++ directories.
AIPSLAVE="$AIPSROOT/slave"
AIPSCODE="$AIPSROOT/code"
# Get the user name.
USERNAME=$LOGNAME@
echo "modules=$MODULES packages=$PACKAGES "
if [ $INHALE -gt 0 ] ; then
echo ""
echo "testsuite: inhale started"
echo ""
inhale $INHALE_FLAG > $AIPSROOT/inhale.log 2>&1
echo ""
echo "testsuite: runtests started"
echo ""
runtests
else
if [ $HASPACKAGES -gt 0 -o $HASMODULES -gt 0 ] ; then
if [ $HASPACKAGES -eq 0 ] ; then
PACKAGES="aips"
fi
for PACK in $PACKAGES
do
if [ $HASMODULES -gt 0 ] ; then
for MODULE in $MODULES
do
if [ -d $AIPSCODE/$PACK/implement/$MODULE ] ; then
cd $AIPSCODE/$PACK/implement/$MODULE
gmake runtests
else
echo "testsuite: package $PACK has no module name $MODULE."
fi
done
else
if [ -d $AIPSCODE/$PACK ] ; then
cd $AIPSCODE/$PACK
gmake runtests
else
echo "testsuite: no package named $PACK"
fi
fi
done
else
runtests
fi
fi
echo ""
echo "testsuite: Execution terminated at"
echo "testsuite: `adate`"
echo "testsuite: `adate -l`"
exit 0
#!/bin/sh
#-----------------------------------------------------------------------------
# Usage: runtests
#-----------------------------------------------------------------------------
# runtests runs the AIPS++ test programs and mails the results to the AIPS++
# email exploders.
#
# Options:
# none
#
# Status returns:
# 0: success
# 1: initialization error
#
# Notes:
# 1) Failures are only counted for the "aips" package.
#
# Original: 1997/01/29 by Mark Calabretta, ATNF
# $Id: assay.latex,v 19.0 2003/07/16 03:50:40 aips2adm Exp $
#-----------------------------------------------------------------------------
# Fundamentals.
if [ "$AIPSPATH" = "" ] ; then
echo "runtests: AIPSPATH is undefined, abort!" 1>&2
exit 1
fi
AIPSROOT=`echo $AIPSPATH | awk '{ print $1 }'`
AIPSARCH=`echo $AIPSPATH | awk '{printf("%s/%s",$1,$2)}'`
BINTESTD=`echo $AIPSPATH | awk '{printf("%s/%s/bintest",$1,$2)}'`
# Get the current version number.
VERSION=`avers | awk '{printf("%.6s",$1)}'`
# HP-UX needs to use mailx (for the -s switch). Other systems use mail.
if [ `uname` = "HP-UX" ] ; then
MAILCMD=mailx
else
MAILCMD=mail
fi
# Do it, sending the results to aips2-inhale.
{ exec 2>&1
echo ""
echo "runtests: $AIPSPATH"
echo ""
echo "runtests: Validating $VERSION."
# Initiate the test suite, preserving the log.
cd $AIPSROOT
gmake -C code TESTOPT=opt NODEP=1 runtests > $BINTESTD/runtests.log 2>&1
# Check for failures in the aips package only (nobody relies on trial).
cd $BINTESTD
FAILED=`grep '^aips-.*FAIL (' runtests.report | wc -l`
FAILED=`echo $FAILED`
echo ""
echo "runtests: Version $VERSION finished with $FAILED failures."
echo ""
echo "runtests: runtests summary and complete log are appended."
echo ""
cat $BINTESTD/runtests.report
echo ""
cat $BINTESTD/runtests.log
echo $PATH
testsum.sh $AIPSARCH aips > $BINTESTD/runtests_aips.summary 2>&1
testsum.sh $AIPSARCH trial > $BINTESTD/runtests_trial.summary 2>&1
} > $BINTESTD/runtests.rptNlog
exit 0
#!/bin/sh
#-----------------------------------------------------------------------------
# testsum.sh: Formats the runtests.report file
#-----------------------------------------------------------------------------
#
# Copyright (C) 1992-1997,1998,1999,2000,2001
# Associated Universities, Inc. Washington DC, USA.
#
# This program 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; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Correspondence concerning AIPS++ should be addressed as follows:
# Internet email: aips2-request@nrao.edu.
# Postal address: AIPS++ Project Office
# National Radio Astronomy Observatory
# 520 Edgemont Road
# Charlottesville, VA 22903-2475 USA
#
#-----------------------------------------------------------------------------
# Usage: testsum.sh $AIPSARCH package
#-----------------------------------------------------------------------------
# testsum.sh -- Makes a nicely formated listing out of the runtests.report
# file found in $AIPSARCH/bintest
#
# Options: None
#
# Notes:
# Needs gawk or nawk to work
#=============================================================================
AWK=awk
if [ -x /usr/bin/nawk ] ; then
AWK=nawk
elif [ -x /usr/local/bin/gawk ] ; then
AWK=gawk
elif [ -x /opt/local/gnu/bin/gawk ] ; then
AWK=gawk
elif [ -x /usr/bin/gawk ] ; then
AWK=gawk
fi
PACK=$2
VERSION=`avers | awk '{printf("%.6s",$1)}'`
TPASS=`grep "^$2.*PASS" $1/bintest/runtests.report | wc -l`
TUNTESTED=`grep "^$2.*UNTESTED" $1/bintest/runtests.report | wc -l`
TFAIL=`grep "^$2.*FAIL" $1/bintest/runtests.report | wc -l`
echo
echo "Summary of $AIPSPATH runtests $VERSION"
echo
echo "******************************************************************************"
echo
echo $PACK | awk '{printf "Test results for %s package\n", $1}'
echo $TPASS $TFAIL $TUNTESTED| awk '{printf "\t%5.1f%% Passed %d of %d (%d skipped)\n", 100*$1/($1+$2), $1, $1+$2, $3}'
echo "******************************************************************************"
echo
echo "Tests that failed to compile"
echo
grep "^$2.*FAIL.*compile" $1/bintest/runtests.report
echo
echo "Tests that failed to execute"
echo
grep "^$2.*FAIL.*execute" $1/bintest/runtests.report
echo
echo "Tests that failed to verify"
echo
grep "^$2.*FAIL.*verify" $1/bintest/runtests.report
grep "^$2.*FAIL.*execute" $1/bintest/runtests.report > /tmp/aips2tests.noexecute
echo
echo "Tests that were skipped"
echo
grep "^$2.*UNTESTED" $1/bintest/runtests.report
if [ -s /tmp/aips2tests.noexecute ]
then
echo
echo "*****************************************************************"
echo "Details tests that had execution failures"
echo "*****************************************************************"
echo
NOVERIFY=`awk '{print $2}' /tmp/aips2tests.noexecute`
for testrpt in $NOVERIFY
do
echo
echo "*****************************************************************"
echo "$testrpt -- report"
echo "*****************************************************************"
echo
$AWK -v testrpt=$testrpt '{printf "%s-execute> %s\n", testrpt, $0}' $1/bintest/$testrpt.report
done
fi
rm /tmp/aips2tests.noexecute
echo
grep "^$2.*FAIL.*verify" $1/bintest/runtests.report > /tmp/aips2tests.noverify
if [ -s /tmp/aips2tests.noverify ]
then
echo
echo "*****************************************************************"
echo "Details tests that had verify failures"
echo "*****************************************************************"
echo
NOVERIFY=`awk '{print $2}' /tmp/aips2tests.noverify`
for testrpt in $NOVERIFY
do
echo
echo "*****************************************************************"
echo "$testrpt -- report"
echo "*****************************************************************"
echo
$AWK -v testrpt=$testrpt '{printf "%s-verify> %s\n", testrpt, $0}' $1/bintest/$testrpt.report
done
fi
rm /tmp/aips2tests.noverify
echo
echo "Tests that passed"
echo
grep "^$2.*PASS" $1/bintest/runtests.report
echo
echo "*****************************************************************"
echo "End tests report for package $PACK"
echo "*****************************************************************"
Daily checklist testing:
Documentation spot-check: OK
htdig spot-check : OK
Sneeze logs:
argus_sgi: OK
duw01_sun4sol: OK
muse_linux: OK
kaputar_alpha: No sneeze
Assay:
linux: --
machine name, location, type: muse, CV
Time to initialize AIPS++ = 82
Total memory used in Glish variables = 2651068 bytes
assay results:
Problems with componentlist_meta.g: -- Notify tcornwel
"componentlist_meta.g", line 73: warning, .scalarmeasure is not a field in [exis
"componentlist_meta.g", line 73: error, F is not a function value
"componentlist_meta.g", line 73: warning, operand to .vector_double is not a rec
ord
"componentlist_meta.g", line 200: warning, .scalarmeasure is not a field in [exi
"componentlist_meta.g", line 200: error, F is not a function value
Problems with imageservertest: -- Notify nkilleen
Test 18 - hanning
Creating image 'imagetest_temp/shapetoimage.image' of shape [10, 20]
Given region object is invalid
Starting image::hanning
Specified axis of 20is greater than input image dimension of 2
Caught an exception! Event type=run exception=Mon Nov 22 11:07:46 1999 SEVERE
image::hanning(...) (file /aips++/daily/code/trial/implement/Images/DOimage2.cc
, line 1707) ObjectID=[sequence=871 host=charybdis pid=5787 time=943268865]:
Specified axis of 20is greater than input image dimension of 2
Method hanning fails!
Parameter drop cannot convert between numbers and strings
Method hanning fails!
...
Test 27 - GUIS: momentsgui, sepconvolvegui, maskhandlergui, view
Converting pixels array to float type
Caught an exception! Event type=create exception=Invalid Table operation: SetupN
ewTable imagetest_temp/arraytoimage1.image is already opened (is in the table ca
che)
arraytoimage constructor 1 failed
"assay.g", line 69: warning, .message is not a field in [file=imageservertest.g,
line=4519, stack=. . . eval imagetest imageservertest]
imagetest fails: F
"assay.g", line 70: warning, .message is not a field in [file=imageservertest.g,
line=4519, stack=. . . eval imagetest imageservertest]
"assay.g", line 81: error, types are incompatible
assay() still returns 0 fails despite problems
Unit Testing:
Test/Trial results summary
linux_egcs test results -- socorro sneffels
OK
sun4sol_egcs test results -- socorro tarzan
OK
sun4sol_egcs trial results -- socorro tarzan
Problems: Notify aips2-modulebosses, tcornwel, nkilleen
Summary of /aips++/daily sun4sol_egcs socorro tarzan runtests 13.172
******************************************************************************
Test results for trial package
77.6% Passed 121 of 156 (2 skipped)
******************************************************************************
Tests that failed to compile
trial-Coordinates-test tTabularCoordina 13.172 1999/11/19 14:31:00 FAIL (compile)
trial-Display-test dPSLatticeAsRast 13.172 1999/11/19 14:31:18 FAIL (compile)
trial-DisplayDatas-test dLatticeAsRaster 13.172 1999/11/19 14:32:32 FAIL (compile)
trial-DisplayDatas-test tArrayAsRaster 13.172 1999/11/19 14:32:43 FAIL (compile)
trial-Fitting-test tLinearFitSVD 13.172 1999/11/19 14:35:18 FAIL (compile)
trial-Graphics-test tArrayBrowser 13.172 1999/11/19 14:35:59 FAIL (compile)
trial-IO-test tTapeIO 13.172 1999/11/19 14:36:03 FAIL (compile)
trial-Lattices-test dLatticeStatisti 13.172 1999/11/19 14:43:59 FAIL (compile)
trial-MeasurementCompon KnownAlgorithms 13.172 1999/11/19 15:06:59 FAIL (compile)
trial-MeasurementCompon tAlgoPClark 13.172 1999/11/19 15:07:10 FAIL (compile)
trial-MeasurementCompon tBeamSquint 13.172 1999/11/19 15:07:14 FAIL (compile)
trial-MeasurementEquati dCEMemModel 13.172 1999/11/19 15:08:47 FAIL (compile)
trial-MeasurementEquati dClarkCleanModel 13.172 1999/11/19 15:08:51 FAIL (compile)
trial-MeasurementEquati tCCList 13.172 1999/11/19 15:08:54 FAIL (compile)
trial-MeasurementEquati tCEMemModel 13.172 1999/11/19 15:09:00 FAIL (compile)
trial-MeasurementEquati tClarkCleanLatMo 13.172 1999/11/19 15:09:05 FAIL (compile)
trial-MeasurementEquati tClarkCleanModel 13.172 1999/11/19 15:09:11 FAIL (compile)
trial-MeasurementEquati tConvEqnMask 13.172 1999/11/19 15:09:15 FAIL (compile)
trial-MeasurementEquati tConvEqnStokes 13.172 1999/11/19 15:09:20 FAIL (compile)
trial-MeasurementEquati tConvolutionEqua 13.172 1999/11/19 15:09:24 FAIL (compile)
trial-MeasurementEquati tHogbomCleanMask 13.172 1999/11/19 15:09:28 FAIL (compile)
trial-MeasurementEquati tHogbomCleanMode 13.172 1999/11/19 15:09:32 FAIL (compile)
trial-MeasurementEquati tHogbomCleanStok 13.172 1999/11/19 15:09:37 FAIL (compile)
trial-MeasurementEquati tLatConvEquation 13.172 1999/11/19 15:09:44 FAIL (compile)
trial-MeasurementEquati tStokesUtil 13.172 1999/11/19 15:09:51 FAIL (compile)
trial-MeasurementEquati tVisibilityItera 13.172 1999/11/19 15:10:01 FAIL (compile)
trial-MeasurementSets-t tMSMainBuffer 13.172 1999/11/19 15:10:17 FAIL (compile)
trial-MeasurementSets-t tMSRange 13.172 1999/11/19 15:10:22 FAIL (compile)
trial-MeasurementSets-t tMSSelector 13.172 1999/11/19 15:10:35 FAIL (compile)
trial-MeasurementSets-t tMSSimulator 13.172 1999/11/19 15:10:45 FAIL (compile)
trial-Tasking-test testServer 13.172 1999/11/19 15:13:15 FAIL (compile)
Tests that failed to execute
trial-Display-test dRGBWCRaster 13.172 1999/11/19 14:31:41 FAIL (execute)
trial-Lattices-test tLatticeConvolve 13.172 1999/11/19 14:56:27 FAIL (execute)
Tests that failed to verify
trial-Coordinates-test dCoordinates 13.172 1999/11/19 14:28:11 FAIL (verify)
trial-Lattices-test tLEL 13.172 1999/11/19 14:54:07 FAIL (verify)
Tests that were skipped
trial-Fitting-test tLinearFitConstr 13.172 1999/11/19 14:35:13 UNTESTED
trial-Images-test dPagedImage 13.172 1999/11/19 14:38:12 UNTESTED
*****************************************************************
Details tests that had execution failures
*****************************************************************
*****************************************************************
dRGBWCRaster -- report
*****************************************************************
dRGBWCRaster-execute> Error: Can't open display:
dRGBWCRaster-execute> FAIL (execution failure): dRGBWCRaster
*****************************************************************
tLatticeConvolve -- report
*****************************************************************
nawk: can't open file /aips++/daily/sun4sol_egcs/bintest/tLatticeConvolve.report
source line number 1
*****************************************************************
Details tests that had verify failures
*****************************************************************
*****************************************************************
dCoordinates -- report
*****************************************************************
dCoordinates-verify> 4c4
dCoordinates-verify> < Expected error: Stokes value XX is not found on any axis position
dCoordinates-verify> ---
dCoordinates-verify> > Expected error: Stokes value 9 is not found on any axis position
dCoordinates-verify> FAIL (output not verified): dCoordinates
*****************************************************************
tLEL -- report
*****************************************************************
tLEL-verify> 382c382
tLEL-verify> < Caught expected exception; message is: LELFunctionBool::eval - unknown function
tLEL-verify> ---
tLEL-verify> > Caught expected exception; message is: LELFunctionBool::eval - cannot be used
tLEL-verify> 384c384
tLEL-verify> < Caught expected exception; message is: LELFunctionBool::eval - unknown function
tLEL-verify> ---
tLEL-verify> > Caught expected exception; message is: LELFunctionBool::eval - cannot be used
tLEL-verify> FAIL (output not verified): tLEL
Release testing log for RedHat 6.0
----------------------------------
a) Use pristine machines
------------------------
Used:
bonzo.aoc.nrao.edu, recently upgraded to RH6.0 (somewhat pristine).
voyager.aoc.nrao.edu, used for build (not pristine at all).
b) Run from CDROM (including GUI tests, eg. toolmanager)
--------------------------------------------------------
Problems:
1) On bonzo, reports:
"<fail>: tab tk_load event: couldn't load file ../gPgplot.so.5
undefined symbol getenv_
later: : "glish.eval" warning: uninitialized global var.
pgplot used.
pgplotter() is not functional.
Note: bonzo has /usr/lib/libpgplot.so.5 from rpm pgplot-5.2.0-3u,
"ldd imager" indicates it is linked against /usr/lib/libpgplot.so.5.
Not seen on voyager, which has pgplot-5.2.0-8u.
2) Global function windows in the toolmanager do not dismiss or disappear
on termination.
3) tablebrowser reported tableserver.g (locking) errors on startup
from the catalog, when examining 3C273XC1.ms. Not fully functional
after that. Not seen on voyager - could be a simple locking error
in previous application that was run.
4) assay().trytests() completes with zero, but there are imageserver
errors.
In /home/maser2/aips++/system/release-1.2.3/assay.cdrom.{voyager|bonzo}.
c) Run from disk installation
-----------------------------
Problems:
1) $a_root is not unset. Startup aipsinit.csh retain CDROM $AIPSPATH
in error.
2) Same pgplot errors as when running from the CDROM directly.
3) assay().trytests() completes with zero, but there are imageserver
problems.
In /home/maser2/aips++/system/release-1.2.3/assay.disk.{voyager|bonzo}.
d) Assay()
---------
See (a) and (b).
e) htdig check
--------------
Not done.
f) Standardized walk-through of documentation links
---------------------------------------------------
Problems:
1) recipes links yield directory listings.
2) programmer documentation in aips has wrong links (not found);
eg. Array or Vector.
3) "Return to AIPS++ Home page" link at the bottom of each
User Ref. Man page returns the user to a directory listing.
g) Release notes
----------------
No problems found with readme.html.
h) CDROM label and cover information
------------------------------------
Not included with this CDROM.
i) Verify advertised patches
----------------------------
Checked: calibrater_meta.g ok
cookbook ok
calibrater::fluscale() ok
--------------------------------------------------------------------------
---------------------------------------------------------------------- AIPS PACKAGE (Jun 99) ---------------------------------------------------------------------- LIBRARY: Arrays: Ger gvd@nfra.nl Containers: Darrell dschieb@nrao.edu Deconvolution: Ralph rmarson@nrao.edu Exceptions: Darrell FITS: Bob bgarwood@nrao.edu Functionals: Ralph Glish: Darrell Graphics: David dbarnes@atnf.csiro.au Guiutils: Bob IO: Ger Images: Neil Inputs: Ger Lattices: Ger Logging: Ger Mathematics: Ralph MeasurementSets: MarkW mwiering@atnf.csiro.au Measures: Wim Wim.Brouw@csiro.au OS: Ger Quanta: Wim RTTI: Darrell Tables: Ger Tasking: Darrell Utilities: Ger APPS: gtable Ger ---------------------------------------------------------------------- TRIAL PACKAGE (Jun 99) Module bosses are NOT allocated for the trial package. Instead the authors of the code are responsible for the code. If the author cannot support the code eg., because they have left the project, then the code is marked as unsupported. Unsupported code may be deleted if it is not widely used. Otherwise a foster parent will have to be found. ---------------------------------------------------------------------- LIBRARY: Arrays: MatrixSolver Tim Cornwell NNLSMatrixSolver Tim Cornwell RigidVector Mark Wieringa SquareMatrix Mark Wieringa ComponentModels: All classes Ralph Marson Containers: HashMap* Darrell Schiebel RecordField*Writer Bob Garwood Coordinates: All classes Neil Killeen Datalinetool: All classes Ger van Diepen Display: All classes David Barnes DisplayCanvas: All classes David Barnes DisplayDatas: All classes David Barnes DisplayEvents: All classes David Barnes FITS All classes David Barnes Fitting: All classes Wim Brouw Functionals: Algorithm Wes Young Applicator Wes Young All other classes Ralph Marson Graphics: All classes David Barnes Guiutils: aipsbrowser Wes Young bug Wes Young choice David Barnes displaylist* Joe McMullin displaytext Ger van Diepen filterlistbox Jow McMullin fontchooser Wes Young guicomponents Wes Young guiframework Wes Young guiutils Wes Young inputbox Tim Cornwell inputframe Wes Young oldcombobox Bob Garwood pgplotter* Jow McMullin popuphelp Wim Brouw recordbrowser Wes Young IO TapeIO Ralph Marson Images: All classes Ger van Diepen Lattices: All classes Ger van Diepen Mathematics: AutoDiff* Ralph Marson ConvolveGridder Tim Cornwell DO* Ralph Marson Gridder Tim Cornwell HistAcc Ralph Marson Interpolate1DArray Mark Wieringa NNGridder Tim Cornwell SCSL Doug Roberts StatAcc Ralph Marson VectorKernel Neil Killeen VectorPool Ralph Marson fftserver Ralph Marson gaussian Ralph Marson interpolat_1d Ralph Marson lsfit Jan Noordam matrix Jan Noordam polyfitter Ralph Marson randomnumbers Ralph Marson ranges Bob Garwood sinusoidfitter Ralph Marson statistics Ralph Marson MeasurementComponents: All classes Tim Cornwell MeasurementEquations: All classes Tim Cornwell MeasurementSets: MS*Buffer* classes Ralph Marson MSSummary Peter Barnes MSLister Peter Barnes All other classes Mark Wieringa Measures: All classes Wim Brouw OS: Modcomp* Ralph Marson Parallel: All classes Wes Young Quanta: All classes Wim Brouw SDCalibration: All classes Bob Garwood SDIterators: All classes Bob Garwood Simulators: All classes Tim Cornwell TableMeasures: All classes Ger van Diepen Tasking: All classes Darrell Schiebel Utilities: aips++ Tim Cornwell aips++init.g Tim Cornwell assay Tim Cornwell defaultattributes Ralph Marson demonstration Tim Cornwell edit Tim Cornwell finclude Tim Cornwell gmisc Bob Garwood itemcontainer Neil Killeen note Bob Garwood plugins Tim Cornwell serverexists Neil Killeen sh Tim Cornwell stopwatch Tim Cornwell substitute Ger van Diepen Widgets: All classes David Barnes APPS aips2help Wes Young aipstask Athol Kemball aipsview Harold Ravlin apputil Empty aserver4mpi Wes Young calibrator Athol Kemball catalog Tim Cornwell componentlist Ralph Marson datalinetool Jan Noordam deconvolver Mark Holdaway dish Bob Garwood dishplot Joe McMullin duplicates Wim Brouw fits2ms Bob Garwood fits2table Bob Garwood gDisplay David Barnes gcatalog Tim Cornwell gfitgauss Bob Garwood gplot1d Joe McMullin gtablebrowser Wes Young guimisc Wes Young image Neil Killeen imager Tim Cornwell measures Wim Brouw misc Wes Young ms Mark Wieringa ms2fits Bob Garwood ms2sdfits Bob Garwood numerics Ralph Marson pimager Wes Young plotter Joe McMullin quanta Wim Brouw reident Wim Brouw sdfits2ms Bob Garwood sditerator Bob Garwood simpleimage Tim Cornwell simulator Tim Cornwell table Ger van Diepen unused Wim Brouw used Wim Brouw viewer David Barnes visplot Tim Cornwell