- Added and modified tests (result from coverage)

diff --git a/tests/suites/test_suite_mpi.function b/tests/suites/test_suite_mpi.function
index 52c5e41..3278eb1 100644
--- a/tests/suites/test_suite_mpi.function
+++ b/tests/suites/test_suite_mpi.function
@@ -12,17 +12,23 @@
 END_HEADER
 
 BEGIN_CASE
-mpi_read_write_string:radix_X:input_X:radix_A:input_A
+mpi_read_write_string:radix_X:input_X:radix_A:input_A:output_size:result_read:result_write
 {
     mpi X;
     char str[1000];
-    int len = 1000;
+    int len = {output_size};
 
     mpi_init(&X, NULL);
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_write_string( &X, {radix_A}, str, &len ) == 0 );
-    TEST_ASSERT( strcasecmp( str, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == {result_read} );
+    if( {result_read} == 0 )
+    {
+        TEST_ASSERT( mpi_write_string( &X, {radix_A}, str, &len ) == {result_write} );
+        if( {result_write} == 0 )
+        {
+            TEST_ASSERT( strcasecmp( str, {input_A} ) == 0 );
+        }
+    }
 }
 END_CASE
 
@@ -46,7 +52,7 @@
 END_CASE
 
 BEGIN_CASE
-mpi_write_binary:radix_X:input_X:input_A
+mpi_write_binary:radix_X:input_X:input_A:output_size:result
 {
     mpi X;
     unsigned char str[1000];
@@ -61,16 +67,21 @@
     TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
     
     buflen = mpi_size( &X );
-    TEST_ASSERT( mpi_write_binary( &X, buf, buflen ) == 0 );
+    if( buflen > {output_size} )
+        buflen = {output_size};
 
-    hexify( str, buf, buflen );
+    TEST_ASSERT( mpi_write_binary( &X, buf, buflen ) == {result} );
+    if( {result} == 0)
+    {
+        hexify( str, buf, buflen );
 
-    TEST_ASSERT( strcasecmp( (char *) str, {input_A} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) str, {input_A} ) == 0 );
+    }
 }
 END_CASE
 
 BEGIN_CASE
-mpi_read_file:radix_X:input_file:input_A
+mpi_read_file:radix_X:input_file:input_A:result
 {
     mpi X;
     unsigned char str[1000];
@@ -84,15 +95,18 @@
     mpi_init(&X, NULL);
 
     file = fopen( {input_file}, "r" );
-    TEST_ASSERT( mpi_read_file( &X, {radix_X}, file ) == 0 );
+    TEST_ASSERT( mpi_read_file( &X, {radix_X}, file ) == {result} );
     fclose(file);
 
-    buflen = mpi_size( &X );
-    TEST_ASSERT( mpi_write_binary( &X, buf, buflen ) == 0 );
+    if( {result} == 0 )
+    {
+        buflen = mpi_size( &X );
+        TEST_ASSERT( mpi_write_binary( &X, buf, buflen ) == 0 );
 
-    hexify( str, buf, buflen );
+        hexify( str, buf, buflen );
 
-    TEST_ASSERT( strcasecmp( (char *) str, {input_A} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) str, {input_A} ) == 0 );
+    }
 }
 END_CASE
 
@@ -264,6 +278,34 @@
 END_CASE
 
 BEGIN_CASE
+mpi_add_abs_add_first:radix_X:input_X:radix_Y:input_Y:radix_A:input_A
+{
+    mpi X, Y, A;
+    mpi_init(&X, &Y, &A, NULL);
+
+    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_add_abs( &X, &X, &Y ) == 0 );
+    TEST_ASSERT( mpi_cmp_mpi( &X, &A ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+mpi_add_abs_add_second:radix_X:input_X:radix_Y:input_Y:radix_A:input_A
+{
+    mpi X, Y, A;
+    mpi_init(&X, &Y, &A, NULL);
+
+    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_add_abs( &Y, &X, &Y ) == 0 );
+    TEST_ASSERT( mpi_cmp_mpi( &Y, &A ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
 mpi_add_int:radix_X:input_X:input_Y:radix_A:input_A
 {
     mpi X, Z, A;