Improve test coverage of util.c (CVS 1773)
FossilOrigin-Name: 68ac32213766c5e83de54373b90030a458538017
This commit is contained in:
parent
cc19587998
commit
9d213ef022
20
manifest
20
manifest
@ -1,5 +1,5 @@
|
||||
C Improved\stest\scoverage\sof\sfunc.c\sand\shash.c.\s(CVS\s1772)
|
||||
D 2004-06-30T03:08:25
|
||||
C Improve\stest\scoverage\sof\sutil.c\s(CVS\s1773)
|
||||
D 2004-06-30T04:02:12
|
||||
F Makefile.in cb7a9889c38723f72b2506c4236ff30a05ff172b
|
||||
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
|
||||
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
|
||||
@ -59,19 +59,19 @@ F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
|
||||
F src/select.c f02a65af34231031896e8442161cb5251e191e75
|
||||
F src/shell.c 24b641700c9d90f361fcfa4f432c5b4aff704e6d
|
||||
F src/sqlite.h.in b70fded2bdfeaddfb06adea3888118b722975136
|
||||
F src/sqliteInt.h 4f8d44f04cc51cb421bf3c195247353a5be2e98f
|
||||
F src/sqliteInt.h 9dcfcc67fc995b9079074d6b9619a1d4335583d0
|
||||
F src/table.c 4521c278892f60e4d630788c0ea5cf4db1e75c49
|
||||
F src/tclsqlite.c f72288553ca3cdaf686baab4b1797dd98140c501
|
||||
F src/test1.c 151df224f7202c2a0d907638f22ed4b0e2378ba9
|
||||
F src/test1.c ad2ae36959d6ac480f54b7e07d4baad8ee3b2e88
|
||||
F src/test2.c dafd8bd314a554bf376c6d3a8c83fd69219f5a40
|
||||
F src/test3.c 7163c577f1dd73ad4a1d3730ea6541af3274c964
|
||||
F src/test3.c d0c56667e89f79ad0f060fdf010d1c34a4bc2988
|
||||
F src/test4.c a921a69821fd30209589228e64f94e9f715b6fe2
|
||||
F src/test5.c b001fa7f1b9e2dc5c2331de62fc641b5ab2bd7a1
|
||||
F src/tokenize.c 900374b6b37f04748bcd48c2d29a41c251542935
|
||||
F src/trigger.c 6aaf6d79cc2157c70a06031dd1531707d644cfb4
|
||||
F src/update.c b66b1896c9da54678ba3eff2bf0b4d291a95986a
|
||||
F src/utf.c f03535db72bfa09e24202ccdd245f21d2fc65f0a
|
||||
F src/util.c 94796d2b31600beee7de426c3946022ef3508d46
|
||||
F src/util.c b267d0fe10cffa3301fe9fab6592a6808a38bce6
|
||||
F src/vacuum.c 353c7f69dbeb6738434d81798465cc0698844640
|
||||
F src/vdbe.c 32039b08701f1c19fcd9b684366cefaa8fabaa72
|
||||
F src/vdbe.h 75b241c02431b9c0f16eaa9cdbb34146c6287f52
|
||||
@ -120,7 +120,7 @@ F test/index.test b6941dd532815f278042b85f79b1a6dc16c4d729
|
||||
F test/insert.test ebbab63db4ad69395a058514bccb3cdb0a029d48
|
||||
F test/insert2.test ea5d4f8dcbc68d8ad85eaa5f03d9812757610f90
|
||||
F test/interrupt.test 9142ce4448605127640eda5e283952f75f67ed91
|
||||
F test/intpkey.test 8b9590b2db07696e73381da4df6c40ef10436d73
|
||||
F test/intpkey.test c8efd06db62b8b27216558ef439cc867d113cfec
|
||||
F test/ioerr.test 7d087bfd1a1a53442940e000df936e0df0c5b886
|
||||
F test/join.test 9ef6aabaac9de51d5fc41e68d1f4355da05a84cd
|
||||
F test/join2.test c97e4c5aa65dea462145529e58212a709b4722b8
|
||||
@ -232,7 +232,7 @@ F www/tclsqlite.tcl 19191cf2a1010eaeff74c51d83fd5f5a4d899075
|
||||
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
|
||||
F www/version3.tcl 563ba3ac02f64da27ab17f3edbe8e56bfd0293fb
|
||||
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
|
||||
P e5e39764038311cbb3555b5bd41de2563a89113e
|
||||
R 6128bf7e6957bc36be00e553f4313e2a
|
||||
P 0c999f28137bd82ba24dd263bab30d22329eed73
|
||||
R aac9bef2959b49a3b21126dff36eb51a
|
||||
U drh
|
||||
Z 6dcdf7a54d5c2b70e5fcf38318bf29ad
|
||||
Z d9d34e7eed57c4c6a384e0a609787172
|
||||
|
@ -1 +1 @@
|
||||
0c999f28137bd82ba24dd263bab30d22329eed73
|
||||
68ac32213766c5e83de54373b90030a458538017
|
@ -11,7 +11,7 @@
|
||||
*************************************************************************
|
||||
** Internal interface definitions for SQLite.
|
||||
**
|
||||
** @(#) $Id: sqliteInt.h,v 1.303 2004/06/29 08:59:35 danielk1977 Exp $
|
||||
** @(#) $Id: sqliteInt.h,v 1.304 2004/06/30 04:02:12 drh Exp $
|
||||
*/
|
||||
#ifndef _SQLITEINT_H_
|
||||
#define _SQLITEINT_H_
|
||||
@ -1338,7 +1338,6 @@ int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
|
||||
double sqlite3AtoF(const char *z, const char **);
|
||||
char *sqlite3_snprintf(int,char*,const char*,...);
|
||||
int sqlite3GetInt32(const char *, int*);
|
||||
int sqlite3GetInt64(const char *, i64*);
|
||||
int sqlite3FitsIn64Bits(const char *);
|
||||
int sqlite3utf16ByteLen(const void *pData, int nChar);
|
||||
int sqlite3utf8CharLen(const char *pData, int nByte);
|
||||
|
14
src/test1.c
14
src/test1.c
@ -13,7 +13,7 @@
|
||||
** is not included in the SQLite library. It is used for automated
|
||||
** testing of the SQLite library.
|
||||
**
|
||||
** $Id: test1.c,v 1.90 2004/06/29 13:18:24 danielk1977 Exp $
|
||||
** $Id: test1.c,v 1.91 2004/06/30 04:02:12 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include "tcl.h"
|
||||
@ -540,6 +540,18 @@ static int sqlite3_mprintf_int(
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
** If zNum represents an integer that will fit in 64-bits, then set
|
||||
** *pValue to that integer and return true. Otherwise return false.
|
||||
*/
|
||||
static int sqlite3GetInt64(const char *zNum, i64 *pValue){
|
||||
if( sqlite3FitsIn64Bits(zNum) ){
|
||||
sqlite3atoi64(zNum, pValue);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** Usage: sqlite3_mprintf_int64 FORMAT INTEGER INTEGER INTEGER
|
||||
**
|
||||
|
19
src/test3.c
19
src/test3.c
@ -13,7 +13,7 @@
|
||||
** is not included in the SQLite library. It is used for automated
|
||||
** testing of the SQLite library.
|
||||
**
|
||||
** $Id: test3.c,v 1.47 2004/06/30 02:35:51 danielk1977 Exp $
|
||||
** $Id: test3.c,v 1.48 2004/06/30 04:02:12 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include "pager.h"
|
||||
@ -1279,6 +1279,23 @@ static int btree_varint_test(
|
||||
Tcl_AppendResult(interp, zErr, 0);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if( (in & 0xffffffff)==in ){
|
||||
u32 out32;
|
||||
n2 = sqlite3GetVarint32(zBuf, &out32);
|
||||
out = out32;
|
||||
if( n1!=n2 ){
|
||||
sprintf(zErr, "PutVarint returned %d and GetVarint32 returned %d",
|
||||
n1, n2);
|
||||
Tcl_AppendResult(interp, zErr, 0);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if( in!=out ){
|
||||
sprintf(zErr, "Wrote 0x%016llx and got back 0x%016llx from GetVarint32",
|
||||
in, out);
|
||||
Tcl_AppendResult(interp, zErr, 0);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
/* In order to get realistic timings, run getVarint 19 more times.
|
||||
** This is because getVarint is called about 20 times more often
|
||||
|
71
src/util.c
71
src/util.c
@ -14,7 +14,7 @@
|
||||
** This file contains functions for allocating memory, comparing
|
||||
** strings, and stuff like that.
|
||||
**
|
||||
** $Id: util.c,v 1.108 2004/06/30 02:35:51 danielk1977 Exp $
|
||||
** $Id: util.c,v 1.109 2004/06/30 04:02:12 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include <stdarg.h>
|
||||
@ -762,18 +762,6 @@ int sqlite3FitsIn64Bits(const char *zNum){
|
||||
return i<19 || (i==19 && memcmp(zNum,"9223372036854775807",19)<=0);
|
||||
}
|
||||
|
||||
/*
|
||||
** If zNum represents an integer that will fit in 64-bits, then set
|
||||
** *pValue to that integer and return true. Otherwise return false.
|
||||
*/
|
||||
int sqlite3GetInt64(const char *zNum, i64 *pValue){
|
||||
if( sqlite3FitsIn64Bits(zNum) ){
|
||||
sqlite3atoi64(zNum, pValue);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 1 /* We are now always UTF-8 */
|
||||
/*
|
||||
** X is a pointer to the first byte of a UTF-8 character. Increment
|
||||
@ -1112,17 +1100,8 @@ int sqlite3GetVarint32(const unsigned char *p, u32 *v){
|
||||
*v = (x<<7) | c;
|
||||
return 2;
|
||||
}
|
||||
x = (x<<7) | (c&0x7f);
|
||||
if( ((c = p[2]) & 0x80)==0 ){
|
||||
*v = (x<<7) | c;
|
||||
return 3;
|
||||
}
|
||||
x = (x<<7) | (c&0x7f);
|
||||
if( ((c = p[3]) & 0x80)==0 ){
|
||||
*v = (x<<7) | c;
|
||||
return 4;
|
||||
}
|
||||
n = 4;
|
||||
x = (x<<7) | (c & 0x7f);
|
||||
n = 2;
|
||||
do{
|
||||
x = (x<<7) | ((c = p[n++])&0x7f);
|
||||
}while( (c & 0x80)!=0 && n<9 );
|
||||
@ -1143,6 +1122,27 @@ int sqlite3VarintLen(u64 v){
|
||||
return i;
|
||||
}
|
||||
|
||||
/*
|
||||
** Translate a single byte of Hex into an integer.
|
||||
*/
|
||||
static int hexToInt(int h){
|
||||
if( h>='0' && h<='9' ){
|
||||
return h - '0';
|
||||
}else if( h>='a' && h<='f' ){
|
||||
return h - 'a' + 10;
|
||||
}else if( h>='A' && h<='F' ){
|
||||
return h - 'A' + 10;
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
|
||||
** value. Return a pointer to its binary value. Space to hold the
|
||||
** binary value has been obtained from malloc and must be freed by
|
||||
** the calling routine.
|
||||
*/
|
||||
void *sqlite3HexToBlob(const char *z){
|
||||
char *zBlob;
|
||||
int i;
|
||||
@ -1150,27 +1150,8 @@ void *sqlite3HexToBlob(const char *z){
|
||||
if( n%2 ) return 0;
|
||||
|
||||
zBlob = (char *)sqliteMalloc(n/2);
|
||||
|
||||
for(i=0; i<n; i++){
|
||||
u8 c;
|
||||
|
||||
if ( z[i]>47 && z[i]<58 ) c = (z[i]-48)<<4;
|
||||
else if( z[i]>64 && z[i]<71 ) c = (z[i]-55)<<4;
|
||||
else if( z[i]>96 && z[i]<103 ) c = (z[i]-87)<<4;
|
||||
else {
|
||||
sqliteFree(zBlob);
|
||||
return 0;
|
||||
}
|
||||
i++;
|
||||
if ( z[i]>47 && z[i]<58 ) c += (z[i]-48);
|
||||
else if( z[i]>64 && z[i]<71 ) c += (z[i]-55);
|
||||
else if( z[i]>96 && z[i]<103 ) c += (z[i]-87);
|
||||
else {
|
||||
sqliteFree(zBlob);
|
||||
return 0;
|
||||
}
|
||||
|
||||
zBlob[i/2] = c;
|
||||
for(i=0; i<n; i+=2){
|
||||
zBlob[i/2] = (hexToInt(z[i])<<4) | hexToInt(z[i+1]);
|
||||
}
|
||||
return zBlob;
|
||||
}
|
||||
|
@ -13,7 +13,7 @@
|
||||
# This file implements tests for the special processing associated
|
||||
# with INTEGER PRIMARY KEY columns.
|
||||
#
|
||||
# $Id: intpkey.test,v 1.17 2004/06/30 02:29:03 drh Exp $
|
||||
# $Id: intpkey.test,v 1.18 2004/06/30 04:02:12 drh Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
@ -511,6 +511,11 @@ do_test intpkey-13.4 {
|
||||
INSERT INTO t1 VALUES(x'123456',3,4);
|
||||
}
|
||||
} {1 {datatype mismatch}}
|
||||
do_test intpkey-13.5 {
|
||||
catchsql {
|
||||
INSERT INTO t1 VALUES('+1234567890',3,4);
|
||||
}
|
||||
} {0 {}}
|
||||
|
||||
|
||||
finish_test
|
||||
|
Loading…
x
Reference in New Issue
Block a user