|
1 |
| - |
2 | 1 | package com.thealgorithms.others;
|
3 | 2 |
|
4 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals;
|
| 4 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
5 | 5 |
|
6 | 6 | import org.junit.jupiter.api.Test;
|
7 | 7 |
|
8 | 8 | public class CRCAlgorithmTest {
|
9 | 9 |
|
10 | 10 | @Test
|
11 |
| - void test1() { |
| 11 | + void testNoErrorsWithZeroBER() { |
12 | 12 | CRCAlgorithm c = new CRCAlgorithm("10010101010100101010010000001010010101010", 10, 0.0);
|
13 |
| - |
14 |
| - // A bit-error rate of 0.0 should not provide any wrong messages |
15 |
| - c.changeMess(); |
| 13 | + c.generateRandomMess(); |
16 | 14 | c.divideMessageWithP(false);
|
17 |
| - assertEquals(c.getWrongMess(), 0); |
| 15 | + c.changeMess(); |
| 16 | + c.divideMessageWithP(true); |
| 17 | + assertEquals(0, c.getWrongMess(), "BER=0 should produce no wrong messages"); |
| 18 | + assertEquals(0, c.getWrongMessCaught(), "No errors, so no caught wrong messages"); |
| 19 | + assertEquals(0, c.getWrongMessNotCaught(), "No errors, so no uncaught wrong messages"); |
| 20 | + assertTrue(c.getCorrectMess() > 0, "Should have some correct messages"); |
18 | 21 | }
|
19 | 22 |
|
20 | 23 | @Test
|
21 |
| - void test2() { |
| 24 | + void testAllErrorsWithBEROne() { |
22 | 25 | CRCAlgorithm c = new CRCAlgorithm("10010101010100101010010000001010010101010", 10, 1.0);
|
| 26 | + c.generateRandomMess(); |
| 27 | + c.divideMessageWithP(false); |
| 28 | + c.changeMess(); |
| 29 | + c.divideMessageWithP(true); |
| 30 | + assertTrue(c.getWrongMess() > 0, "BER=1 should produce wrong messages"); |
| 31 | + assertEquals(0, c.getCorrectMess(), "BER=1 should produce no correct messages"); |
| 32 | + } |
23 | 33 |
|
24 |
| - // A bit error rate of 1.0 should not provide any correct messages |
| 34 | + @Test |
| 35 | + void testIntermediateBER() { |
| 36 | + CRCAlgorithm c = new CRCAlgorithm("1101", 4, 0.5); |
| 37 | + c.generateRandomMess(); |
| 38 | + for (int i = 0; i < 1000; i++) { |
| 39 | + c.refactor(); |
| 40 | + c.generateRandomMess(); |
| 41 | + c.divideMessageWithP(false); |
| 42 | + c.changeMess(); |
| 43 | + c.divideMessageWithP(true); |
| 44 | + } |
| 45 | + assertTrue(c.getWrongMess() > 0, "Some wrong messages expected with BER=0.5"); |
| 46 | + assertTrue(c.getWrongMessCaught() >= 0, "Wrong messages caught counter >= 0"); |
| 47 | + assertTrue(c.getWrongMessNotCaught() >= 0, "Wrong messages not caught counter >= 0"); |
| 48 | + assertTrue(c.getCorrectMess() >= 0, "Correct messages counter >= 0"); |
| 49 | + assertEquals(c.getWrongMess(), c.getWrongMessCaught() + c.getWrongMessNotCaught(), "Sum of caught and not caught wrong messages should equal total wrong messages"); |
| 50 | + } |
| 51 | + |
| 52 | + @Test |
| 53 | + void testMessageChangedFlag() { |
| 54 | + CRCAlgorithm c = new CRCAlgorithm("1010", 4, 1.0); |
| 55 | + c.generateRandomMess(); |
| 56 | + c.divideMessageWithP(false); |
| 57 | + c.changeMess(); |
| 58 | + assertTrue(c.getWrongMess() > 0, "Message should be marked as changed with BER=1"); |
| 59 | + } |
| 60 | + |
| 61 | + @Test |
| 62 | + void testSmallMessageSize() { |
| 63 | + CRCAlgorithm c = new CRCAlgorithm("11", 2, 0.0); |
| 64 | + c.generateRandomMess(); |
| 65 | + c.divideMessageWithP(false); |
25 | 66 | c.changeMess();
|
| 67 | + c.divideMessageWithP(true); |
| 68 | + assertEquals(0, c.getWrongMess(), "No errors expected for BER=0 with small message"); |
| 69 | + } |
| 70 | + |
| 71 | + @Test |
| 72 | + void testLargeMessageSize() { |
| 73 | + CRCAlgorithm c = new CRCAlgorithm("1101", 1000, 0.01); |
| 74 | + c.generateRandomMess(); |
26 | 75 | c.divideMessageWithP(false);
|
27 |
| - assertEquals(c.getCorrectMess(), 0); |
| 76 | + c.changeMess(); |
| 77 | + c.divideMessageWithP(true); |
| 78 | + // Just ensure counters are updated, no exceptions |
| 79 | + assertTrue(c.getWrongMess() >= 0); |
| 80 | + assertTrue(c.getCorrectMess() >= 0); |
28 | 81 | }
|
29 | 82 | }
|
0 commit comments