* fix StrBufIsNumber; its not used right now, but it should be sane ;-)
authorWilfried Göesgens <willi@citadel.org>
Tue, 15 Dec 2009 20:27:01 +0000 (20:27 +0000)
committerWilfried Göesgens <willi@citadel.org>
Tue, 15 Dec 2009 20:27:01 +0000 (20:27 +0000)
* add more tests

libcitadel/lib/stringbuf.c
libcitadel/tests/stringbuf_test.c

index ba0b94e187d36c252fa88d8df6ad91e88a195b4c..c882189c9a60b2ea0f17684723f2cddf6efb6644 100644 (file)
@@ -30,22 +30,22 @@ int BaseStrBufSize = 64;
 const char *StrBufNOTNULL = ((char*) NULL) - 1;
 
 const char HexList[256][3] = {
-"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
-"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
-"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
-"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
-"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
-"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
-"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
-"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
-"80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
-"90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
-"A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
-"B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
-"C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
-"D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
-"E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
-"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"};
+       "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
+       "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
+       "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
+       "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
+       "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
+       "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
+       "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
+       "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
+       "80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
+       "90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
+       "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
+       "B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
+       "C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
+       "D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
+       "E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
+       "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"};
 
 /**
  * @defgroup StrBuf Stringbuffer, A class for manipulating strings with dynamic buffers
@@ -407,7 +407,7 @@ StrBuf* NewStrBufPlain(const char* ptr, int nChars)
 
        dbg_Init(NewBuf)
 
-       return NewBuf;
+               return NewBuf;
 }
 
 /**
@@ -599,17 +599,22 @@ int StrToi(const StrBuf *Buf)
 /**
  * @ingroup StrBuf
  * @brief Checks to see if the string is a pure number 
+ * @param Buf The buffer to inspect
+ * @returns 1 if its a pure number, 0, if not.
  */
 int StrBufIsNumber(const StrBuf *Buf) {
-  char * pEnd;
-  if (Buf == NULL) {
+       char * pEnd;
+       if ((Buf == NULL) || (Buf->BufUsed == 0)) {
+               return 0;
+       }
+       strtoll(Buf->buf, &pEnd, 10);
+       if (pEnd == Buf->buf)
+               return 0;
+       if ((pEnd != NULL) && (pEnd == Buf->buf + Buf->BufUsed))
+               return 1;
+       if (Buf->buf == pEnd)
+               return 0;
        return 0;
-  }
-  strtoll(Buf->buf, &pEnd, 10);
-  if (pEnd == NULL && ((Buf->buf)-pEnd) != 0) {
-    return 1;
-  }
-  return 0;
 } 
 /**
  * @ingroup StrBuf
index d98c00e7cfc69b46fc2ca675e8243ba8e1e7af9a..51e5f6678316ff1fa0b8b9a3761273df5f13d22a 100644 (file)
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+#define SHOW_ME_VAPPEND_PRINTF
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stdarg.h>
 
 #include "stringbuf_test.h"
 #include "../lib/libcitadel.h"
 
 
+/*
+ * Stolen from wc_printf; we need to test that other printf too... 
+ */
+static void TEST_StrBufAppendPrintf(StrBuf *WBuf, const char *format,...)
+{
+       va_list arg_ptr;
+
+       if (WBuf == NULL)
+               return;
+
+       va_start(arg_ptr, format);
+       StrBufVAppendPrintf(WBuf, format, arg_ptr);
+       va_end(arg_ptr);
+}
+
 static void TestRevalidateStrBuf(StrBuf *Buf)
 {
        CU_ASSERT(strlen(ChrPtr(Buf)) == StrLength(Buf));
@@ -36,6 +53,7 @@ static void TestCreateBuf(void)
 {
        StrBuf *Buf;
        StrBuf *Buf2;
+       StrBuf *Buf3;
        long len;
        long i;
        char *ch;
@@ -93,6 +111,21 @@ static void TestCreateBuf(void)
        TestRevalidateStrBuf(Buf);
        StrBufShrinkToFit(Buf, 1);
        TestRevalidateStrBuf(Buf);
+       FreeStrBuf(&Buf);
+
+       Buf = NewStrBufPlain(HKEY("ABC"));
+       TestRevalidateStrBuf(Buf);
+       len = StrLength(Buf);
+       for (i=0; i< 500; i ++)
+       {
+               TEST_StrBufAppendPrintf(Buf, "%s", "ABC");
+               len += 3;
+               CU_ASSERT(StrLength(Buf) == len);               
+       }
+       TestRevalidateStrBuf(Buf);
+       StrBufShrinkToFit(Buf, 1);
+       TestRevalidateStrBuf(Buf);
+
 
        Buf2 = NewStrBufDup(Buf);
        CU_ASSERT(StrLength(Buf) == StrLength(Buf2));           
@@ -107,17 +140,20 @@ static void TestCreateBuf(void)
        FLUSHStrBuf(Buf);
        CU_ASSERT(StrLength(Buf) == 0);
 
-       FreeStrBuf(&Buf);
+       HFreeStrBuf(NULL);
        HFreeStrBuf(Buf2);
-       CU_ASSERT(Buf == NULL);
        CU_ASSERT(Buf2 != NULL);
 
-
+       FreeStrBuf(&Buf);
+       CU_ASSERT(Buf == NULL);
+       
        Buf2 = NewStrBuf();
+       Buf3 = NewStrBufPlain(HKEY("abcd"));
        Buf = NewStrBufPlain(HKEY("123456"));
-       CU_ASSERT(StrBufIsNumber(Buf) == 1); ///Todo: this is buggy.
+       CU_ASSERT(StrBufIsNumber(Buf) == 1);
        CU_ASSERT(StrBufIsNumber(NULL) == 0);
        CU_ASSERT(StrBufIsNumber(Buf2) == 0);
+       CU_ASSERT(StrBufIsNumber(Buf3) == 0);
 
        CU_ASSERT(StrTol(Buf) == 123456);
        CU_ASSERT(StrTol(NULL) == 0);