bug fix for UsefulBuf_CopyOffset; complete tests for UsefulBuf
diff --git a/src/UsefulBuf.c b/src/UsefulBuf.c
index b64c0b5..c8e5d28 100644
--- a/src/UsefulBuf.c
+++ b/src/UsefulBuf.c
@@ -100,13 +100,14 @@
  */
 UsefulBufC UsefulBuf_CopyOffset(UsefulBuf Dest, size_t uOffset, const UsefulBufC Src)
 {
-    if(Src.len > Dest.len - uOffset) {
-        return NULLUsefulBufC;
-    }
+   // Do this with subtraction so it doesn't give erroneous result if uOffset + Src.len overflows
+   if(uOffset > Dest.len || Src.len > Dest.len - uOffset) { // uOffset + Src.len > Dest.len
+      return NULLUsefulBufC;
+   }
     
-    memcpy(Dest.ptr + uOffset, Src.ptr, Src.len);
+   memcpy(Dest.ptr + uOffset, Src.ptr, Src.len);
     
-    return((UsefulBufC){Dest.ptr, Src.len});
+   return((UsefulBufC){Dest.ptr, Src.len + uOffset});
 }
 
 
diff --git a/test/UsefulBuf_Tests.c b/test/UsefulBuf_Tests.c
index 05d04a2..f79c08c 100644
--- a/test/UsefulBuf_Tests.c
+++ b/test/UsefulBuf_Tests.c
@@ -64,7 +64,7 @@
  
    There is nothing adversarial in this test
  */
-const char * NonAdversarialUOBTest()
+const char * UOBTest_NonAdversarial()
 {
    const char *szReturn = NULL;
 
@@ -146,8 +146,6 @@
    
    // append the bytes
    UsefulOutBuf_AppendData(pUOB, (const uint8_t *)"bluster", num);
-      
-   // TODO: test UsefulOutBuf_AppendString
    
    // check error status after
    if(UsefulOutBuf_GetError(pUOB) != expected)
@@ -171,8 +169,6 @@
    
    UsefulOutBuf_InsertData(pUOB, (const uint8_t *)"bluster", num, pos);
    
-   // TODO: test UsefulOutBuf_InsertString
-   
    if(UsefulOutBuf_GetError(pUOB) != expected)
       return 1;
    
@@ -191,7 +187,7 @@
  
  */
 
-const char *BoundaryConditionsTest()
+const char *UOBTest_BoundaryConditionsTest()
 {
    UsefulBuf_MakeStackUB(outbuf,2);
    
@@ -238,9 +234,9 @@
    
    UsefulOutBuf_Reset(&UOB);
    // put data in the buffer
-   UsefulOutBuf_AppendData(&UOB, "abc123", 6);
+   UsefulOutBuf_AppendString(&UOB, "abc123");
    
-   UsefulOutBuf_InsertData(&UOB, "xyz*&^", 6, 0);
+   UsefulOutBuf_InsertString(&UOB, "xyz*&^", 0);
    
    if(!UsefulOutBuf_GetError(&UOB)) {
       return "insert with data should have failed";
@@ -286,7 +282,14 @@
    if(UsefulOutBuf_RoomLeft(&UOB) != 10)
       return "room left failed";
    
-   // TODO: test UsefulOutBuf_WillItFit
+   if(!UsefulOutBuf_WillItFit(&UOB, 9)) {
+      return "it did not fit";
+   }
+
+   if(UsefulOutBuf_WillItFit(&UOB, 11)) {
+      return "it should have not fit";
+   }
+   
    
    // Next -- make sure that the magic number checking is working right
    UOB.magic = 8888; // make magic bogus
@@ -399,14 +402,34 @@
       return "Copy should have failed";
    }
    
-   // TODO: complete this test
-   // UsefulBuf_CopyOffset();
-   // TODO: complete this test
-   // UsefulBuf_CopyPtr();
-   // TODO: complete this test
-   // UsefulBuf_Head();
-   // TODO: complete this test
-   // UsefulBuf_CopyPtr();
+   if(UsefulBuf_IsNULLC(UsefulBuf_CopyPtr(Temp2, "xx", 2))) {
+      return "CopyPtr failed";
+   }
+   
+   UsefulBufC xxyy = UsefulBuf_CopyOffset(Temp2, 2, UsefulBuf_FromSZLiteral("yy"));
+   if(UsefulBuf_IsNULLC(xxyy)) {
+      return "CopyOffset Failed";
+   }
+   
+   if(UsefulBuf_Compare(UsefulBuf_Head(xxyy, 3), UsefulBuf_FromSZLiteral("xxy"))) {
+      return "head failed";
+   }
+
+   if(UsefulBuf_Compare(UsefulBuf_Tail(xxyy, 1), UsefulBuf_FromSZLiteral("xyy"))) {
+      return "tail failed";
+   }
+   
+   if(!UsefulBuf_IsNULLC(UsefulBuf_Head(xxyy, 5))) {
+      return "head should have failed";
+   }
+
+   if(!UsefulBuf_IsNULLC(UsefulBuf_Tail(xxyy, 5))) {
+      return "tail should have failed";
+   }
+   
+   if(!UsefulBuf_IsNULLC(UsefulBuf_CopyOffset(Temp2, 100, UsefulBuf_FromSZLiteral("yy")))) {
+      return "Copy Offset should have failed";
+   }
    
    // Try to copy into a NULL/empty buf and see failure
    UsefulBuf UBNull = NULLUsefulBuf;
@@ -414,6 +437,7 @@
       return "Copy to NULL should have failed";
    }
    
+   
    // Try to set a NULL/empty buf; nothing should happen
    UsefulBuf_Set(&UBNull, '+'); // This will crash on failure
    
@@ -561,7 +585,7 @@
 }
 
 
-const char *  UBIntegerFormatTests()
+const char *  UIBTest_IntegerFormat()
 {
    UsefulOutBuf_MakeOnStack(UOB,100);
    
@@ -616,19 +640,56 @@
    if(UsefulInputBuf_GetDouble(&UIB) != d) {
       return "double out then in failed";
    }
-   
-   // TODO: test UsefulInputBuf_Seek
-   // TODO: test UsefulInputBuf_BytesUnconsumed
-   // TODO: test UsefulInputBuf_BytesAvailable
-   // TODO: test UsefulInputBuf_GetBytes
-   // TODO: test UsefulInputBuf_GetUsefulBuf
-   // TODO: test UsefulInputBuf_GetError
 
+   // Reset and go again for a few more tests
+   UsefulInputBuf_Init(&UIB, O);
+   
+   UsefulBufC Four = UsefulInputBuf_GetUsefulBuf(&UIB, 4);
+   if(UsefulBuf_IsNULLC(Four)) {
+      return "Four is NULL";
+   }
+   if(UsefulBuf_Compare(Four, UsefulBuf_FromByteArrayLiteral(pExpectedNetworkOrder))) {
+      return "Four compare failed";
+   }
+   
+   if(UsefulInputBuf_BytesUnconsumed(&UIB) != 23){
+      return "Wrong number of unconsumed bytes";
+   }
+
+   if(!UsefulInputBuf_BytesAvailable(&UIB, 23)){
+      return "Wrong number of bytes available I";
+   }
+
+   if(UsefulInputBuf_BytesAvailable(&UIB, 24)){
+      return "Wrong number of bytes available II";
+   }
+   
+   UsefulInputBuf_Seek(&UIB, 0);
+   
+   if(UsefulInputBuf_GetError(&UIB)) {
+      return "unexpected error after seek";
+   }
+   
+   const uint8_t *pGetBytes = (const uint8_t *)UsefulInputBuf_GetBytes(&UIB, 4);
+   if(pGetBytes == NULL) {
+      return "GetBytes returns NULL";
+   }
+   
+   if(memcmp(pGetBytes, pExpectedNetworkOrder, 4)) {
+      return "Got wrong bytes";
+   }
+   
+   UsefulInputBuf_Seek(&UIB, 28);
+
+   if(!UsefulInputBuf_GetError(&UIB)) {
+      return "expected error after seek";
+   }
+   
    return NULL;
 }
 
 
-const char *UBCopyUtilTest()
+const char *UBUTest_CopyUtil()
 {
    if(UsefulBufUtil_CopyFloatToUint32(65536.0F) != 0x47800000) {
       return "CopyFloatToUint32 failed";
diff --git a/test/UsefulBuf_Tests.h b/test/UsefulBuf_Tests.h
index 7b0eab1..6de859f 100644
--- a/test/UsefulBuf_Tests.h
+++ b/test/UsefulBuf_Tests.h
@@ -56,18 +56,18 @@
 #ifndef UsefulBuf_UsefulBuf_Tests_h
 #define UsefulBuf_UsefulBuf_Tests_h
 
-const char * NonAdversarialUOBTest(void);
+const char * UOBTest_NonAdversarial(void);
 
 const char *  TestBasicSanity(void);
 
-const char *  BoundaryConditionsTest(void);
+const char *  UOBTest_BoundaryConditionsTest(void);
 
 const char *  UBMacroConversionsTest(void);
 
 const char *  UBUtilTests(void);
 
-const char *  UBIntegerFormatTests(void);
+const char *  UIBTest_IntegerFormat(void);
 
-const char *  UBCopyUtilTest(void);
+const char *  UBUTest_CopyUtil(void);
 
 #endif
diff --git a/test/run_tests.c b/test/run_tests.c
index c86baa5..ae184d8 100644
--- a/test/run_tests.c
+++ b/test/run_tests.c
@@ -104,13 +104,13 @@
 } test_entry2;
 
 test_entry2 s_tests2[] = {
-    TEST_ENTRY(UBCopyUtilTest),
-    TEST_ENTRY(NonAdversarialUOBTest),
+    TEST_ENTRY(UBUTest_CopyUtil),
+    TEST_ENTRY(UOBTest_NonAdversarial),
     TEST_ENTRY(TestBasicSanity),
-    TEST_ENTRY(BoundaryConditionsTest),
+    TEST_ENTRY(UOBTest_BoundaryConditionsTest),
     TEST_ENTRY(UBMacroConversionsTest),
     TEST_ENTRY(UBUtilTests),
-    TEST_ENTRY(UBIntegerFormatTests)
+    TEST_ENTRY(UIBTest_IntegerFormat)
 };