aboutsummaryrefslogblamecommitdiffstats
path: root/src/test/errors.c
blob: ffe9bd2a7bd110aae82917d3691cd324ffcecb39 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                         

                   

   
                
   

                
 
              
  











                                                                                                                  
  




















                                                                                                                 
  

















                                                                              
 
/* See LICENSE file for copyright and license details. */
#include "errors.h"


/**
 * The error API
 */
void
error_test(void)
{
	int i;
  
	/* Test that naming and name dereferencing
	   of errors work. Because the mappings in
	   these [`libgamma_value_of_error` and
	   `libgamma_name_of_error`] functions are
	   generated, it should work if and only if
	   one test passes, assumming the errors are
	   unique whihc is tested in the end of this
	   function. */
	printf("Testing error API using LIBGAMMA_STATE_UNKNOWN:\n");
	printf("  Expecting %i: %i\n", LIBGAMMA_STATE_UNKNOWN, libgamma_value_of_error("LIBGAMMA_STATE_UNKNOWN"));
	printf("  Expecting %s: %s\n", "LIBGAMMA_STATE_UNKNOWN", libgamma_name_of_error(LIBGAMMA_STATE_UNKNOWN));
	printf("\n");
  
	/* Test that `libgamma_perror` can print
	   libgamma errors and system errors, and
	   handle success in the same with as `perror`. */
	printf("Testing libgamma_perror:\n");
	libgamma_perror("  Expecting LIBGAMMA_STATE_UNKNOWN", LIBGAMMA_STATE_UNKNOWN);
	libgamma_perror("  Expecting a description for ENOMEM", ENOMEM);
	libgamma_perror("  Expecting a description for successfulness", 0);
	/* Test that `libgamma_perror` handles
	   `LIBGAMMA_ERRNO_SET` correctly. */
	libgamma_perror("  Expecting a description for ENOMEM", (errno = ENOMEM, LIBGAMMA_ERRNO_SET));
	/* That that `libgamma_perror` handles
	   `LIBGAMMA_DEVICE_REQUIRE_GROUP`
	   correctly both when the required
	   group's name is known and when it
	   is unknown. */
	libgamma_group_gid = 10;
	libgamma_group_name = "test";
	libgamma_perror("  Expecting 'LIBGAMMA_DEVICE_REQUIRE_GROUP: test (10)'", LIBGAMMA_DEVICE_REQUIRE_GROUP);
	libgamma_group_name = NULL;
	libgamma_perror("  Expecting 'LIBGAMMA_DEVICE_REQUIRE_GROUP: 10'", LIBGAMMA_DEVICE_REQUIRE_GROUP);
	printf("\n");
  
	/* That all libgamma error codes
	   are unique. This is done by
	   getting the name associated
	   with an error code and the getting
	   the error code associated that
	   name and test that the same
	   error code is returned as put in,
	   for each libgamma error code. */
	printf("Testing error code uniqueness: ");
	for (i = -1; i >= LIBGAMMA_ERROR_MIN; i--) {
		if (libgamma_value_of_error(libgamma_name_of_error(i)) != i) {
			printf("failed\n");
			goto not_unique;
		}
	}
	printf("passed\n");
not_unique:
	printf("\n");
}