1 /* Test the di-set module. 2 Copyright (C) 2010-2021 Free Software Foundation, Inc. 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 16 17 /* Written by Jim Meyering. */ 18 19 #include <config.h> 20 21 #include "di-set.h" 22 23 #include "macros.h" 24 25 int 26 main (void) /* */ 27 { 28 struct di_set *dis = di_set_alloc (); 29 ASSERT (dis); 30 di_set_free (dis); /* free with dis->ino_map still being NULL */ 31 dis = di_set_alloc (); 32 ASSERT (dis); 33 34 ASSERT (di_set_lookup (dis, 2, 5) == 0); /* initial lookup fails */ 35 ASSERT (di_set_insert (dis, 2, 5) == 1); /* first insertion succeeds */ 36 ASSERT (di_set_insert (dis, 2, 5) == 0); /* duplicate fails */ 37 ASSERT (di_set_insert (dis, 3, 5) == 1); /* diff dev, duplicate inode is ok */ 38 ASSERT (di_set_insert (dis, 2, 8) == 1); /* same dev, different inode is ok */ 39 ASSERT (di_set_lookup (dis, 2, 5) == 1); /* now, the lookup succeeds */ 40 41 /* very large (or negative) inode number */ 42 ASSERT (di_set_insert (dis, 5, (ino_t) -1) == 1); 43 ASSERT (di_set_insert (dis, 5, (ino_t) -1) == 0); /* dup */ 44 45 { 46 unsigned int i; 47 for (i = 0; i < 3000; i++) 48 ASSERT (di_set_insert (dis, 9, i) == 1); 49 for (i = 0; i < 3000; i++) 50 ASSERT (di_set_insert (dis, 9, i) == 0); /* duplicate fails */ 51 } 52 53 di_set_free (dis); 54 55 return 0; 56 }