Esteu aquí: Inici Assignatures Programació a Baix Nivell Pràctiques PBN PBN. Practica3 Test CUnit

Test CUnit

Exemple de test general basat en CUnits

test.c — C source code, 4 kB (5080 bytes)

Continguts del fitxer

#include <stdio.h>
#include <CUnit/CUnit.h>
#include <CUnit/Basic.h>
#include "codif.h"
#include "itu.h"
#include "streamencoder.h"

void test_codif1(void) {
  morse_table_t t;

  // set translation table
  empty_morse_table(t);
  set_translation(t,'A',".-");
  set_translation(t,'V',"...-");
  set_translation(t,'5',".....");

  // check to_ascii()
  CU_ASSERT_EQUAL('A',to_ascii(t,".-"));
  CU_ASSERT_EQUAL('V',to_ascii(t,"...-"));
  CU_ASSERT_EQUAL('5',to_ascii(t,"....."));

  // check to_morse()
  morse_char_t m;
  to_morse(t,'A',m);
  CU_ASSERT_STRING_EQUAL(m,".-");
  to_morse(t,'V',m);
  CU_ASSERT_STRING_EQUAL(m, "...-");
  to_morse(t,'5',m);
  CU_ASSERT_STRING_EQUAL(m,".....");
}

void test_codif2(void) {
  morse_table_t t;

  // set translation table
  empty_morse_table(t);
  set_translation(t,'C',"-.-.");
  set_translation(t,'Z',"--..");
  set_translation(t,'9',"----.");

  // check to_ascii()
  CU_ASSERT_EQUAL('C',to_ascii(t,"-.-."));
  CU_ASSERT_EQUAL('Z',to_ascii(t,"--.."));
  CU_ASSERT_EQUAL('9',to_ascii(t,"----."));
  CU_ASSERT_EQUAL('@',to_ascii(t,".-.-"));//no ascii for ".-.-"
  CU_ASSERT_EQUAL('@',to_ascii(t,"."));//no set_translation for E

  // check to_morse()
  morse_char_t m;
  to_morse(t,'C',m);
  CU_ASSERT_STRING_EQUAL(m,"-.-.");
  to_morse(t,'Z',m);
  CU_ASSERT_STRING_EQUAL(m, "--..");
  to_morse(t,'9',m);
  CU_ASSERT_STRING_EQUAL(m,"----.");
  to_morse(t,'@',m);
  CU_ASSERT_STRING_EQUAL(m,"");//'@' is not on the table
  to_morse(t,'E',m);
  CU_ASSERT_STRING_EQUAL(m,"");//no set_translation for E
  to_morse(t,'\0',m);
  CU_ASSERT_STRING_EQUAL(m,"");//'\0' is not on the table
  to_morse(t,'a',m);
  CU_ASSERT_STRING_EQUAL(m,"");//'a' is not on the table
}



void test_itu1(void) {
  itu_init();

  // check to_ascii()
  CU_ASSERT_EQUAL('A',to_ascii(itu_table,".-"));
  CU_ASSERT_EQUAL('V',to_ascii(itu_table,"...-"));
  CU_ASSERT_EQUAL('5',to_ascii(itu_table,"....."));

  // check to_morse()
  morse_char_t m;
  to_morse(itu_table,'A',m);
  CU_ASSERT_STRING_EQUAL(m,".-");
  to_morse(itu_table,'V',m);
  CU_ASSERT_STRING_EQUAL(m, "...-");
  to_morse(itu_table,'5',m);
  CU_ASSERT_STRING_EQUAL(m,".....");
}

void test_itu2(void) {
  itu_init();

  // check to_ascii()
  CU_ASSERT_EQUAL('C',to_ascii(itu_table,"-.-."));
  CU_ASSERT_EQUAL('Z',to_ascii(itu_table,"--.."));
  CU_ASSERT_EQUAL('9',to_ascii(itu_table,"----."));
  CU_ASSERT_EQUAL('@',to_ascii(itu_table,".-.-"));//no ascii for ".-.-"
  CU_ASSERT_EQUAL('E',to_ascii(itu_table,"."));

  // check to_morse()
  morse_char_t m;
  to_morse(itu_table,'C',m);
  CU_ASSERT_STRING_EQUAL(m,"-.-.");
  to_morse(itu_table,'Z',m);
  CU_ASSERT_STRING_EQUAL(m, "--..");
  to_morse(itu_table,'9',m);
  CU_ASSERT_STRING_EQUAL(m,"----.");
  to_morse(itu_table,'@',m);
  CU_ASSERT_STRING_EQUAL(m,"");//'@' is not on the table
  to_morse(itu_table,'E',m);
  CU_ASSERT_STRING_EQUAL(m,".");
  to_morse(itu_table,'\0',m);
  CU_ASSERT_STRING_EQUAL(m,"");//'\0' is not on the table
  to_morse(itu_table,'a',m);
  CU_ASSERT_STRING_EQUAL(m,"");//'a' is not on the table
}



void test_streamencoder1(void) {
  FILE *in, *out;
  char buffer[100];
  const struct {char *a,*m;} tests[] = {
    {"AGENT 007 \n",".- --. . -. -   ----- ----- --...   \n"},
    {"CATALA A LATAC \n","-.-. .- - .- .-.. .-   .-   .-.. .- - .- -.-.   \n"},
    {"RAP LLUCET SEITO \n",".-. .- .--.   .-.. .-.. ..- -.-. . -   ... . .. - ---   \n"},
  };

  // initialize environment
  streamencoder_init();

  // iterate over tests ascii->morse
  for (int i=0; i<3; i++) {
    in  = tmpfile(); out = tmpfile();
    fputs(tests[i].a, in); rewind(in);
    do_codifica(in, out); rewind(out);
    fgets(buffer, 100, out);
    CU_ASSERT_STRING_EQUAL(buffer, tests[i].m);
    fclose(in); fclose(out);
  }

  // iterate over tests morse->ascii
  for (int i=0; i<3; i++) {
    in  = tmpfile(); out = tmpfile();
    fputs(tests[i].m, in); rewind(in);
    do_descodifica(in, out); rewind(out);
    fgets(buffer, 100, out);
    CU_ASSERT_STRING_EQUAL(buffer, tests[i].a);
    fclose(in); fclose(out);
  }
}




int main()
{
   /* initialize the CUnit test registry */
   if (CUE_SUCCESS != CU_initialize_registry())
      return CU_get_error();

   /* Suite_1 (BASIC) */
   
   /* add a suite to the registry */
   CU_pSuite pSuite1 = CU_add_suite("Suite_1 Basic", NULL, NULL);
   if (NULL == pSuite1) {
      CU_cleanup_registry();
      return CU_get_error();
   }
   /* add the tests to the suite1 */
   CU_ADD_TEST(pSuite1, test_codif1);
   CU_ADD_TEST(pSuite1, test_itu1);
   CU_ADD_TEST(pSuite1, test_streamencoder1);

   /* Suite_2 (STANDARD) */
   
   /* add a suite to the registry */
   CU_pSuite pSuite2 = CU_add_suite("Suite_2 Standard", NULL, NULL);
   if (NULL == pSuite2) {
      CU_cleanup_registry();
      return CU_get_error();
   }
   /* add the tests to the suite2 */
   CU_ADD_TEST(pSuite2, test_codif2);
   CU_ADD_TEST(pSuite2, test_itu2);

   /* Run all tests using the CUnit Basic interface */
   CU_basic_set_mode(CU_BRM_VERBOSE);
   CU_basic_run_tests();
   CU_cleanup_registry();

   return CU_get_error();
}