xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

xi2.c (4628B)


      1 /**
      2  * Copyright © 2011 Red Hat, Inc.
      3  *
      4  *  Permission is hereby granted, free of charge, to any person obtaining a
      5  *  copy of this software and associated documentation files (the "Software"),
      6  *  to deal in the Software without restriction, including without limitation
      7  *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
      8  *  and/or sell copies of the Software, and to permit persons to whom the
      9  *  Software is furnished to do so, subject to the following conditions:
     10  *
     11  *  The above copyright notice and this permission notice (including the next
     12  *  paragraph) shall be included in all copies or substantial portions of the
     13  *  Software.
     14  *
     15  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16  *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     18  *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19  *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     20  *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
     21  *  DEALINGS IN THE SOFTWARE.
     22  */
     23 
     24 /* Test relies on assert() */
     25 #undef NDEBUG
     26 
     27 #ifdef HAVE_DIX_CONFIG_H
     28 #include <dix-config.h>
     29 #endif
     30 
     31 #include <stdint.h>
     32 #include "inpututils.h"
     33 #include "inputstr.h"
     34 #include "assert.h"
     35 
     36 #include "protocol-common.h"
     37 
     38 ClientRec client_window;
     39 
     40 static void
     41 xi2mask_test(void)
     42 {
     43     XI2Mask *xi2mask = NULL, *mergemask = NULL;
     44     unsigned char *mask;
     45     DeviceIntRec dev;
     46     DeviceIntRec all_devices, all_master_devices;
     47     int i;
     48 
     49     all_devices.id = XIAllDevices;
     50     inputInfo.all_devices = &all_devices;
     51     all_master_devices.id = XIAllMasterDevices;
     52     inputInfo.all_master_devices = &all_master_devices;
     53 
     54     /* size >= nmasks * 2 for the test cases below */
     55     xi2mask = xi2mask_new_with_size(MAXDEVICES + 2, (MAXDEVICES + 2) * 2);
     56     assert(xi2mask);
     57     assert(xi2mask->nmasks > 0);
     58     assert(xi2mask->mask_size > 0);
     59 
     60     assert(xi2mask_mask_size(xi2mask) == xi2mask->mask_size);
     61     assert(xi2mask_num_masks(xi2mask) == xi2mask->nmasks);
     62 
     63     mask = calloc(1, xi2mask_mask_size(xi2mask));
     64     /* ensure zeros */
     65     for (i = 0; i < xi2mask_num_masks(xi2mask); i++) {
     66         const unsigned char *m = xi2mask_get_one_mask(xi2mask, i);
     67 
     68         assert(memcmp(mask, m, xi2mask_mask_size(xi2mask)) == 0);
     69     }
     70 
     71     /* set various bits */
     72     for (i = 0; i < xi2mask_num_masks(xi2mask); i++) {
     73         const unsigned char *m;
     74 
     75         xi2mask_set(xi2mask, i, i);
     76 
     77         dev.id = i;
     78         assert(xi2mask_isset(xi2mask, &dev, i));
     79 
     80         m = xi2mask_get_one_mask(xi2mask, i);
     81         SetBit(mask, i);
     82         assert(memcmp(mask, m, xi2mask_mask_size(xi2mask)) == 0);
     83         ClearBit(mask, i);
     84     }
     85 
     86     /* ensure zeros one-by-one */
     87     for (i = 0; i < xi2mask_num_masks(xi2mask); i++) {
     88         const unsigned char *m = xi2mask_get_one_mask(xi2mask, i);
     89 
     90         assert(memcmp(mask, m, xi2mask_mask_size(xi2mask)) != 0);
     91         xi2mask_zero(xi2mask, i);
     92         assert(memcmp(mask, m, xi2mask_mask_size(xi2mask)) == 0);
     93     }
     94 
     95     /* re-set, zero all */
     96     for (i = 0; i < xi2mask_num_masks(xi2mask); i++)
     97         xi2mask_set(xi2mask, i, i);
     98     xi2mask_zero(xi2mask, -1);
     99 
    100     for (i = 0; i < xi2mask_num_masks(xi2mask); i++) {
    101         const unsigned char *m = xi2mask_get_one_mask(xi2mask, i);
    102 
    103         assert(memcmp(mask, m, xi2mask_mask_size(xi2mask)) == 0);
    104     }
    105 
    106     for (i = 0; i < xi2mask_num_masks(xi2mask); i++) {
    107         const unsigned char *m;
    108 
    109         SetBit(mask, i);
    110         xi2mask_set_one_mask(xi2mask, i, mask, xi2mask_mask_size(xi2mask));
    111         m = xi2mask_get_one_mask(xi2mask, i);
    112         assert(memcmp(mask, m, xi2mask_mask_size(xi2mask)) == 0);
    113         ClearBit(mask, i);
    114     }
    115 
    116     mergemask = xi2mask_new_with_size(MAXDEVICES + 2, (MAXDEVICES + 2) * 2);
    117     for (i = 0; i < xi2mask_num_masks(mergemask); i++) {
    118         dev.id = i;
    119         xi2mask_set(mergemask, i, i * 2);
    120     }
    121 
    122     /* xi2mask still has all i bits set, should now also have all i * 2 bits */
    123     xi2mask_merge(xi2mask, mergemask);
    124     for (i = 0; i < xi2mask_num_masks(mergemask); i++) {
    125         const unsigned char *m = xi2mask_get_one_mask(xi2mask, i);
    126 
    127         SetBit(mask, i);
    128         SetBit(mask, i * 2);
    129         assert(memcmp(mask, m, xi2mask_mask_size(xi2mask)) == 0);
    130         ClearBit(mask, i);
    131         ClearBit(mask, i * 2);
    132     }
    133 
    134     xi2mask_free(&xi2mask);
    135     assert(xi2mask == NULL);
    136 
    137     xi2mask_free(&mergemask);
    138     assert(mergemask == NULL);
    139     free(mask);
    140 }
    141 
    142 int
    143 xi2_test(void)
    144 {
    145     xi2mask_test();
    146 
    147     return 0;
    148 }