Clover Coverage Report
Coverage timestamp: Fri May 24 2013 13:47:27 UTC
179   274   19   25.57
12   210   0.11   7
7     2.71  
1    
 
  QedeqNumbersTest       Line # 28 179 19 98% 0.97979796
 
  (3)
 
1    /* This file is part of the project "Hilbert II" - http://www.qedeq.org
2    *
3    * Copyright 2000-2013, Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10    * This program is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13    * GNU General Public License for more details.
14    */
15   
16    package org.qedeq.kernel.se.visitor;
17   
18    import java.util.Random;
19   
20    import org.qedeq.base.test.QedeqTestCase;
21    import org.qedeq.kernel.se.visitor.QedeqNumbers;
22   
23    /**
24    * Test {@link QedeqNumbers} works correctly.
25    *
26    * @author Michael Meyling
27    */
 
28    public class QedeqNumbersTest extends QedeqTestCase {
29   
30    private QedeqNumbers numbers;
31   
32    private double oldVisitPercentage;
33   
34    private QedeqNumbers old;
35   
36    /**
37    * Constructor.
38    */
 
39  0 toggle public QedeqNumbersTest() {
40  0 super();
41    }
42   
43    /**
44    * Constructor.
45    *
46    * @param name Test case name.
47    */
 
48  3 toggle public QedeqNumbersTest(String name) {
49  3 super(name);
50    }
51   
52    /**
53    * Test constructor.
54    */
 
55  1 toggle public void testConstructor() throws Exception {
56  1 numbers = new QedeqNumbers(10, 21);
57  1 assertEquals(0, numbers.getImportNumber());
58  1 assertEquals(0, numbers.getAbsoluteChapterNumber());
59  1 assertEquals(0, numbers.getChapterNumber());
60  1 assertEquals(0, numbers.getAbsoluteSectionNumber());
61  1 assertEquals(0, numbers.getSectionNumber());
62  1 assertEquals(0, numbers.getSubsectionNumber());
63  1 assertEquals(0, numbers.getNodeNumber());
64  1 assertEquals(0, numbers.getAxiomNumber());
65  1 assertEquals(0, numbers.getPropositionNumber());
66  1 assertEquals(0, numbers.getPredicateDefinitionNumber());
67  1 assertEquals(0, numbers.getFunctionDefinitionNumber());
68  1 assertEquals(0, numbers.getRuleNumber());
69  1 assertEquals(0, numbers.getVisitPercentage(), 1e-10);
70    }
71   
72    /**
73    * Test hashCode and equals.
74    */
 
75  1 toggle public void testHashCodeAndEquals() throws Exception {
76  1 int remember = 0;
77  1 numbers = new QedeqNumbers(11, 13);
78  1 QedeqNumbers other = new QedeqNumbers(11, 13);
79  1 assertEquals(numbers, other);
80  1 assertEquals(numbers.hashCode(), other.hashCode());
81  1 numbers.increaseImportNumber();
82  1 assertFalse(numbers.equals(other));
83  1 assertFalse(numbers.hashCode() == other.hashCode());
84  1 other.increaseImportNumber();
85  1 assertEquals(numbers, other);
86  1 assertEquals(numbers.hashCode(), other.hashCode());
87  11 for (int i = 0; i < 10; i++) {
88  10 numbers.increaseImportNumber();
89  10 other.increaseImportNumber();
90    }
91  1 assertEquals(numbers, other);
92  1 assertEquals(numbers.hashCode(), other.hashCode());
93   
94  1 remember = numbers.getChapterNumber();
95  1 numbers.increaseChapterNumber(4, true);
96  1 assertEquals(remember + 1, numbers.getChapterNumber());
97  1 assertFalse(numbers.equals(other));
98  1 assertFalse(numbers.hashCode() == other.hashCode());
99  1 other.increaseChapterNumber(4, true);
100  1 assertEquals(numbers, other);
101  1 assertEquals(numbers.hashCode(), other.hashCode());
102   
103  1 remember = numbers.getSectionNumber();
104  1 numbers.increaseSectionNumber(8, true);
105  1 assertEquals(remember + 1, numbers.getSectionNumber());
106  1 assertFalse(numbers.equals(other));
107  1 assertFalse(numbers.hashCode() == other.hashCode());
108  1 other.increaseSectionNumber(8, true);
109  1 assertEquals(numbers, other);
110  1 assertEquals(numbers.hashCode(), other.hashCode());
111   
112  1 remember = numbers.getSubsectionNumber();
113  1 numbers.increaseSubsectionNumber();
114  1 assertEquals(remember + 1, numbers.getSubsectionNumber());
115  1 assertFalse(numbers.equals(other));
116  1 assertFalse(numbers.hashCode() == other.hashCode());
117  1 other.increaseSubsectionNumber();
118  1 assertEquals(numbers, other);
119  1 assertEquals(numbers.hashCode(), other.hashCode());
120   
121  1 remember = numbers.getAxiomNumber();
122  1 numbers.increaseAxiomNumber();
123  1 assertEquals(remember + 1, numbers.getAxiomNumber());
124  1 assertFalse(numbers.equals(other));
125  1 assertFalse(numbers.hashCode() == other.hashCode());
126  1 other.increaseAxiomNumber();
127  1 assertEquals(numbers, other);
128  1 assertEquals(numbers.hashCode(), other.hashCode());
129   
130  1 remember = numbers.getPredicateDefinitionNumber();
131  1 numbers.increasePredicateDefinitionNumber();
132  1 assertEquals(remember + 1, numbers.getPredicateDefinitionNumber());
133  1 assertFalse(numbers.equals(other));
134  1 assertFalse(numbers.hashCode() == other.hashCode());
135  1 other.increasePredicateDefinitionNumber();
136  1 assertEquals(numbers, other);
137  1 assertEquals(numbers.hashCode(), other.hashCode());
138   
139  1 remember = numbers.getFunctionDefinitionNumber();
140  1 numbers.increaseFunctionDefinitionNumber();
141  1 assertEquals(remember + 1, numbers.getFunctionDefinitionNumber());
142  1 assertFalse(numbers.equals(other));
143  1 assertFalse(numbers.hashCode() == other.hashCode());
144  1 other.increaseFunctionDefinitionNumber();
145  1 assertEquals(numbers, other);
146  1 assertEquals(numbers.hashCode(), other.hashCode());
147   
148  1 remember = numbers.getPropositionNumber();
149  1 numbers.increasePropositionNumber();
150  1 assertEquals(remember + 1, numbers.getPropositionNumber());
151  1 assertFalse(numbers.equals(other));
152  1 assertFalse(numbers.hashCode() == other.hashCode());
153  1 other.increasePropositionNumber();
154  1 assertEquals(numbers, other);
155  1 assertEquals(numbers.hashCode(), other.hashCode());
156   
157  1 remember = numbers.getRuleNumber();
158  1 numbers.increaseRuleNumber();
159  1 assertEquals(remember + 1, numbers.getRuleNumber());
160  1 assertFalse(numbers.equals(other));
161  1 assertFalse(numbers.hashCode() == other.hashCode());
162  1 other.increaseRuleNumber();
163  1 assertEquals(numbers, other);
164  1 assertEquals(numbers.hashCode(), other.hashCode());
165   
166    }
167   
168    /**
169    * Test that {@link QedeqNumbers#getVisitPercentage()} is nondecreasing.
170    */
 
171  1 toggle public void testGetVisitPercentage() throws Exception {
172  1 Random generator = new Random(19580427);
173  1 iterateAndCheck(generator);
174  1 iterateAndCheck(generator);
175  1 iterateAndCheck(generator);
176  1 iterateAndCheck(generator);
177  1 iterateAndCheck(generator);
178  1 iterateAndCheck(generator);
179    }
180   
181    /**
182    * @param generator
183    * @throws Exception
184    */
 
185  6 toggle private void iterateAndCheck(Random generator) throws Exception {
186  6 final int imports = generator.nextInt(10);
187  6 final int chapters = generator.nextInt(20);
188  6 numbers = new QedeqNumbers(imports, chapters);
189  6 old = null;
190  6 oldVisitPercentage = 0;
191  6 checkVarious();
192  45 for (int i = 0; i < imports; i++) {
193  39 assertEquals(i, numbers.getImportNumber());
194  39 numbers.increaseImportNumber();
195  39 checkVarious();
196    }
197  70 for (int i = 0; i < chapters; i++) {
198  64 final int sections = generator.nextInt(30);
199  64 final boolean chapterNumbering = generator.nextBoolean();
200  64 assertEquals(i, numbers.getAbsoluteChapterNumber());
201  64 numbers.increaseChapterNumber(sections, chapterNumbering);
202  64 assertEquals(i + 1, numbers.getAbsoluteChapterNumber());
203  64 assertEquals(chapterNumbering, numbers.isChapterNumbering());
204  64 checkVarious();
205  987 for (int j = 0; j < sections; j++) {
206  923 final int subsections = generator.nextInt(30);
207  923 final boolean sectionNumbering = generator.nextBoolean();
208  923 assertEquals(j, numbers.getAbsoluteSectionNumber());
209  923 numbers.increaseSectionNumber(subsections, sectionNumbering);
210  923 assertEquals(j + 1, numbers.getAbsoluteSectionNumber());
211  923 assertEquals(sectionNumbering, numbers.isSectionNumbering());
212  923 checkVarious();
213  14554 for (int k = 0; k < subsections; k++) {
214  13631 final int kind = generator.nextInt(6);
215  13631 switch (kind) {
216  2250 case 0:
217  2250 numbers.increaseSubsectionNumber();
218  2250 break;
219  2304 case 1:
220  2304 numbers.increaseNodeNumber();
221  2304 checkVarious();
222  2304 numbers.increaseAxiomNumber();
223  2304 break;
224  2279 case 2:
225  2279 numbers.increaseNodeNumber();
226  2279 checkVarious();
227  2279 numbers.increasePredicateDefinitionNumber();
228  2279 break;
229  2283 case 3:
230  2283 numbers.increaseNodeNumber();
231  2283 checkVarious();
232  2283 numbers.increaseFunctionDefinitionNumber();
233  2283 break;
234  2234 case 4:
235  2234 numbers.increaseNodeNumber();
236  2234 checkVarious();
237  2234 numbers.increasePropositionNumber();
238  2234 break;
239  2281 case 5:
240  2281 numbers.increaseNodeNumber();
241  2281 checkVarious();
242  2281 numbers.increaseRuleNumber();
243  2281 break;
244  0 default:
245  0 throw new RuntimeException("unknown case");
246    }
247  13631 checkVarious();
248  13631 assertEquals(k + 1, numbers.getSubsectionNumber()
249    + numbers.getNodeNumber());
250    }
251    }
252    }
253  6 numbers.setFinished(true);
254  6 assertTrue(numbers.isFinished());
255  6 assertTrue(Math.abs(100 - numbers.getVisitPercentage()) < 1e10);
256    }
257   
 
258  26044 toggle public void checkVarious() throws Exception {
259  26044 assertFalse(numbers.isFinished());
260  26044 assertFalse(numbers.equals(old));
261  26044 if (old != null) {
262  26038 assertFalse(numbers.hashCode() == old.hashCode());
263    }
264  26044 final QedeqNumbers compare = new QedeqNumbers(numbers);
265  26044 assertEquals(numbers, compare);
266  26044 assertEquals(numbers.hashCode(), compare.hashCode());
267  26044 assertEquals(numbers.toString(), compare.toString());
268  26044 assertFalse(oldVisitPercentage > numbers.getVisitPercentage());
269  26044 assertTrue(numbers.getVisitPercentage() >= 0);
270  26044 assertTrue(numbers.getVisitPercentage() <= 100);
271  26044 old = new QedeqNumbers(numbers);
272    }
273   
274    }