4898794edd81be5285ea6e544acbedeaeb31bf78 max Tue Nov 23 08:10:57 2021 -0800 Fixing pointers to README file for license in all source code files. refs #27614 diff --git src/hg/lib/tests/binTest.c src/hg/lib/tests/binTest.c index 3c06a8f..91925e0 100644 --- src/hg/lib/tests/binTest.c +++ src/hg/lib/tests/binTest.c @@ -1,334 +1,334 @@ /* binTest - test bin functionality */ /* Copyright (C) 2011 The Regents of the University of California - * See README in this or parent directory for licensing information. */ + * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #include "common.h" #include "options.h" #include "obscure.h" #include "jksql.h" #include "dystring.h" #include "hdb.h" #include "binRange.h" static boolean newStyle = FALSE; /* check new style range*/ static boolean oldStyle = FALSE; /* check old style range*/ static boolean sqlOnly = FALSE; /* only check SQL statements */ static boolean binOnly = FALSE; /* check only binRange results */ static int testStart = 0; /* for a single test of one coordinate range */ static int testEnd = 0; /* for a single test of one coordinate range */ static int failureCount = 0; /* cumulative count of all errors */ static struct optionSpec optionSpecs[] = { {"newStyle", OPTION_BOOLEAN}, {"oldStyle", OPTION_BOOLEAN}, {"sqlOnly", OPTION_BOOLEAN}, {"binOnly", OPTION_BOOLEAN}, {"start", OPTION_INT}, {"end", OPTION_INT}, {NULL, 0} }; void usage() /* Explain usage and exit. */ { errAbort("usage: binTest [options]\n" "options:\n" "\t-newStyle - exercise expanded bin scheme over 512M\n" "\t-oldStyle - exercise standard bin scheme up to 512M\n" "\t-sqlOnly - exercise only the sql statements\n" "\t-binOnly - exercise only the bin scheme\n" "\t-start=N -end=M - single check of coordinates N-M\n" "\t-verbose=2 - display errors if any\n" "\t-verbose=3 - more information on tests being performed"); } static char *expectedOldSql[] = { "(bin>=585 and bin<=4680 or bin>=73 and bin<=584 or bin>=9 and bin<=72 or bin>=1 and bin<=8 or bin=0 or bin=4681 ) and ", "(bin>=585 and bin<=1096 or bin>=73 and bin<=136 or bin>=9 and bin<=16 or bin=1 or bin=0 or bin=4681 ) and ", "(bin>=1097 and bin<=1608 or bin>=137 and bin<=200 or bin>=17 and bin<=24 or bin=2 or bin=0 or bin=4681 ) and ", "(bin>=1609 and bin<=2120 or bin>=201 and bin<=264 or bin>=25 and bin<=32 or bin=3 or bin=0 or bin=4681 ) and ", "(bin>=2121 and bin<=2632 or bin>=265 and bin<=328 or bin>=33 and bin<=40 or bin=4 or bin=0 or bin=4681 ) and ", "(bin>=2633 and bin<=3144 or bin>=329 and bin<=392 or bin>=41 and bin<=48 or bin=5 or bin=0 or bin=4681 ) and ", "(bin>=3145 and bin<=3656 or bin>=393 and bin<=456 or bin>=49 and bin<=56 or bin=6 or bin=0 or bin=4681 ) and ", "(bin>=3657 and bin<=4168 or bin>=457 and bin<=520 or bin>=57 and bin<=64 or bin=7 or bin=0 or bin=4681 ) and ", "(bin>=4169 and bin<=4680 or bin>=521 and bin<=584 or bin>=65 and bin<=72 or bin=8 or bin=0 or bin=4681 ) and ", "(bin>=585 and bin<=648 or bin>=73 and bin<=80 or bin=9 or bin=1 or bin=0 or bin=4681 ) and ", "(bin>=1097 and bin<=1160 or bin>=137 and bin<=144 or bin=17 or bin=2 or bin=0 or bin=4681 ) and ", "(bin>=1609 and bin<=1672 or bin>=201 and bin<=208 or bin=25 or bin=3 or bin=0 or bin=4681 ) and ", "(bin>=2121 and bin<=2184 or bin>=265 and bin<=272 or bin=33 or bin=4 or bin=0 or bin=4681 ) and ", "(bin>=2633 and bin<=2696 or bin>=329 and bin<=336 or bin=41 or bin=5 or bin=0 or bin=4681 ) and ", "(bin>=3145 and bin<=3208 or bin>=393 and bin<=400 or bin=49 or bin=6 or bin=0 or bin=4681 ) and ", "(bin>=3657 and bin<=3720 or bin>=457 and bin<=464 or bin=57 or bin=7 or bin=0 or bin=4681 ) and ", "(bin>=4169 and bin<=4232 or bin>=521 and bin<=528 or bin=65 or bin=8 or bin=0 or bin=4681 ) and ", "(bin>=4617 and bin<=4680 or bin>=577 and bin<=584 or bin=72 or bin=8 or bin=0 or bin=4681 ) and ", "(bin>=585 and bin<=592 or bin=73 or bin=9 or bin=1 or bin=0 or bin=4681 ) and ", "(bin>=1097 and bin<=1104 or bin=137 or bin=17 or bin=2 or bin=0 or bin=4681 ) and ", "(bin>=1609 and bin<=1616 or bin=201 or bin=25 or bin=3 or bin=0 or bin=4681 ) and ", "(bin>=2121 and bin<=2128 or bin=265 or bin=33 or bin=4 or bin=0 or bin=4681 ) and ", "(bin>=2633 and bin<=2640 or bin=329 or bin=41 or bin=5 or bin=0 or bin=4681 ) and ", "(bin>=3145 and bin<=3152 or bin=393 or bin=49 or bin=6 or bin=0 or bin=4681 ) and ", "(bin>=3657 and bin<=3664 or bin=457 or bin=57 or bin=7 or bin=0 or bin=4681 ) and ", "(bin>=4169 and bin<=4176 or bin=521 or bin=65 or bin=8 or bin=0 or bin=4681 ) and ", "(bin>=4673 and bin<=4680 or bin=584 or bin=72 or bin=8 or bin=0 or bin=4681 ) and ", "(bin=585 or bin=73 or bin=9 or bin=1 or bin=0 or bin=4681 ) and ", "(bin=1097 or bin=137 or bin=17 or bin=2 or bin=0 or bin=4681 ) and ", "(bin=1609 or bin=201 or bin=25 or bin=3 or bin=0 or bin=4681 ) and ", "(bin=2121 or bin=265 or bin=33 or bin=4 or bin=0 or bin=4681 ) and ", "(bin=2633 or bin=329 or bin=41 or bin=5 or bin=0 or bin=4681 ) and ", "(bin=3145 or bin=393 or bin=49 or bin=6 or bin=0 or bin=4681 ) and ", "(bin=3657 or bin=457 or bin=57 or bin=7 or bin=0 or bin=4681 ) and ", "(bin=4169 or bin=521 or bin=65 or bin=8 or bin=0 or bin=4681 ) and ", "(bin=4680 or bin=584 or bin=72 or bin=8 or bin=0 or bin=4681 ) and " }; static char *expectedNewSql[] = { "(bin>=585 and bin<=4680 or bin>=73 and bin<=584 or bin>=9 and bin<=72 or bin>=1 and bin<=8 or bin=0 or bin>=9362 and bin<=25745 or bin>=5266 and bin<=7313 or bin>=4754 and bin<=5009 or bin>=4690 and bin<=4721 or bin>=4682 and bin<=4685 or bin=4681) and ", "(bin>=13458 and bin<=17553 or bin>=5778 and bin<=6289 or bin>=4818 and bin<=4881 or bin>=4698 and bin<=4705 or bin=4683 or bin=4681) and ", "(bin>=17554 and bin<=21649 or bin>=6290 and bin<=6801 or bin>=4882 and bin<=4945 or bin>=4706 and bin<=4713 or bin=4684 or bin=4681) and ", "(bin>=21650 and bin<=25745 or bin>=6802 and bin<=7313 or bin>=4946 and bin<=5009 or bin>=4714 and bin<=4721 or bin=4685 or bin=4681) and ", "(bin>=13458 and bin<=13969 or bin>=5778 and bin<=5841 or bin>=4818 and bin<=4825 or bin=4698 or bin=4683 or bin=4681) and ", "(bin>=17554 and bin<=18065 or bin>=6290 and bin<=6353 or bin>=4882 and bin<=4889 or bin=4706 or bin=4684 or bin=4681) and ", "(bin>=21650 and bin<=22161 or bin>=6802 and bin<=6865 or bin>=4946 and bin<=4953 or bin=4714 or bin=4685 or bin=4681) and ", "(bin>=25234 and bin<=25745 or bin>=7250 and bin<=7313 or bin>=5002 and bin<=5009 or bin=4721 or bin=4685 or bin=4681) and ", "(bin>=13458 and bin<=13521 or bin>=5778 and bin<=5785 or bin=4818 or bin=4698 or bin=4683 or bin=4681) and ", "(bin>=17554 and bin<=17617 or bin>=6290 and bin<=6297 or bin=4882 or bin=4706 or bin=4684 or bin=4681) and ", "(bin>=21650 and bin<=21713 or bin>=6802 and bin<=6809 or bin=4946 or bin=4714 or bin=4685 or bin=4681) and ", "(bin>=25682 and bin<=25745 or bin>=7306 and bin<=7313 or bin=5009 or bin=4721 or bin=4685 or bin=4681) and ", "(bin>=13458 and bin<=13465 or bin=5778 or bin=4818 or bin=4698 or bin=4683 or bin=4681) and ", "(bin>=17554 and bin<=17561 or bin=6290 or bin=4882 or bin=4706 or bin=4684 or bin=4681) and ", "(bin>=21650 and bin<=21657 or bin=6802 or bin=4946 or bin=4714 or bin=4685 or bin=4681) and ", "(bin>=25738 and bin<=25745 or bin=7313 or bin=5009 or bin=4721 or bin=4685 or bin=4681) and ", "(bin=13458 or bin=5778 or bin=4818 or bin=4698 or bin=4683 or bin=4681) and ", "(bin=17554 or bin=6290 or bin=4882 or bin=4706 or bin=4684 or bin=4681) and ", "(bin=21650 or bin=6802 or bin=4946 or bin=4714 or bin=4685 or bin=4681) and ", "(bin=25745 or bin=7313 or bin=5009 or bin=4721 or bin=4685 or bin=4681) and " }; static void testOneSql(int start, int end, char *expected) { struct dyString *sqlQuery; sqlQuery = newDyString(1024); hAddBinToQuery(start, end, sqlQuery); if (NULL != expected) if (differentString(sqlQuery->string,expected)) { verbose(2,"#\tERROR: SQL incorrect at (%d, %d)\n", start, end); ++failureCount; } verbose(3,"# (%d, %d):\nsql:\"%s\",\n", start, end, sqlQuery->string); freeDyString(&sqlQuery); } static void testOneBin(int start, int end, int expected) /* expected < 0 == do not check, do not know the answer */ { int bin; bin = binFromRange(start,end); if ((expected >= 0) && (expected != bin)) { verbose(2,"#\tERROR: expected: %d got: %d = binFromRange(%d, %d)\n", expected, bin, start, end); ++failureCount; } verbose(3,"#\t%5d = binFromRange(%d, %d)\n", bin, start, end); } static void standardBinScheme() { int maxEnd = 512*1024*1024; int end; int start; int binSize; int expect; int binCount = 0; int level = 0; if (! sqlOnly) { /* first check full range of scheme, should be bin 0 */ verbose(3,"#\ttop level, whole chromosome\n"); start = 0; end = maxEnd; expect = 0; testOneBin(start,end, expect); binCount += 1; for (level = 1; level < 5; ++level) { verbose(3,"#\tlevel %d of %d bins\n", level, 1 << (level*3)); binSize = maxEnd >> (level*3); for (start = 0; start < maxEnd; start += binSize << ((level-1)*3) ) { expect = (start / binSize) + binCount; end = start + binSize; testOneBin(start,end, expect); } if (level > 1) { /* plus the last one at this level (when more than 8) */ start = maxEnd - binSize; end = start + binSize; expect = (start / binSize) + binCount; testOneBin(start,end, expect); } binCount += 1 << (level*3); } } if (! binOnly) { int testCount = 0; /* first check full range of scheme, should be bin 0 */ verbose(3,"#\ttop level, whole chromosome\n"); start = 0; end = maxEnd; testOneSql(start,end, expectedOldSql[testCount++]); for (level = 1; level < 5; ++level) { verbose(3,"#\tlevel %d of %d bins\n", level, 1 << (level*3)); binSize = maxEnd >> (level*3); for (start = 0; start < maxEnd; start += binSize << ((level-1)*3) ) { end = start + binSize; testOneSql(start,end, expectedOldSql[testCount++]); } if (level > 1) { /* plus the last one at this level (when more than 8) */ start = maxEnd - binSize; end = start + binSize; testOneSql(start,end, expectedOldSql[testCount++]); } } } } /* static void standardBinScheme() */ static void expandedBinScheme() { int standardMaxEnd = 512*1024*1024; long long actualMaxEnd = 8LL*512LL*1024LL*1024LL; /* this is 2Gb, can not actually do 4 Gb */ int practicalMaxEnd = 0; int end; int start; long long binSize; int expect; int binCount = 0; int level = 0; int extendedOffset = 4681; practicalMaxEnd = (int)((actualMaxEnd >> 1) - 1L); verbose(3,"#\tpracticalMaxEnd: %d\n", practicalMaxEnd); binSize = actualMaxEnd; if (!sqlOnly) { /* first check full range of new scheme, should be bin extendedOffset */ verbose(3,"#\ttop level, whole chromosome, binSize: %lld\n", binSize); start = 0; end = practicalMaxEnd; expect = extendedOffset; testOneBin(start,end, expect); binCount += 1; for (level = 1; level < 6; ++level) { binSize = actualMaxEnd >> (level*3); verbose(3,"#\tlevel %d of %d bins, binSize: %lld\n", level, 1 << (level*3), binSize); for (start = standardMaxEnd; (start > 0) && (start < (int)((long long)practicalMaxEnd-binSize)); start += binSize << ((level-1)*3) ) { expect = (int)((long long)start / binSize) + binCount + extendedOffset; end = start + binSize; if (end >= practicalMaxEnd) break; testOneBin(start,end, expect); } /* plus the last one at this level */ start = practicalMaxEnd - binSize + 1; end = practicalMaxEnd; expect = (int)((long long)start / binSize) + binCount + extendedOffset; testOneBin(start,end, expect); binCount += 1 << (level*3); } } if (!binOnly) { int testCount = 0; binCount = 0; binSize = actualMaxEnd; /* first check full range of new scheme, should be bin extendedOffset */ verbose(3,"#\ttop level, whole chromosome, binSize: %lld\n", binSize); start = 0; end = practicalMaxEnd; expect = extendedOffset; testOneSql(start,end, expectedNewSql[testCount++]); binCount += 1; for (level = 1; level < 6; ++level) { binSize = actualMaxEnd >> (level*3); verbose(3,"#\tlevel %d of %d bins, binSize: %lld\n", level, 1 << (level*3), binSize); for (start = standardMaxEnd; (start > 0) && (start < (int)((long long)practicalMaxEnd-binSize)); start += binSize << ((level-1)*3) ) { expect = (int)((long long)start / binSize) + binCount + extendedOffset; end = start + binSize; if (end >= practicalMaxEnd) break; testOneSql(start,end, expectedNewSql[testCount++]); } /* plus the last one at this level */ start = practicalMaxEnd - binSize + 1; end = practicalMaxEnd; expect = (int)((long long)start / binSize) + binCount + extendedOffset; testOneSql(start,end, expectedNewSql[testCount++]); binCount += 1 << (level*3); } } } /* static void expandedBinScheme() */ int main(int argc, char *argv[]) { optionInit(&argc, argv, optionSpecs); newStyle = optionExists("newStyle"); oldStyle = optionExists("oldStyle"); sqlOnly = optionExists("sqlOnly"); binOnly = optionExists("binOnly"); testStart = optionInt("start",0); testEnd = optionInt("end",0); if ( ! (newStyle || oldStyle || (testEnd > 0)) ) usage(); if (testEnd > 0) { if (!sqlOnly) testOneBin(testStart, testEnd, -1); if (!binOnly) testOneSql(testStart, testEnd, NULL); } if (oldStyle) standardBinScheme(); if (newStyle) expandedBinScheme(); if (failureCount > 0) { printf("ERROR: hg/lib/tests/binTest failed %d tests\n", failureCount); return 255; } else return 0; }