diff options
Diffstat (limited to 'src/test/test.c')
-rw-r--r-- | src/test/test.c | 290 |
1 files changed, 135 insertions, 155 deletions
diff --git a/src/test/test.c b/src/test/test.c index d387a3c..8cf0579 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1,20 +1,4 @@ -/** - * libgamma -- Display server abstraction layer for gamma ramp adjustments - * Copyright (C) 2014, 2015 Mattias Andrée (maandree@member.fsf.org) - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - */ +/* See LICENSE file for copyright and license details. */ #include "test.h" @@ -22,156 +6,152 @@ * Test `libgamma` * * @return Non-zero on machine detectable error, this library - * may still be faulty if zero is returned. + * may still be faulty if zero is returned */ -int main(void) +int +main(void) { - libgamma_site_state_t* restrict site_state = malloc(sizeof(libgamma_site_state_t)); - libgamma_partition_state_t* restrict part_state = malloc(sizeof(libgamma_partition_state_t)); - libgamma_crtc_state_t* restrict crtc_state = malloc(sizeof(libgamma_crtc_state_t)); - libgamma_crtc_information_t info; -#define X(R) \ - libgamma_gamma_##R##_t old_##R, R; \ - libgamma_gamma_##R##_fun* f_##R = invert_##R; - LIST_RAMPS + libgamma_site_state_t *restrict site_state = malloc(sizeof(libgamma_site_state_t)); + libgamma_partition_state_t *restrict part_state = malloc(sizeof(libgamma_partition_state_t)); + libgamma_crtc_state_t *restrict crtc_state = malloc(sizeof(libgamma_crtc_state_t)); + libgamma_crtc_information_t info; +#define X(R)\ + libgamma_gamma_##R##_t old_##R, R;\ + libgamma_gamma_##R##_fun* f_##R = invert_##R; + LIST_RAMPS #undef X - size_t i, n; - int r, rr = 0; - - /* Test miscellaneous parts of the library. */ - list_methods_lists(); - method_availability(); - list_default_sites(); - method_capabilities(); - error_test(); - - /* Select monitor for tests over CRTC:s, partitions and sites. */ - if (select_monitor(site_state, part_state, crtc_state)) - return 1; - - /* Test CRTC information functions. */ - crtc_information(crtc_state); - - /* Get the sizes of the gamma ramps for the selected CRTC. */ - libgamma_get_crtc_information(&info, crtc_state, LIBGAMMA_CRTC_INFO_GAMMA_SIZE); - - /* Create gamma ramps for each depth. */ -#define X(R) \ - old_##R.red_size = info.red_gamma_size; \ - old_##R.green_size = info.green_gamma_size; \ - old_##R.blue_size = info.blue_gamma_size; \ - R = old_##R; \ - libgamma_gamma_##R##_initialise(&old_##R); \ - libgamma_gamma_##R##_initialise(&R); - LIST_RAMPS + size_t i, n; + int r, rr = 0; + + /* Test miscellaneous parts of the library */ + list_methods_lists(); + method_availability(); + list_default_sites(); + method_capabilities(); + error_test(); + + /* Select monitor for tests over CRTC:s, partitions and sites */ + if (select_monitor(site_state, part_state, crtc_state)) + return 1; + + /* Test CRTC information functions. */ + crtc_information(crtc_state); + + /* Get the sizes of the gamma ramps for the selected CRTC */ + libgamma_get_crtc_information(&info, crtc_state, LIBGAMMA_CRTC_INFO_GAMMA_SIZE); + + /* Create gamma ramps for each depth */ +#define X(R)\ + old_##R.red_size = info.red_gamma_size;\ + old_##R.green_size = info.green_gamma_size;\ + old_##R.blue_size = info.blue_gamma_size;\ + R = old_##R;\ + libgamma_gamma_##R##_initialise(&old_##R);\ + libgamma_gamma_##R##_initialise(&R); + LIST_RAMPS #undef X - - /* Fill gamma ramps, for each depth, with the CRTC:s current ramps. */ -#define X(R) \ - if ((rr |= r = libgamma_crtc_get_gamma_##R(crtc_state, &old_##R))) \ - { \ - libgamma_perror("libgamma_crtc_get_gamma_" #R, r); \ - goto done; \ - } \ - if ((rr |= r = libgamma_crtc_get_gamma_##R(crtc_state, &R))) \ - { \ - libgamma_perror("libgamma_crtc_get_gamma_" #R, r); \ - goto done; \ - } - LIST_RAMPS + + /* Fill gamma ramps, for each depth, with the CRTC:s current ramps */ +#define X(R)\ + if ((rr |= r = libgamma_crtc_get_gamma_##R(crtc_state, &old_##R))) {\ + libgamma_perror("libgamma_crtc_get_gamma_" #R, r);\ + goto done;\ + }\ + if ((rr |= r = libgamma_crtc_get_gamma_##R(crtc_state, &R))) {\ + libgamma_perror("libgamma_crtc_get_gamma_" #R, r);\ + goto done;\ + } + LIST_RAMPS #undef X - /* Test function assisted gamma ramps setting. */ -#define X(R) \ - /* Dim the monitor for one second and the restore it. */ \ - printf("Inverting monitor output for 1 second... (" #R ")\n"); \ - if ((rr |= r = libgamma_crtc_set_gamma_##R##_f(crtc_state, \ - f_##R, f_##R, f_##R))) \ - libgamma_perror("libgamma_crtc_set_gamma_" #R "_f", r); \ - sleep(1); \ - if ((rr |= r = libgamma_crtc_set_gamma_##R(crtc_state, old_##R))) \ - libgamma_perror("libgamma_crtc_set_gamma_" #R, r); \ - printf("Done!\n"); \ - /* Sleep for one second, we have more depths to test. */ \ - printf("Sleeping for 1 second...\n"); \ - sleep(1); - LIST_RAMPS + /* Test function assisted gamma ramps setting */ +#define X(R)\ + /* Dim the monitor for one second and the restore it. */\ + printf("Inverting monitor output for 1 second... (" #R ")\n");\ + if ((rr |= r = libgamma_crtc_set_gamma_##R##_f(crtc_state, f_##R, f_##R, f_##R)))\ + libgamma_perror("libgamma_crtc_set_gamma_" #R "_f", r);\ + sleep(1);\ + if ((rr |= r = libgamma_crtc_set_gamma_##R(crtc_state, old_##R)))\ + libgamma_perror("libgamma_crtc_set_gamma_" #R, r);\ + printf("Done!\n");\ + /* Sleep for one second, we have more depths to test */\ + printf("Sleeping for 1 second...\n");\ + sleep(1); + LIST_RAMPS #undef X - - /* Test getting and setting gamma ramps. */ -#define X(R) \ - /* Get the grand size of the gamma ramps. */ \ - n = R.red_size; \ - n = n > R.green_size ? n : R.green_size; \ - n = n > R.blue_size ? n : R.blue_size; \ - /* Print the current gamma ramps. */ \ - printf("Current gamma ramps (" #R "):\n"); \ - for (i = 0; i < n; i++) \ - { \ - if (i < R.red_size) Y(R.red, "1"); else printf(" "); \ - if (i < R.green_size) Y(R.green, "2"); else printf(" "); \ - if (i < R.blue_size) Y(R.blue, "4"); else printf(" "); \ - printf("\n"); \ - } \ - printf("\n"); \ - /* Adjust the gamma ramps for dimming the monitor. */ \ - for (i = 0; i < R.red_size + R.green_size + R.blue_size; i++) \ - R.red[i] /= 2; \ - /* Dim the monitor for one second and the restore it. */ \ - printf("Dimming monitor for 1 second...\n"); \ - if ((rr |= r = libgamma_crtc_set_gamma_##R(crtc_state, R))) \ - libgamma_perror("libgamma_crtc_set_gamma_" #R, r); \ - sleep(1); \ - if ((rr |= r = libgamma_crtc_set_gamma_##R(crtc_state, old_##R))) \ - libgamma_perror("libgamma_crtc_set_gamma_" #R, r); \ - printf("Done!\n"); \ - /* Sleep for one second, we have more depths to test. */ \ - printf("Sleeping for 1 second...\n"); \ - sleep(1); + + /* Test getting and setting gamma ramps */ +#define X(R)\ + /* Get the grand size of the gamma ramps */\ + n = R.red_size;\ + n = n > R.green_size ? n : R.green_size;\ + n = n > R.blue_size ? n : R.blue_size;\ + /* Print the current gamma ramps */\ + printf("Current gamma ramps (" #R "):\n");\ + for (i = 0; i < n; i++) {\ + if (i < R.red_size) Y(R.red, "1"); else printf(" ");\ + if (i < R.green_size) Y(R.green, "2"); else printf(" ");\ + if (i < R.blue_size) Y(R.blue, "4"); else printf(" ");\ + printf("\n");\ + }\ + printf("\n");\ + /* Adjust the gamma ramps for dimming the monitor */\ + for (i = 0; i < R.red_size + R.green_size + R.blue_size; i++)\ + R.red[i] /= 2;\ + /* Dim the monitor for one second and the restore it */\ + printf("Dimming monitor for 1 second...\n");\ + if ((rr |= r = libgamma_crtc_set_gamma_##R(crtc_state, R)))\ + libgamma_perror("libgamma_crtc_set_gamma_" #R, r);\ + sleep(1);\ + if ((rr |= r = libgamma_crtc_set_gamma_##R(crtc_state, old_##R)))\ + libgamma_perror("libgamma_crtc_set_gamma_" #R, r);\ + printf("Done!\n");\ + /* Sleep for one second, we have more depths to test */\ + printf("Sleeping for 1 second...\n");\ + sleep(1); #define Y(R, C) printf(" \033[3" C "m%1.8lf\033[00m", (double)(R[i])) - LIST_FLOAT_RAMPS + LIST_FLOAT_RAMPS #undef Y #define Y(R, C) printf(" \033[3" C "m%16llX\033[00m", (uint64_t)(R[i])) - LIST_INTEGER_RAMPS + LIST_INTEGER_RAMPS #undef Y #undef X + + /* Test order of gamma ramps */ + memcpy(ramps16.red, old_ramps16.red, ramps16.red_size * sizeof(uint16_t)); + memset(ramps16.green, 0, ramps16.green_size * sizeof(uint16_t)); + memset(ramps16.blue, 0, ramps16.blue_size * sizeof(uint16_t)); + printf("Making the monitor red-only for 1 second...\n"); + if ((rr |= r = libgamma_crtc_set_gamma_ramps16(crtc_state, ramps16))) + libgamma_perror("libgamma_crtc_set_gamma_ramps16", r); + sleep(1); + memset(ramps16.red, 0, ramps16.red_size * sizeof(uint16_t)); + memcpy(ramps16.green, old_ramps16.green, ramps16.green_size * sizeof(uint16_t)); + printf("Making the monitor green-only for 1 second...\n"); + if ((rr |= r = libgamma_crtc_set_gamma_ramps16(crtc_state, ramps16))) + libgamma_perror("libgamma_crtc_set_gamma_ramps16", r); + sleep(1); + memset(ramps16.green, 0, ramps16.green_size * sizeof(uint16_t)); + memcpy(ramps16.blue, old_ramps16.blue, ramps16.blue_size * sizeof(uint16_t)); + printf("Making the monitor green-only for 1 second...\n"); + if ((rr |= r = libgamma_crtc_set_gamma_ramps16(crtc_state, ramps16))) + libgamma_perror("libgamma_crtc_set_gamma_ramps16", r); + sleep(1); + if ((rr |= r = libgamma_crtc_set_gamma_ramps64(crtc_state, old_ramps64))) + libgamma_perror("libgamma_crtc_set_gamma_ramps64", r); + printf("Done!\n"); + + /* TODO Test gamma ramp restore functions */ - /* Test order of gamma ramps. */ - memcpy(ramps16.red, old_ramps16.red, ramps16.red_size * sizeof(uint16_t)); - memset(ramps16.green, 0, ramps16.green_size * sizeof(uint16_t)); - memset(ramps16.blue, 0, ramps16.blue_size * sizeof(uint16_t)); - printf("Making the monitor red-only for 1 second...\n"); - if ((rr |= r = libgamma_crtc_set_gamma_ramps16(crtc_state, ramps16))) - libgamma_perror("libgamma_crtc_set_gamma_ramps16", r); - sleep(1); - memset(ramps16.red, 0, ramps16.red_size * sizeof(uint16_t)); - memcpy(ramps16.green, old_ramps16.green, ramps16.green_size * sizeof(uint16_t)); - printf("Making the monitor green-only for 1 second...\n"); - if ((rr |= r = libgamma_crtc_set_gamma_ramps16(crtc_state, ramps16))) - libgamma_perror("libgamma_crtc_set_gamma_ramps16", r); - sleep(1); - memset(ramps16.green, 0, ramps16.green_size * sizeof(uint16_t)); - memcpy(ramps16.blue, old_ramps16.blue, ramps16.blue_size * sizeof(uint16_t)); - printf("Making the monitor green-only for 1 second...\n"); - if ((rr |= r = libgamma_crtc_set_gamma_ramps16(crtc_state, ramps16))) - libgamma_perror("libgamma_crtc_set_gamma_ramps16", r); - sleep(1); - if ((rr |= r = libgamma_crtc_set_gamma_ramps64(crtc_state, old_ramps64))) - libgamma_perror("libgamma_crtc_set_gamma_ramps64", r); - printf("Done!\n"); - - /* TODO Test gamma ramp restore functions. */ - - done: - /* Release resouces. */ -#define X(R) \ - libgamma_gamma_##R##_destroy(&R); \ - libgamma_gamma_##R##_destroy(&old_##R); - LIST_RAMPS +done: + /* Release resouces */ +#define X(R)\ + libgamma_gamma_##R##_destroy(&R);\ + libgamma_gamma_##R##_destroy(&old_##R); + LIST_RAMPS #undef X - libgamma_crtc_free(crtc_state); - libgamma_partition_free(part_state); - libgamma_site_free(site_state); - return rr; + libgamma_crtc_free(crtc_state); + libgamma_partition_free(part_state); + libgamma_site_free(site_state); + return rr; } - |