@@ -19,80 +19,104 @@ public class SegmentGeneratorTest {
19
19
20
20
@ Test
21
21
public void testGenerateSegments () throws Exception {
22
- /*
23
- List<String> tokenStrings = Lists.newArrayList("0", "1",
24
- "56713727820156410577229101238628035242", "56713727820156410577229101238628035243",
25
- "113427455640312821154458202477256070484", "113427455640312821154458202477256070485");
26
- List<BigInteger> tokens = Lists.transform(tokenStrings, new Function<String, BigInteger>() {
27
- @Nullable
28
- @Override
29
- public BigInteger apply(@Nullable String s) {
30
- return new BigInteger(s);
31
- }
32
- });
22
+ List <BigInteger > tokens = Lists .transform (
23
+ Lists .newArrayList (
24
+ "0" , "1" ,
25
+ "56713727820156410577229101238628035242" , "56713727820156410577229101238628035243" ,
26
+ "113427455640312821154458202477256070484" , "113427455640312821154458202477256070485" ),
27
+ new Function <String , BigInteger >() {
28
+ @ Nullable
29
+ @ Override
30
+ public BigInteger apply (@ Nullable String s ) {
31
+ return new BigInteger (s );
32
+ }
33
+ }
34
+ );
33
35
34
36
SegmentGenerator generator = new SegmentGenerator ("foo.bar.RandomPartitioner" );
35
- List<RepairSegment> segments = generator.generateSegments(3, tokens);
36
- assertEquals(11, segments.size());
37
- assertEquals("(0,1)", segments.get(0).toString());
38
- assertEquals("(1,18904575940052136859076367079542678415)", segments.get(1).toString());
39
- assertEquals("(18904575940052136859076367079542678415,37809151880104273718152734159085356829)",
40
- segments.get(2).toString());
41
- assertEquals("(37809151880104273718152734159085356829,56713727820156410577229101238628035242)",
42
- segments.get(3).toString());
43
- assertEquals("(56713727820156410577229101238628035242,75618303760208547436305468318170713657)",
44
- segments.get(4).toString());
45
- assertEquals("(75618303760208547436305468318170713657,94522879700260684295381835397713392072)",
37
+ List <RepairSegment > segments = generator .generateSegments (10 , tokens );
38
+ assertEquals (15 , segments .size ());
39
+ assertEquals ("[0,1)" ,
40
+ segments .get (0 ).toString ());
41
+ assertEquals ("[56713727820156410577229101238628035242,56713727820156410577229101238628035243)" ,
46
42
segments .get (5 ).toString ());
47
- assertEquals("(94522879700260684295381835397713392072,113427455640312821154458202477256070484)",
48
- segments.get(6).toString());
49
- assertEquals("(113427455640312821154458202477256070484,113427455640312821154458202477256070485)",
50
- segments.get(7).toString());
51
- assertEquals("(113427455640312821154458202477256070485,132332031580364958013534569556798748900)",
52
- segments.get(8).toString());
53
- assertEquals("(132332031580364958013534569556798748900,151236607520417094872610936636341427315)",
54
- segments.get(9).toString());
55
- assertEquals("(151236607520417094872610936636341427315,0)", segments.get(10).toString());
43
+ assertEquals ("[113427455640312821154458202477256070484,113427455640312821154458202477256070485)" ,
44
+ segments .get (10 ).toString ());
45
+
46
+
47
+ tokens = Lists .transform (
48
+ Lists .newArrayList (
49
+ "5" , "6" ,
50
+ "56713727820156410577229101238628035242" , "56713727820156410577229101238628035243" ,
51
+ "113427455640312821154458202477256070484" , "113427455640312821154458202477256070485" ),
52
+ new Function <String , BigInteger >() {
53
+ @ Nullable
54
+ @ Override
55
+ public BigInteger apply (@ Nullable String s ) {
56
+ return new BigInteger (s );
57
+ }
58
+ }
59
+ );
60
+
61
+ segments = generator .generateSegments (10 , tokens );
62
+ assertEquals (15 , segments .size ());
63
+ assertEquals ("[5,6)" ,
64
+ segments .get (0 ).toString ());
65
+ assertEquals ("[56713727820156410577229101238628035242,56713727820156410577229101238628035243)" ,
66
+ segments .get (5 ).toString ());
67
+ assertEquals ("[113427455640312821154458202477256070484,113427455640312821154458202477256070485)" ,
68
+ segments .get (10 ).toString ());
69
+ }
56
70
57
- tokenStrings = Lists.newArrayList("5", "6",
58
- "56713727820156410577229101238628035242", "56713727820156410577229101238628035242",
59
- "113427455640312821154458202477256070484", "113427455640312821154458202477256070485");
60
- tokens = Lists.transform(tokenStrings, new Function<String, BigInteger>() {
71
+ @ Test (expected =ReaperException .class )
72
+ public void testZeroSizeRange () throws Exception {
73
+ List <String > tokenStrings = Lists .newArrayList (
74
+ "0" , "1" ,
75
+ "56713727820156410577229101238628035242" , "56713727820156410577229101238628035242" ,
76
+ "113427455640312821154458202477256070484" , "113427455640312821154458202477256070485" );
77
+ List <BigInteger > tokens = Lists .transform (tokenStrings , new Function <String , BigInteger >() {
61
78
@ Nullable
62
79
@ Override
63
80
public BigInteger apply (@ Nullable String s ) {
64
81
return new BigInteger (s );
65
82
}
66
83
});
67
84
68
- generator = new SegmentGenerator("foo.bar.RandomPartitioner");
69
- segments = generator.generateSegments(3, tokens);
70
- assertEquals(11, segments.size());
71
- assertEquals("(5,6)", segments.get(0).toString());
72
- assertEquals("(6,18904575940052136859076367079542678419)", segments.get(1).toString());
73
- assertEquals("(151236607520417094872610936636341427319,5)", segments.get(10).toString());
85
+ SegmentGenerator generator = new SegmentGenerator ("foo.bar.RandomPartitioner" );
86
+ generator .generateSegments (10 , tokens );
87
+ }
74
88
75
- tokenStrings = Lists.newArrayList("-9223372036854775808", "-9223372036854775807",
76
- "-3074457345618258603", "-3074457345618258602", "3074457345618258602", "3074457345618258603");
77
- tokens = Lists.transform(tokenStrings, new Function<String, BigInteger>() {
89
+ @ Test
90
+ public void testRotatedRing () throws Exception {
91
+ List <String > tokenStrings = Lists .newArrayList (
92
+ "56713727820156410577229101238628035243" , "113427455640312821154458202477256070484" ,
93
+ "113427455640312821154458202477256070485" , "5" ,
94
+ "6" , "56713727820156410577229101238628035242" );
95
+ List <BigInteger > tokens = Lists .transform (tokenStrings , new Function <String , BigInteger >() {
78
96
@ Nullable
79
97
@ Override
80
98
public BigInteger apply (@ Nullable String s ) {
81
99
return new BigInteger (s );
82
100
}
83
101
});
84
102
85
- generator = new SegmentGenerator("foo.bar.Murmur3Partitioner");
86
- segments = generator.generateSegments(3, tokens);
87
- assertEquals(12, segments.size());
88
- */
103
+ SegmentGenerator generator = new SegmentGenerator ("foo.bar.RandomPartitioner" );
104
+ List <RepairSegment > segments = generator .generateSegments (10 , tokens );
105
+ assertEquals (15 , segments .size ());
106
+ assertEquals ("[113427455640312821154458202477256070484,113427455640312821154458202477256070485)" ,
107
+ segments .get (4 ).toString ());
108
+ assertEquals ("[5,6)" ,
109
+ segments .get (9 ).toString ());
110
+ assertEquals ("[56713727820156410577229101238628035242,56713727820156410577229101238628035243)" ,
111
+ segments .get (14 ).toString ());
89
112
}
90
113
91
114
@ Test (expected =ReaperException .class )
92
- public void testZeroSizeRange () throws Exception {
93
- List <String > tokenStrings = Lists .newArrayList ("0" , "1" ,
94
- "56713727820156410577229101238628035242" , "56713727820156410577229101238628035242" ,
95
- "113427455640312821154458202477256070484" , "113427455640312821154458202477256070485" );
115
+ public void testDisorderedRing () throws Exception {
116
+ List <String > tokenStrings = Lists .newArrayList (
117
+ "0" , "113427455640312821154458202477256070485" , "1" ,
118
+ "56713727820156410577229101238628035242" , "56713727820156410577229101238628035243" ,
119
+ "113427455640312821154458202477256070484" );
96
120
List <BigInteger > tokens = Lists .transform (tokenStrings , new Function <String , BigInteger >() {
97
121
@ Nullable
98
122
@ Override
@@ -102,7 +126,9 @@ public BigInteger apply(@Nullable String s) {
102
126
});
103
127
104
128
SegmentGenerator generator = new SegmentGenerator ("foo.bar.RandomPartitioner" );
105
- List <RepairSegment > segments = generator .generateSegments (3 , tokens );
129
+ generator .generateSegments (10 , tokens );
130
+ // Will throw an exception when concluding that the repair segments don't add up.
131
+ // This is because the tokens were supplied out of order.
106
132
}
107
133
108
134
@ Test
0 commit comments