@@ -67,6 +67,8 @@ val generate: TaskProvider<Task> = tasks.register("generate") {
67
67
68
68
val tupleMap = createStringBuilder(packageName)
69
69
70
+ val tupleDrop = createStringBuilder(packageName)
71
+
70
72
val tupleFactory = StringBuilder (dontModifyNotice)
71
73
.append(" @file:Suppress(\" MethodOverloading\" , \" FunctionName\" )\n " )
72
74
.append(" package " ).append(packageName).append(" \n\n " )
@@ -342,13 +344,47 @@ val generate: TaskProvider<Task> = tasks.register("generate") {
342
344
).appendLine()
343
345
344
346
appendMap(" a$argNum " , " A$argNum " )
345
-
346
347
if (upperNumber <= 3 ) {
347
- val argNameToMap = getArgName(argNum)
348
- val argNameCapitalized = argNameToMap .replaceFirstChar {
348
+ val argName = getArgName(argNum)
349
+ val argNameCapitalized = argName .replaceFirstChar {
349
350
if (it.isLowerCase()) it.titlecase(Locale .getDefault()) else it.toString()
350
351
}
351
- appendMap(argNameToMap, argNameCapitalized)
352
+ appendMap(argName, argNameCapitalized)
353
+ }
354
+
355
+ if (upperNumber >= 3 ) {
356
+ val numberWithoutDrop = numbers.toMutableList()
357
+ numberWithoutDrop.remove(argNum)
358
+ val typeArgsWithoutDrop = numberWithoutDrop.joinToString(" , " ) { " A${it} " }
359
+ val upperNumberOneLower = upperNumber - 1
360
+ val tupleNameOneLower = getTupleName(upperNumberOneLower)
361
+
362
+ fun appendDrop (argNameToDrop : String , argNameCapitalized : String ) =
363
+ tupleDrop.append(
364
+ """
365
+ |/**
366
+ | * Creates a new [$tupleNameOneLower ] by copying `this` [$tupleName ] but dropping its ${
367
+ withOrdinalIndicator(argNum)
368
+ } component ([$tupleName .$argNameToDrop ]).
369
+ | *
370
+ | * @return The newly created [$tupleNameOneLower ].
371
+ | *
372
+ | * @since 3.2.0
373
+ | */
374
+ |fun <$typeArgs > $tupleName <$typeArgs >.drop$argNameCapitalized (): $tupleNameOneLower <$typeArgsWithoutDrop > =
375
+ | Tuple(${numberWithoutDrop.joinToString(" , " ) { " a$it " }} )
376
+ |
377
+ """ .trimMargin()
378
+ ).appendLine()
379
+
380
+ appendDrop(" a$argNum " , " A$argNum " )
381
+ if (upperNumber <= 3 ) {
382
+ val argName = getArgName(argNum)
383
+ val argNameCapitalized = argName.replaceFirstChar {
384
+ if (it.isLowerCase()) it.titlecase(Locale .getDefault()) else it.toString()
385
+ }
386
+ appendDrop(argName, argNameCapitalized)
387
+ }
352
388
}
353
389
}
354
390
}
@@ -667,6 +703,9 @@ val generate: TaskProvider<Task> = tasks.register("generate") {
667
703
val tupleMapFile = packageDir.resolve(" tupleMap.kt" )
668
704
tupleMapFile.writeText(tupleMap.toString())
669
705
706
+ val tupleDropFile = packageDir.resolve(" tupleDrop.kt" )
707
+ tupleDropFile.writeText(tupleDrop.toString())
708
+
670
709
val tupleFactoryFile = packageDir.resolve(" tupleFactory.kt" )
671
710
tupleFactoryFile.writeText(tupleFactory.toString())
672
711
@@ -831,7 +870,8 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
831
870
val (value1, rest) = toValues(type)
832
871
val values = rest + arrayOf(value1)
833
872
val valuesSize = values.size
834
- return arrayOfNulls<String >(size).mapIndexed { index, _ -> values[index % valuesSize] }.joinToString(" , " )
873
+ return arrayOfNulls<String >(size).mapIndexed { index, _ -> values[index % valuesSize] }
874
+ .joinToString(" , " )
835
875
}
836
876
837
877
primitiveTypes.forEach { (type, arrayTypeUpper) ->
@@ -1066,6 +1106,9 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
1066
1106
val tupleMapTest = createStringBuilder(" $packageName .map" )
1067
1107
.appendTest(" ${tupleName} MapTest" )
1068
1108
1109
+ val tupleDropTest = createStringBuilder(" $packageName .drop" )
1110
+ .appendTest(" ${tupleName} DropTest" )
1111
+
1069
1112
val toTupleTest = createStringBuilder(" $packageName .toTuple" )
1070
1113
.appendTest(" Tuple${upperNumber} LikeToTupleTest" )
1071
1114
@@ -1141,18 +1184,45 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
1141
1184
1142
1185
appendMapTest(" A$argNum " )
1143
1186
1144
- if (upperNumber <= 3 ){
1187
+ if (upperNumber <= 3 ) {
1145
1188
val argNameToMap = getArgName(argNum)
1146
1189
val argNameCapitalized = argNameToMap.replaceFirstChar {
1147
1190
if (it.isLowerCase()) it.titlecase(Locale .getDefault()) else it.toString()
1148
1191
}
1149
1192
appendMapTest(argNameCapitalized)
1150
1193
}
1151
1194
1195
+ if (upperNumber >= 3 ) {
1196
+
1197
+ fun appendDropTest (argNameCapitalized : String ) {
1198
+ tupleDropTest.append(
1199
+ """
1200
+ | @Test
1201
+ | fun drop${argNameCapitalized} () {
1202
+ | $vals
1203
+ | val tuple = $tupleCreation
1204
+ |
1205
+ | expect(tuple.drop${argNameCapitalized} ()) {
1206
+ | ${
1207
+ (1 .. upperNumber - 1 ).joinToString(" \n " ) {
1208
+ " feature { f(it::a${it} ) }.toBeTheInstance(a${if (it < argNum) it else it + 1 } )"
1209
+ }
1210
+ }
1211
+ | }
1212
+ | }
1152
1213
1214
+ """ .trimMargin()
1215
+ ).appendLine()
1216
+ }
1153
1217
1154
-
1155
-
1218
+ if (upperNumber <= 3 ) {
1219
+ val argNameToDrop = getArgName(argNum)
1220
+ val argNameCapitalized = argNameToDrop.replaceFirstChar {
1221
+ if (it.isLowerCase()) it.titlecase(Locale .getDefault()) else it.toString()
1222
+ }
1223
+ appendDropTest(argNameCapitalized)
1224
+ }
1225
+ }
1156
1226
}
1157
1227
1158
1228
toTupleTest.append(
@@ -1300,6 +1370,12 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
1300
1370
val mapTestFile = packageDir.resolve(" map/${tupleName} MapTest.kt" )
1301
1371
mapTestFile.writeText(tupleMapTest.toString())
1302
1372
1373
+ tupleDropTest.append(" }" )
1374
+ if (upperNumber >= 3 ) {
1375
+ val dropTestFile = packageDir.resolve(" drop/${tupleName} DropTest.kt" )
1376
+ dropTestFile.writeText(tupleDropTest.toString())
1377
+ }
1378
+
1303
1379
toTupleTest
1304
1380
.append(
1305
1381
"""
0 commit comments