Home | History | Annotate | Line # | Download | only in unittests
ptid-selftests.c revision 1.1.1.5
      1      1.1  christos /* Self tests for ptid_t for GDB, the GNU debugger.
      2      1.1  christos 
      3  1.1.1.5  christos    Copyright (C) 2017-2024 Free Software Foundation, Inc.
      4      1.1  christos 
      5      1.1  christos    This file is part of GDB.
      6      1.1  christos 
      7      1.1  christos    This program is free software; you can redistribute it and/or modify
      8      1.1  christos    it under the terms of the GNU General Public License as published by
      9      1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10      1.1  christos    (at your option) any later version.
     11      1.1  christos 
     12      1.1  christos    This program is distributed in the hope that it will be useful,
     13      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15      1.1  christos    GNU General Public License for more details.
     16      1.1  christos 
     17      1.1  christos    You should have received a copy of the GNU General Public License
     18      1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19      1.1  christos 
     20  1.1.1.3  christos #include "gdbsupport/ptid.h"
     21      1.1  christos #include <type_traits>
     22      1.1  christos 
     23      1.1  christos namespace selftests {
     24      1.1  christos namespace ptid {
     25      1.1  christos 
     26      1.1  christos /* Check that the ptid_t class is POD.
     27      1.1  christos 
     28      1.1  christos    This is a requirement for as long as we have ptids embedded in
     29      1.1  christos    structures allocated with malloc. */
     30      1.1  christos 
     31  1.1.1.5  christos static_assert (gdb::And<std::is_standard_layout<ptid_t>,
     32  1.1.1.5  christos 			std::is_trivial<ptid_t>>::value,
     33  1.1.1.5  christos 	       "ptid_t is POD");
     34      1.1  christos 
     35      1.1  christos /* We want to avoid implicit conversion from int to ptid_t.  */
     36      1.1  christos 
     37      1.1  christos static_assert (!std::is_convertible<int, ptid_t>::value,
     38      1.1  christos 	       "constructor is explicit");
     39      1.1  christos 
     40      1.1  christos /* Build some useful ptids.  */
     41      1.1  christos 
     42      1.1  christos static constexpr ptid_t pid = ptid_t (1);
     43      1.1  christos static constexpr ptid_t lwp = ptid_t (1, 2, 0);
     44      1.1  christos static constexpr ptid_t tid = ptid_t (1, 0, 2);
     45      1.1  christos static constexpr ptid_t both = ptid_t (1, 2, 2);
     46      1.1  christos 
     47      1.1  christos /* Build some constexpr version of null_ptid and minus_one_ptid to use in
     48      1.1  christos    static_assert.  Once the real ones are made constexpr, we can get rid of
     49      1.1  christos    these.  */
     50      1.1  christos 
     51      1.1  christos static constexpr ptid_t null = ptid_t::make_null ();
     52      1.1  christos static constexpr ptid_t minus_one = ptid_t::make_minus_one ();
     53      1.1  christos 
     54      1.1  christos /* Verify pid.  */
     55      1.1  christos 
     56      1.1  christos static_assert (pid.pid () == 1, "pid's pid is right");
     57      1.1  christos static_assert (lwp.pid () == 1, "lwp's pid is right");
     58      1.1  christos static_assert (tid.pid () == 1, "tid's pid is right");
     59      1.1  christos static_assert (both.pid () == 1, "both's pid is right");
     60      1.1  christos 
     61      1.1  christos /* Verify lwp_p.  */
     62      1.1  christos 
     63      1.1  christos static_assert (!pid.lwp_p (), "pid's lwp_p is right");
     64      1.1  christos static_assert (lwp.lwp_p (), "lwp's lwp_p is right");
     65      1.1  christos static_assert (!tid.lwp_p (), "tid's lwp_p is right");
     66      1.1  christos static_assert (both.lwp_p (), "both's lwp_p is right");
     67      1.1  christos 
     68      1.1  christos /* Verify lwp.  */
     69      1.1  christos 
     70      1.1  christos static_assert (pid.lwp () == 0, "pid's lwp is right");
     71      1.1  christos static_assert (lwp.lwp () == 2, "lwp's lwp is right");
     72      1.1  christos static_assert (tid.lwp () == 0, "tid's lwp is right");
     73      1.1  christos static_assert (both.lwp () == 2, "both's lwp is right");
     74      1.1  christos 
     75      1.1  christos /* Verify tid_p.  */
     76      1.1  christos 
     77      1.1  christos static_assert (!pid.tid_p (), "pid's tid_p is right");
     78      1.1  christos static_assert (!lwp.tid_p (), "lwp's tid_p is right");
     79      1.1  christos static_assert (tid.tid_p (), "tid's tid_p is right");
     80      1.1  christos static_assert (both.tid_p (), "both's tid_p is right");
     81      1.1  christos 
     82      1.1  christos /* Verify tid.  */
     83      1.1  christos 
     84      1.1  christos static_assert (pid.tid () == 0, "pid's tid is right");
     85      1.1  christos static_assert (lwp.tid () == 0, "lwp's tid is right");
     86      1.1  christos static_assert (tid.tid () == 2, "tid's tid is right");
     87      1.1  christos static_assert (both.tid () == 2, "both's tid is right");
     88      1.1  christos 
     89      1.1  christos /* Verify is_pid.  */
     90      1.1  christos 
     91      1.1  christos static_assert (pid.is_pid (), "pid is a pid");
     92      1.1  christos static_assert (!lwp.is_pid (), "lwp isn't a pid");
     93      1.1  christos static_assert (!tid.is_pid (), "tid isn't a pid");
     94      1.1  christos static_assert (!both.is_pid (), "both isn't a pid");
     95      1.1  christos static_assert (!null.is_pid (), "null ptid isn't a pid");
     96      1.1  christos static_assert (!minus_one.is_pid (), "minus one ptid isn't a pid");
     97      1.1  christos 
     98      1.1  christos /* Verify operator ==.  */
     99      1.1  christos 
    100      1.1  christos static_assert (pid == ptid_t (1, 0, 0), "pid operator== is right");
    101      1.1  christos static_assert (lwp == ptid_t (1, 2, 0), "lwp operator== is right");
    102      1.1  christos static_assert (tid == ptid_t (1, 0, 2), "tid operator== is right");
    103      1.1  christos static_assert (both == ptid_t (1, 2, 2), "both operator== is right");
    104      1.1  christos 
    105      1.1  christos /* Verify operator !=.  */
    106      1.1  christos 
    107      1.1  christos static_assert (pid != ptid_t (2, 0, 0), "pid isn't equal to a different pid");
    108      1.1  christos static_assert (pid != lwp, "pid isn't equal to one of its thread");
    109      1.1  christos static_assert (lwp != tid, "lwp isn't equal to tid");
    110      1.1  christos static_assert (both != lwp, "both isn't equal to lwp");
    111      1.1  christos static_assert (both != tid, "both isn't equal to tid");
    112      1.1  christos 
    113      1.1  christos /* Verify matches against minus_one.  */
    114      1.1  christos 
    115      1.1  christos static_assert (pid.matches (minus_one), "pid matches minus one");
    116      1.1  christos static_assert (lwp.matches (minus_one), "lwp matches minus one");
    117      1.1  christos static_assert (tid.matches (minus_one), "tid matches minus one");
    118      1.1  christos static_assert (both.matches (minus_one), "both matches minus one");
    119      1.1  christos 
    120      1.1  christos /* Verify matches against pid.  */
    121      1.1  christos 
    122      1.1  christos static_assert (pid.matches (pid), "pid matches pid");
    123      1.1  christos static_assert (lwp.matches (pid), "lwp matches pid");
    124      1.1  christos static_assert (tid.matches (pid), "tid matches pid");
    125      1.1  christos static_assert (both.matches (pid), "both matches pid");
    126      1.1  christos static_assert (!ptid_t (2, 0, 0).matches (pid), "other pid doesn't match pid");
    127      1.1  christos static_assert (!ptid_t (2, 2, 0).matches (pid), "other lwp doesn't match pid");
    128      1.1  christos static_assert (!ptid_t (2, 0, 2).matches (pid), "other tid doesn't match pid");
    129      1.1  christos static_assert (!ptid_t (2, 2, 2).matches (pid), "other both doesn't match pid");
    130      1.1  christos 
    131      1.1  christos /* Verify matches against exact matches.  */
    132      1.1  christos 
    133      1.1  christos static_assert (!pid.matches (lwp), "pid doesn't match lwp");
    134      1.1  christos static_assert (lwp.matches (lwp), "lwp matches lwp");
    135      1.1  christos static_assert (!tid.matches (lwp), "tid doesn't match lwp");
    136      1.1  christos static_assert (!both.matches (lwp), "both doesn't match lwp");
    137      1.1  christos static_assert (!ptid_t (2, 2, 0).matches (lwp), "other lwp doesn't match lwp");
    138      1.1  christos 
    139      1.1  christos static_assert (!pid.matches (tid), "pid doesn't match tid");
    140      1.1  christos static_assert (!lwp.matches (tid), "lwp doesn't match tid");
    141      1.1  christos static_assert (tid.matches (tid), "tid matches tid");
    142      1.1  christos static_assert (!both.matches (tid), "both doesn't match tid");
    143      1.1  christos static_assert (!ptid_t (2, 0, 2).matches (tid), "other tid doesn't match tid");
    144      1.1  christos 
    145      1.1  christos static_assert (!pid.matches (both), "pid doesn't match both");
    146      1.1  christos static_assert (!lwp.matches (both), "lwp doesn't match both");
    147      1.1  christos static_assert (!tid.matches (both), "tid doesn't match both");
    148      1.1  christos static_assert (both.matches (both), "both matches both");
    149      1.1  christos static_assert (!ptid_t (2, 2, 2).matches (both),
    150      1.1  christos 	       "other both doesn't match both");
    151      1.1  christos 
    152      1.1  christos 
    153      1.1  christos } /* namespace ptid */
    154      1.1  christos } /* namespace selftests */
    155