Skip to content

Commit 39bc7ae

Browse files
Add Generators: Simplified builders for generator set elements.
1 parent dda3ac1 commit 39bc7ae

7 files changed

Lines changed: 225 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
//////////////////////////////////////////////////////////////////////////////
2+
//
3+
// Copyright 2023, Cornutum Project
4+
// www.cornutum.org
5+
//
6+
//////////////////////////////////////////////////////////////////////////////
7+
8+
package org.cornutum.tcases.generator.io;
9+
10+
import org.cornutum.tcases.generator.Generators;
11+
import org.cornutum.tcases.generator.IGeneratorSet;
12+
import static org.cornutum.tcases.generator.Generators.*;
13+
14+
import org.junit.Test;
15+
import static org.hamcrest.MatcherAssert.*;
16+
import static org.hamcrest.Matchers.*;
17+
18+
/**
19+
* Runs tests for the builder interfaces in {@link Generators}
20+
*/
21+
public class GeneratorsTest
22+
{
23+
@Test
24+
public void buildExample()
25+
{
26+
// Given...
27+
IGeneratorSet expected = generatorSetResources_.readJson( "generator-example.json");
28+
29+
// When...
30+
IGeneratorSet generators =
31+
generators()
32+
33+
.generatingByDefault(
34+
tuples( 2)
35+
.seed( 123456789)
36+
.combining(
37+
tuplesOf( 3)
38+
.include( "V-0.**", "V-1")
39+
.exclude( "V-0.V-0-1")
40+
.using(
41+
once(
42+
whenVar( "V-0.V-0-2").is( "L-0-2_2"),
43+
whenVar( "V-0.V-0-3").is( "L-0-3_2"),
44+
whenVar( "V-0.V-0-0").is( "L-0-0_2")))))
45+
46+
.generatingFor( "F", tuples().combining( tuplesOf( 2).include( "V-0.V-0-0", "V-1")))
47+
48+
.build();
49+
50+
// Then...
51+
assertThat( "Generators", generators, is( expected));
52+
}
53+
54+
private GeneratorSetResources generatorSetResources_ = new GeneratorSetResources( TestGeneratorSetJson.class);
55+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"*": {
3+
"tuples": 2,
4+
"seed": 123456789,
5+
"combiners": [
6+
{
7+
"tuples": 3,
8+
"include": [
9+
"V-0.**",
10+
"V-1"
11+
],
12+
"exclude": [
13+
"V-0.V-0-1"
14+
],
15+
"once": [
16+
{
17+
"V-0.V-0-2": "L-0-2_2",
18+
"V-0.V-0-3": "L-0-3_2",
19+
"V-0.V-0-0": "L-0-0_2"
20+
}
21+
]
22+
}
23+
]
24+
},
25+
26+
"F": {
27+
"combiners": [
28+
{
29+
"tuples": 2,
30+
"include": [
31+
"V-0.V-0-0",
32+
"V-1"
33+
]
34+
}
35+
]
36+
}
37+
}

tcases-lib/src/main/java/org/cornutum/tcases/VarBindingBuilder.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ public VarBindingBuilder var( String var)
9595
return this;
9696
}
9797

98+
/**
99+
* Changes the binding variable value.
100+
*/
101+
public VarBindingBuilder is( Object value)
102+
{
103+
return value( value);
104+
}
105+
98106
/**
99107
* Changes the binding variable value.
100108
*/
@@ -143,6 +151,14 @@ public VarBindingBuilder notApplicable( boolean na)
143151
return this;
144152
}
145153

154+
/**
155+
* Changes this binding to "not applicable".
156+
*/
157+
public VarBindingBuilder isNA()
158+
{
159+
return notApplicable();
160+
}
161+
146162
/**
147163
* Changes this binding to "not applicable".
148164
*/

tcases-lib/src/main/java/org/cornutum/tcases/generator/GeneratorSetBuilder.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,22 @@ public GeneratorSetBuilder start( GeneratorSet generatorSet)
7070
return this;
7171
}
7272

73+
/**
74+
* Adds a generator to this set for the given function.
75+
*/
76+
public GeneratorSetBuilder generatingFor( String functionName, TupleGeneratorBuilder generator)
77+
{
78+
return generator( functionName, generator.build());
79+
}
80+
81+
/**
82+
* Adds a default generator to this set.
83+
*/
84+
public GeneratorSetBuilder generatingByDefault( TupleGeneratorBuilder generator)
85+
{
86+
return defaultGenerator( generator.build());
87+
}
88+
7389
/**
7490
* Adds a generator to this set for the given function.
7591
*/
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
//////////////////////////////////////////////////////////////////////////////
2+
//
3+
// Copyright 2023, Cornutum Project
4+
// www.cornutum.org
5+
//
6+
//////////////////////////////////////////////////////////////////////////////
7+
8+
package org.cornutum.tcases.generator;
9+
10+
import org.cornutum.tcases.VarBindingBuilder;
11+
12+
import java.util.Arrays;
13+
14+
/**
15+
* Defines methods to build elements of a {@link GeneratorSet}.
16+
*/
17+
public final class Generators
18+
{
19+
/**
20+
* Creates a new Generators instance.
21+
*/
22+
private Generators()
23+
{
24+
// Static methods only
25+
}
26+
27+
/**
28+
* Returns a new {@link GeneratorSetBuilder}.
29+
*/
30+
public static GeneratorSetBuilder generators()
31+
{
32+
return new GeneratorSetBuilder();
33+
}
34+
35+
/**
36+
* Returns a new {@link TupleGeneratorBuilder} with the given default tuple size.
37+
*/
38+
public static TupleGeneratorBuilder tuples( int tupleSize)
39+
{
40+
return new TupleGeneratorBuilder().tuples( tupleSize);
41+
}
42+
43+
/**
44+
* Returns a new {@link TupleGeneratorBuilder} with default tuple size 1.
45+
*/
46+
public static TupleGeneratorBuilder tuples()
47+
{
48+
return tuples( 1);
49+
}
50+
51+
/**
52+
* Returns a new {@link TupleCombinerBuilder} with the given tuple size.
53+
*/
54+
public static TupleCombinerBuilder tuplesOf( int tupleSize)
55+
{
56+
return new TupleCombinerBuilder().tuples( tupleSize);
57+
}
58+
59+
/**
60+
* Returns a {@link TupleRefBuilder} for new "once" tuple.
61+
*/
62+
public static TupleRefBuilder once( VarBindingBuilder... bindings)
63+
{
64+
return new TupleRefBuilder().bindings( Arrays.stream( bindings).map( VarBindingBuilder::build));
65+
}
66+
67+
/**
68+
* Returns a {@link VarBindingBuilder} for the given variable.
69+
*/
70+
public static VarBindingBuilder whenVar( String varPath)
71+
{
72+
return VarBindingBuilder.with( varPath);
73+
}
74+
75+
}

tcases-lib/src/main/java/org/cornutum/tcases/generator/TupleCombinerBuilder.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
package org.cornutum.tcases.generator;
1010

11+
import java.util.Arrays;
1112
import java.util.Optional;
1213
import java.util.stream.Stream;
1314

@@ -158,6 +159,14 @@ public TupleCombinerBuilder once( TupleRef... tupleRefs)
158159
return this;
159160
}
160161

162+
/**
163+
* Adds the given once-only tuples to this combiner.
164+
*/
165+
public TupleCombinerBuilder using( TupleRefBuilder... tupleRefs)
166+
{
167+
return once( Arrays.stream( tupleRefs).map( TupleRefBuilder::build));
168+
}
169+
161170
/**
162171
* Adds the given once-only tuples to this combiner.
163172
*/

tcases-lib/src/main/java/org/cornutum/tcases/generator/TupleGeneratorBuilder.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
package org.cornutum.tcases.generator;
1010

11+
import java.util.Arrays;
1112
import java.util.Optional;
1213
import java.util.stream.Stream;
1314

@@ -89,6 +90,22 @@ public TupleGeneratorBuilder seed( Long seed)
8990
return this;
9091
}
9192

93+
/**
94+
* Changes the random number sequence seed for this generator.
95+
*/
96+
public TupleGeneratorBuilder seed( int seed)
97+
{
98+
return seed( (long) seed);
99+
}
100+
101+
/**
102+
* Add the given {@link TupleCombiner} instances to this generator.
103+
*/
104+
public TupleGeneratorBuilder combining( TupleCombinerBuilder... combiners)
105+
{
106+
return combiners( Arrays.stream( combiners).map( TupleCombinerBuilder::build));
107+
}
108+
92109
/**
93110
* Add the given {@link TupleCombiner} instances to this generator.
94111
*/

0 commit comments

Comments
 (0)