diff --git a/build.gradle b/build.gradle index fdf4fbd..475ae75 100644 --- a/build.gradle +++ b/build.gradle @@ -83,6 +83,14 @@ task generateTestSource(type: JavaExec) { args = ['tests', 'silent'] } +task forceGenerateTestSource(type: JavaExec) { + group = 'internal' + description = 'Builds the sourcecode for the Tests' + classpath = sourceSets.builder.runtimeClasspath + main = 'speiger.src.builder.PrimitiveCollectionsBuilder' + args = ['tests', 'silent', 'force'] +} + task generateLimitSource(type: JavaExec) { group = 'internal' description = 'Builds the Sourcecode with the ModuleSettings.json applied' @@ -121,7 +129,7 @@ task testBooleans(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" + maxHeapSize = maxMemory } task testBytes(type: Test) { @@ -133,8 +141,8 @@ task testBytes(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" - maxParallelForks = 2 + maxHeapSize = maxMemory + maxParallelForks = testThreads as Integer } task testShorts(type: Test) { @@ -146,8 +154,8 @@ task testShorts(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" - maxParallelForks = 2 + maxHeapSize = maxMemory + maxParallelForks = testThreads as Integer } task testChars(type: Test) { @@ -159,8 +167,8 @@ task testChars(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" - maxParallelForks = 2 + maxHeapSize = maxMemory + maxParallelForks = testThreads as Integer } task testInts(type: Test) { @@ -172,8 +180,8 @@ task testInts(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" - maxParallelForks = 2 + maxHeapSize = maxMemory + maxParallelForks = testThreads as Integer } task testLongs(type: Test) { @@ -185,8 +193,8 @@ task testLongs(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" - maxParallelForks = 2 + maxHeapSize = maxMemory + maxParallelForks = testThreads as Integer } task testFloats(type: Test) { @@ -198,8 +206,8 @@ task testFloats(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" - maxParallelForks = 2 + maxHeapSize = maxMemory + maxParallelForks = testThreads as Integer } task testDoubles(type: Test) { @@ -211,8 +219,8 @@ task testDoubles(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" - maxParallelForks = 2 + maxHeapSize = maxMemory + maxParallelForks = testThreads as Integer } task testObjects(type: Test) { @@ -224,8 +232,8 @@ task testObjects(type: Test) { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" - maxParallelForks = 2 + maxHeapSize = maxMemory + maxParallelForks = testThreads as Integer } if(System.getProperty("full_test_suite", "false").toBoolean()) { @@ -248,7 +256,7 @@ test { } useJUnit() ignoreFailures = true - maxHeapSize = "1024m" + maxHeapSize = maxMemory } jacocoTestReport { diff --git a/gradle.properties b/gradle.properties index 659b74c..f461305 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,4 @@ -org.gradle.jvmargs=-Xmx3G \ No newline at end of file +org.gradle.jvmargs=-Xmx3G + +maxMemory = 1024m +testThreads = 2 \ No newline at end of file diff --git a/src/builder/resources/speiger/assets/collections/templates/maps/impl/concurrent/ConcurrentOpenHashMap.template b/src/builder/resources/speiger/assets/collections/templates/maps/impl/concurrent/ConcurrentOpenHashMap.template index dfb5a45..5329958 100644 --- a/src/builder/resources/speiger/assets/collections/templates/maps/impl/concurrent/ConcurrentOpenHashMap.template +++ b/src/builder/resources/speiger/assets/collections/templates/maps/impl/concurrent/ConcurrentOpenHashMap.template @@ -680,7 +680,7 @@ public class CONCURRENT_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY try { int index = seg.firstIndex; while(index != -1){ - action.accept(new MapEntry(index, i)); + action.accept(new ValueMapEntry(index, i)); index = (int)seg.links[index]; } } @@ -720,7 +720,7 @@ public class CONCURRENT_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY try { int index = seg.firstIndex; while(index != -1) { - action.accept(count++, new MapEntry(index, i)); + action.accept(count++, new ValueMapEntry(index, i)); index = (int)seg.links[index]; } } @@ -739,7 +739,7 @@ public class CONCURRENT_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY try { int index = seg.firstIndex; while(index != -1) { - action.accept(input, new MapEntry(index, i)); + action.accept(input, new ValueMapEntry(index, i)); index = (int)seg.links[index]; } } @@ -825,7 +825,7 @@ public class CONCURRENT_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY try { int index = seg.firstIndex; while(index != -1) { - state = operator.apply(state, new MapEntry(index, i)); + state = operator.apply(state, new ValueMapEntry(index, i)); index = (int)seg.links[index]; } } @@ -849,11 +849,11 @@ public class CONCURRENT_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY while(index != -1) { if(empty) { empty = false; - state = new MapEntry(index, i); + state = new ValueMapEntry(index, i); index = (int)seg.links[index]; continue; } - state = operator.apply(state, new MapEntry(index, i)); + state = operator.apply(state, new ValueMapEntry(index, i)); index = (int)seg.links[index]; } } @@ -1547,12 +1547,12 @@ public class CONCURRENT_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE next() { - return entry = new MapEntry(nextEntry(), currentSegment()); + return entry = new ValueMapEntry(nextEntry(), currentSegment()); } @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE previous() { - return entry = new MapEntry(previousEntry(), currentSegment()); + return entry = new ValueMapEntry(previousEntry(), currentSegment()); } @Override @@ -1737,6 +1737,33 @@ public class CONCURRENT_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY } } + protected class ValueMapEntry extends MapEntry { + protected KEY_TYPE key; + protected VALUE_TYPE value; + + public ValueMapEntry(int index, int segmentIndex) { + super(index, segmentIndex); + key = segments[segmentIndex].keys[index]; + value = segments[segmentIndex].values[index]; + } + + @Override + public KEY_TYPE ENTRY_KEY() { + return key; + } + + @Override + public VALUE_TYPE ENTRY_VALUE() { + return value; + } + + @Override + public VALUE_TYPE setValue(VALUE_TYPE value) { + this.value = value; + return super.setValue(value); + } + } + protected class MapEntry implements MAP.Entry KEY_VALUE_GENERIC_TYPE, Map.Entry { int index = -1; int segmentIndex = -1; @@ -1772,7 +1799,7 @@ public class CONCURRENT_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY long stamp = seg.writeLock(); try { - VALUE_TYPE oldValue = ENTRY_VALUE(); + VALUE_TYPE oldValue = seg.values[index]; seg.values[index] = value; return oldValue; } diff --git a/src/builder/resources/speiger/assets/collections/templates/maps/impl/customHash/LinkedOpenCustomHashMap.template b/src/builder/resources/speiger/assets/collections/templates/maps/impl/customHash/LinkedOpenCustomHashMap.template index 640d9fa..1003644 100644 --- a/src/builder/resources/speiger/assets/collections/templates/maps/impl/customHash/LinkedOpenCustomHashMap.template +++ b/src/builder/resources/speiger/assets/collections/templates/maps/impl/customHash/LinkedOpenCustomHashMap.template @@ -680,7 +680,7 @@ public class LINKED_CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends CUSTOM_HASH_M public void forEach(Consumer action) { int index = firstIndex; while(index != -1) { - action.accept(new MapEntry(index)); + action.accept(new ValueMapEntry(index)); index = (int)links[index]; } } @@ -703,7 +703,7 @@ public class LINKED_CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends CUSTOM_HASH_M int count = 0; int index = firstIndex; while(index != -1) { - action.accept(count++, new MapEntry(index)); + action.accept(count++, new ValueMapEntry(index)); index = (int)links[index]; } } @@ -714,7 +714,7 @@ public class LINKED_CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends CUSTOM_HASH_M if(size() <= 0) return; int index = firstIndex; while(index != -1) { - action.accept(input, new MapEntry(index)); + action.accept(input, new ValueMapEntry(index)); index = (int)links[index]; } } @@ -767,7 +767,7 @@ public class LINKED_CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends CUSTOM_HASH_M E state = identity; int index = firstIndex; while(index != -1) { - state = operator.apply(state, new MapEntry(index)); + state = operator.apply(state, new ValueMapEntry(index)); index = (int)links[index]; } return state; @@ -782,11 +782,11 @@ public class LINKED_CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends CUSTOM_HASH_M while(index != -1) { if(empty) { empty = false; - state = new MapEntry(index); + state = new ValueMapEntry(index); index = (int)links[index]; continue; } - state = operator.apply(state, new MapEntry(index)); + state = operator.apply(state, new ValueMapEntry(index)); index = (int)links[index]; } return state; @@ -1312,12 +1312,12 @@ public class LINKED_CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends CUSTOM_HASH_M @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE next() { - return entry = new MapEntry(nextEntry()); + return entry = new ValueMapEntry(nextEntry()); } @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE previous() { - return entry = new MapEntry(previousEntry()); + return entry = new ValueMapEntry(previousEntry()); } @Override diff --git a/src/builder/resources/speiger/assets/collections/templates/maps/impl/customHash/OpenCustomHashMap.template b/src/builder/resources/speiger/assets/collections/templates/maps/impl/customHash/OpenCustomHashMap.template index 2f5dc2d..317ef84 100644 --- a/src/builder/resources/speiger/assets/collections/templates/maps/impl/customHash/OpenCustomHashMap.template +++ b/src/builder/resources/speiger/assets/collections/templates/maps/impl/customHash/OpenCustomHashMap.template @@ -878,6 +878,33 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL } } + protected class ValueMapEntry extends MapEntry { + protected KEY_TYPE key; + protected VALUE_TYPE value; + + public ValueMapEntry(int index) { + super(index); + key = keys[index]; + value = values[index]; + } + + @Override + public KEY_TYPE ENTRY_KEY() { + return key; + } + + @Override + public VALUE_TYPE ENTRY_VALUE() { + return value; + } + + @Override + public VALUE_TYPE setValue(VALUE_TYPE value) { + this.value = value; + return super.setValue(value); + } + } + protected class MapEntry implements MAP.Entry KEY_VALUE_GENERIC_TYPE, Map.Entry { public int index = -1; @@ -912,19 +939,19 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL if(obj instanceof Map.Entry) { if(obj instanceof MAP.Entry) { MAP.Entry KEY_VALUE_GENERIC_TYPE entry = (MAP.Entry KEY_VALUE_GENERIC_TYPE)obj; - return KEY_EQUALS(keys[index], entry.ENTRY_KEY()) && VALUE_EQUALS(values[index], entry.ENTRY_VALUE()); + return KEY_EQUALS(ENTRY_KEY(), entry.ENTRY_KEY()) && VALUE_EQUALS(ENTRY_VALUE(), entry.ENTRY_VALUE()); } Map.Entry entry = (Map.Entry)obj; Object key = entry.getKey(); Object value = entry.getValue(); #if TYPE_OBJECT && VALUE_OBJECT - return KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], value); + return KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), value); #else if TYPE_OBJECT - return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #else if VALUE_OBJECT - return key instanceof CLASS_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], value); + return key instanceof CLASS_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), value); #else - return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #endif } return false; @@ -932,12 +959,12 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL @Override public int hashCode() { - return strategy.hashCode(keys[index]) ^ VALUE_TO_HASH(values[index]); + return strategy.hashCode(ENTRY_KEY()) ^ VALUE_TO_HASH(ENTRY_VALUE()); } @Override public String toString() { - return KEY_TO_STRING(keys[index]) + "=" + VALUE_TO_STRING(values[index]); + return KEY_TO_STRING(ENTRY_KEY()) + "=" + VALUE_TO_STRING(ENTRY_VALUE()); } } @@ -954,9 +981,9 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL @Override public void forEach(Consumer action) { - if(containsNull) action.accept(new MapEntry(nullIndex)); + if(containsNull) action.accept(new ValueMapEntry(nullIndex)); for(int i = nullIndex-1;i>=0;i--) - if(!strategy.equals(keys[i], EMPTY_KEY_VALUE)) action.accept(new MapEntry(i)); + if(!strategy.equals(keys[i], EMPTY_KEY_VALUE)) action.accept(new ValueMapEntry(i)); } @Override @@ -978,9 +1005,9 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL public void forEachIndexed(IntObjectConsumer action) { Objects.requireNonNull(action); if(size() <= 0) return; - if(containsNull) action.accept(0, new MapEntry(nullIndex)); + if(containsNull) action.accept(0, new ValueMapEntry(nullIndex)); for(int i = nullIndex-1, index = containsNull ? 1 : 0;i>=0;i--) { - if(!strategy.equals(keys[i], EMPTY_KEY_VALUE)) action.accept(index++, new MapEntry(i)); + if(!strategy.equals(keys[i], EMPTY_KEY_VALUE)) action.accept(index++, new ValueMapEntry(i)); } } @@ -988,9 +1015,9 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL public void forEach(E input, ObjectObjectConsumer action) { Objects.requireNonNull(action); if(size() <= 0) return; - if(containsNull) action.accept(input, new MapEntry(nullIndex)); + if(containsNull) action.accept(input, new ValueMapEntry(nullIndex)); for(int i = nullIndex-1;i>=0;i--) { - if(!strategy.equals(keys[i], EMPTY_KEY_VALUE)) action.accept(input, new MapEntry(i)); + if(!strategy.equals(keys[i], EMPTY_KEY_VALUE)) action.accept(input, new ValueMapEntry(i)); } } @@ -1052,10 +1079,10 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL public E reduce(E identity, BiFunction operator) { Objects.requireNonNull(operator); E state = identity; - if(containsNull) state = operator.apply(state, new MapEntry(nullIndex)); + if(containsNull) state = operator.apply(state, new ValueMapEntry(nullIndex)); for(int i = nullIndex-1;i>=0;i--) { if(strategy.equals(keys[i], EMPTY_KEY_VALUE)) continue; - state = operator.apply(state, new MapEntry(i)); + state = operator.apply(state, new ValueMapEntry(i)); } return state; } @@ -1066,17 +1093,17 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL MAP.Entry KEY_VALUE_GENERIC_TYPE state = null; boolean empty = true; if(containsNull) { - state = new MapEntry(nullIndex); + state = new ValueMapEntry(nullIndex); empty = false; } for(int i = nullIndex-1;i>=0;i--) { if(strategy.equals(keys[i], EMPTY_KEY_VALUE)) continue; if(empty) { empty = false; - state = new MapEntry(i); + state = new ValueMapEntry(i); continue; } - state = operator.apply(state, new MapEntry(i)); + state = operator.apply(state, new ValueMapEntry(i)); } return state; } @@ -1525,7 +1552,7 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL MapEntry entry; @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE next() { - return entry = new MapEntry(nextEntry()); + return entry = new ValueMapEntry(nextEntry()); } @Override diff --git a/src/builder/resources/speiger/assets/collections/templates/maps/impl/hash/LinkedOpenHashMap.template b/src/builder/resources/speiger/assets/collections/templates/maps/impl/hash/LinkedOpenHashMap.template index 057951f..ceded47 100644 --- a/src/builder/resources/speiger/assets/collections/templates/maps/impl/hash/LinkedOpenHashMap.template +++ b/src/builder/resources/speiger/assets/collections/templates/maps/impl/hash/LinkedOpenHashMap.template @@ -684,7 +684,7 @@ public class LINKED_HASH_MAP KEY_VALUE_GENERIC_TYPE extends HASH_MAP KEY_VALUE_G public void forEach(Consumer action) { int index = firstIndex; while(index != -1){ - action.accept(new MapEntry(index)); + action.accept(new ValueMapEntry(index)); index = (int)links[index]; } } @@ -707,7 +707,7 @@ public class LINKED_HASH_MAP KEY_VALUE_GENERIC_TYPE extends HASH_MAP KEY_VALUE_G int count = 0; int index = firstIndex; while(index != -1) { - action.accept(count++, new MapEntry(index)); + action.accept(count++, new ValueMapEntry(index)); index = (int)links[index]; } } @@ -718,7 +718,7 @@ public class LINKED_HASH_MAP KEY_VALUE_GENERIC_TYPE extends HASH_MAP KEY_VALUE_G if(size() <= 0) return; int index = firstIndex; while(index != -1) { - action.accept(input, new MapEntry(index)); + action.accept(input, new ValueMapEntry(index)); index = (int)links[index]; } } @@ -771,7 +771,7 @@ public class LINKED_HASH_MAP KEY_VALUE_GENERIC_TYPE extends HASH_MAP KEY_VALUE_G E state = identity; int index = firstIndex; while(index != -1) { - state = operator.apply(state, new MapEntry(index)); + state = operator.apply(state, new ValueMapEntry(index)); index = (int)links[index]; } return state; @@ -786,11 +786,11 @@ public class LINKED_HASH_MAP KEY_VALUE_GENERIC_TYPE extends HASH_MAP KEY_VALUE_G while(index != -1) { if(empty) { empty = false; - state = new MapEntry(index); + state = new ValueMapEntry(index); index = (int)links[index]; continue; } - state = operator.apply(state, new MapEntry(index)); + state = operator.apply(state, new ValueMapEntry(index)); index = (int)links[index]; } return state; @@ -1312,12 +1312,12 @@ public class LINKED_HASH_MAP KEY_VALUE_GENERIC_TYPE extends HASH_MAP KEY_VALUE_G @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE next() { - return entry = new MapEntry(nextEntry()); + return entry = new ValueMapEntry(nextEntry()); } @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE previous() { - return entry = new MapEntry(previousEntry()); + return entry = new ValueMapEntry(previousEntry()); } @Override diff --git a/src/builder/resources/speiger/assets/collections/templates/maps/impl/hash/OpenHashMap.template b/src/builder/resources/speiger/assets/collections/templates/maps/impl/hash/OpenHashMap.template index 20c4feb..0e2a547 100644 --- a/src/builder/resources/speiger/assets/collections/templates/maps/impl/hash/OpenHashMap.template +++ b/src/builder/resources/speiger/assets/collections/templates/maps/impl/hash/OpenHashMap.template @@ -837,6 +837,33 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE } } + protected class ValueMapEntry extends MapEntry { + protected KEY_TYPE key; + protected VALUE_TYPE value; + + public ValueMapEntry(int index) { + super(index); + key = keys[index]; + value = values[index]; + } + + @Override + public KEY_TYPE ENTRY_KEY() { + return key; + } + + @Override + public VALUE_TYPE ENTRY_VALUE() { + return value; + } + + @Override + public VALUE_TYPE setValue(VALUE_TYPE value) { + this.value = value; + return super.setValue(value); + } + } + protected class MapEntry implements MAP.Entry KEY_VALUE_GENERIC_TYPE, Map.Entry { public int index = -1; @@ -871,19 +898,19 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE if(obj instanceof Map.Entry) { if(obj instanceof MAP.Entry) { MAP.Entry KEY_VALUE_GENERIC_TYPE entry = (MAP.Entry KEY_VALUE_GENERIC_TYPE)obj; - return KEY_EQUALS(keys[index], entry.ENTRY_KEY()) && VALUE_EQUALS(values[index], entry.ENTRY_VALUE()); + return KEY_EQUALS(ENTRY_KEY(), entry.ENTRY_KEY()) && VALUE_EQUALS(ENTRY_VALUE(), entry.ENTRY_VALUE()); } Map.Entry entry = (Map.Entry)obj; Object key = entry.getKey(); Object value = entry.getValue(); #if TYPE_OBJECT && VALUE_OBJECT - return KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], value); + return KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), value); #else if TYPE_OBJECT - return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #else if VALUE_OBJECT - return key instanceof CLASS_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], value); + return key instanceof CLASS_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), value); #else - return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #endif } return false; @@ -891,12 +918,12 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE @Override public int hashCode() { - return KEY_TO_HASH(keys[index]) ^ VALUE_TO_HASH(values[index]); + return KEY_TO_HASH(ENTRY_KEY()) ^ VALUE_TO_HASH(ENTRY_VALUE()); } @Override public String toString() { - return KEY_TO_STRING(keys[index]) + "=" + VALUE_TO_STRING(values[index]); + return KEY_TO_STRING(ENTRY_KEY()) + "=" + VALUE_TO_STRING(ENTRY_VALUE()); } } @@ -913,9 +940,9 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE @Override public void forEach(Consumer action) { - if(containsNull) action.accept(new MapEntry(nullIndex)); + if(containsNull) action.accept(new ValueMapEntry(nullIndex)); for(int i = nullIndex-1;i>=0;i--) - if(KEY_EQUALS_NOT_NULL(keys[i])) action.accept(new MapEntry(i)); + if(KEY_EQUALS_NOT_NULL(keys[i])) action.accept(new ValueMapEntry(i)); } @Override @@ -937,9 +964,9 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE public void forEachIndexed(IntObjectConsumer action) { Objects.requireNonNull(action); if(size() <= 0) return; - if(containsNull) action.accept(0, new MapEntry(nullIndex)); + if(containsNull) action.accept(0, new ValueMapEntry(nullIndex)); for(int i = nullIndex-1, index = containsNull ? 1 : 0;i>=0;i--) { - if(KEY_EQUALS_NOT_NULL(keys[i])) action.accept(index++, new MapEntry(i)); + if(KEY_EQUALS_NOT_NULL(keys[i])) action.accept(index++, new ValueMapEntry(i)); } } @@ -947,9 +974,9 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE public void forEach(E input, ObjectObjectConsumer action) { Objects.requireNonNull(action); if(size() <= 0) return; - if(containsNull) action.accept(input, new MapEntry(nullIndex)); + if(containsNull) action.accept(input, new ValueMapEntry(nullIndex)); for(int i = nullIndex-1;i>=0;i--) { - if(KEY_EQUALS_NOT_NULL(keys[i])) action.accept(input, new MapEntry(i)); + if(KEY_EQUALS_NOT_NULL(keys[i])) action.accept(input, new ValueMapEntry(i)); } } @@ -1011,10 +1038,10 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE public E reduce(E identity, BiFunction operator) { Objects.requireNonNull(operator); E state = identity; - if(containsNull) state = operator.apply(state, new MapEntry(nullIndex)); + if(containsNull) state = operator.apply(state, new ValueMapEntry(nullIndex)); for(int i = nullIndex-1;i>=0;i--) { if(KEY_EQUALS_NULL(keys[i])) continue; - state = operator.apply(state, new MapEntry(i)); + state = operator.apply(state, new ValueMapEntry(i)); } return state; } @@ -1025,17 +1052,17 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE MAP.Entry KEY_VALUE_GENERIC_TYPE state = null; boolean empty = true; if(containsNull) { - state = new MapEntry(nullIndex); + state = new ValueMapEntry(nullIndex); empty = false; } for(int i = nullIndex-1;i>=0;i--) { if(KEY_EQUALS_NULL(keys[i])) continue; if(empty) { empty = false; - state = new MapEntry(i); + state = new ValueMapEntry(i); continue; } - state = operator.apply(state, new MapEntry(i)); + state = operator.apply(state, new ValueMapEntry(i)); } return state; } @@ -1480,7 +1507,7 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE MapEntry entry; @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE next() { - return entry = new MapEntry(nextEntry()); + return entry = new ValueMapEntry(nextEntry()); } @Override diff --git a/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/ArrayMap.template b/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/ArrayMap.template index ff1ee6a..9765947 100644 --- a/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/ArrayMap.template +++ b/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/ArrayMap.template @@ -876,7 +876,7 @@ public class ARRAY_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GEN public void forEach(Consumer action) { Objects.requireNonNull(action); for(int i = 0;i action) { Objects.requireNonNull(action); for(int i = 0;i void forEach(E input, ObjectObjectConsumer action) { Objects.requireNonNull(action); for(int i = 0;i { int index = -1; @@ -1519,19 +1546,19 @@ public class ARRAY_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GEN if(obj instanceof Map.Entry) { if(obj instanceof MAP.Entry) { MAP.Entry KEY_VALUE_GENERIC_TYPE entry = (MAP.Entry KEY_VALUE_GENERIC_TYPE)obj; - return KEY_EQUALS(keys[index], entry.ENTRY_KEY()) && VALUE_EQUALS(values[index], entry.ENTRY_VALUE()); + return KEY_EQUALS(keys[index], entry.ENTRY_KEY()) && VALUE_EQUALS(ENTRY_VALUE(), entry.ENTRY_VALUE()); } Map.Entry entry = (Map.Entry)obj; Object key = entry.getKey(); Object value = entry.getValue(); #if TYPE_OBJECT && VALUE_OBJECT - return KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], value); + return KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), value); #else if TYPE_OBJECT - return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #else if VALUE_OBJECT - return key instanceof CLASS_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], value); + return key instanceof CLASS_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), value); #else - return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #endif } return false; @@ -1539,12 +1566,12 @@ public class ARRAY_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GEN @Override public int hashCode() { - return KEY_TO_HASH(keys[index]) ^ VALUE_TO_HASH(values[index]); + return KEY_TO_HASH(ENTRY_KEY()) ^ VALUE_TO_HASH(ENTRY_VALUE()); } @Override public String toString() { - return KEY_TO_STRING(keys[index]) + "=" + VALUE_TO_STRING(values[index]); + return KEY_TO_STRING(ENTRY_KEY()) + "=" + VALUE_TO_STRING(ENTRY_VALUE()); } } } \ No newline at end of file diff --git a/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/EnumMap.template b/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/EnumMap.template index edb2e88..dbe2b47 100644 --- a/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/EnumMap.template +++ b/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/EnumMap.template @@ -636,7 +636,7 @@ public class ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE public void forEach(Consumer action) { if(size() <= 0) return; for(int i = 0,m=keys.length;i { @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE next() { - return new MapEntry(nextEntry()); + return new ValueMapEntry(nextEntry()); } } @@ -766,6 +766,33 @@ public class ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE } } + protected class ValueMapEntry extends MapEntry { + protected KEY_TYPE key; + protected VALUE_TYPE value; + + public ValueMapEntry(int index) { + super(index); + key = keys[index]; + value = values[index]; + } + + @Override + public KEY_TYPE ENTRY_KEY() { + return key; + } + + @Override + public VALUE_TYPE ENTRY_VALUE() { + return value; + } + + @Override + public VALUE_TYPE setValue(VALUE_TYPE value) { + this.value = value; + return super.setValue(value); + } + } + protected class MapEntry implements MAP.Entry KEY_VALUE_GENERIC_TYPE, Map.Entry { public int index = -1; @@ -800,19 +827,19 @@ public class ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE if(obj instanceof Map.Entry) { if(obj instanceof MAP.Entry) { MAP.Entry KEY_VALUE_GENERIC_TYPE entry = (MAP.Entry KEY_VALUE_GENERIC_TYPE)obj; - return KEY_EQUALS(keys[index], entry.ENTRY_KEY()) && VALUE_EQUALS(values[index], entry.ENTRY_VALUE()); + return KEY_EQUALS(ENTRY_KEY(), entry.ENTRY_KEY()) && VALUE_EQUALS(ENTRY_VALUE(), entry.ENTRY_VALUE()); } Map.Entry entry = (Map.Entry)obj; Object key = entry.getKey(); Object value = entry.getValue(); #if TYPE_OBJECT && VALUE_OBJECT - return KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], value); + return KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), value); #else if TYPE_OBJECT - return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #else if VALUE_OBJECT - return key instanceof CLASS_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], value); + return key instanceof CLASS_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), value); #else - return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #endif } return false; @@ -820,12 +847,12 @@ public class ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE @Override public int hashCode() { - return KEY_TO_HASH(keys[index]) ^ VALUE_TO_HASH(values[index]); + return KEY_TO_HASH(ENTRY_KEY()) ^ VALUE_TO_HASH(ENTRY_VALUE()); } @Override public String toString() { - return KEY_TO_STRING(keys[index]) + "=" + VALUE_TO_STRING(values[index]); + return KEY_TO_STRING(ENTRY_KEY()) + "=" + VALUE_TO_STRING(ENTRY_VALUE()); } } } diff --git a/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/LinkedEnumMap.template b/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/LinkedEnumMap.template index 8c4a76b..82ba166 100644 --- a/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/LinkedEnumMap.template +++ b/src/builder/resources/speiger/assets/collections/templates/maps/impl/misc/LinkedEnumMap.template @@ -480,7 +480,7 @@ public class LINKED_ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ENUM_MAP KEY_VA public void forEach(Consumer action) { int index = firstIndex; while(index != -1){ - action.accept(new MapEntry(index)); + action.accept(new ValueMapEntry(index)); index = (int)links[index]; } } @@ -749,12 +749,12 @@ public class LINKED_ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ENUM_MAP KEY_VA @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE next() { - return entry = new MapEntry(nextEntry()); + return entry = new ValueMapEntry(nextEntry()); } @Override public MAP.Entry KEY_VALUE_GENERIC_TYPE previous() { - return entry = new MapEntry(previousEntry()); + return entry = new ValueMapEntry(previousEntry()); } @Override @@ -903,6 +903,33 @@ public class LINKED_ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ENUM_MAP KEY_VA } } + protected class ValueMapEntry extends MapEntry { + protected KEY_TYPE key; + protected VALUE_TYPE value; + + public ValueMapEntry(int index) { + super(index); + key = keys[index]; + value = values[index]; + } + + @Override + public KEY_TYPE ENTRY_KEY() { + return key; + } + + @Override + public VALUE_TYPE ENTRY_VALUE() { + return value; + } + + @Override + public VALUE_TYPE setValue(VALUE_TYPE value) { + this.value = value; + return super.setValue(value); + } + } + protected class MapEntry implements MAP.Entry KEY_VALUE_GENERIC_TYPE, Map.Entry { public int index = -1; @@ -937,19 +964,19 @@ public class LINKED_ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ENUM_MAP KEY_VA if(obj instanceof Map.Entry) { if(obj instanceof MAP.Entry) { MAP.Entry KEY_VALUE_GENERIC_TYPE entry = (MAP.Entry KEY_VALUE_GENERIC_TYPE)obj; - return KEY_EQUALS(keys[index], entry.ENTRY_KEY()) && VALUE_EQUALS(values[index], entry.ENTRY_VALUE()); + return KEY_EQUALS(ENTRY_KEY(), entry.ENTRY_KEY()) && VALUE_EQUALS(ENTRY_VALUE(), entry.ENTRY_VALUE()); } Map.Entry entry = (Map.Entry)obj; Object key = entry.getKey(); Object value = entry.getValue(); #if TYPE_OBJECT && VALUE_OBJECT - return KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], value); + return KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), value); #else if TYPE_OBJECT - return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], key) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), key) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #else if VALUE_OBJECT - return key instanceof CLASS_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], value); + return key instanceof CLASS_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), value); #else - return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(keys[index], CLASS_TO_KEY(key)) && VALUE_EQUALS(values[index], CLASS_TO_VALUE(value)); + return key instanceof CLASS_TYPE && value instanceof CLASS_VALUE_TYPE && KEY_EQUALS(ENTRY_KEY(), CLASS_TO_KEY(key)) && VALUE_EQUALS(ENTRY_VALUE(), CLASS_TO_VALUE(value)); #endif } return false; @@ -957,12 +984,12 @@ public class LINKED_ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ENUM_MAP KEY_VA @Override public int hashCode() { - return KEY_TO_HASH(keys[index]) ^ VALUE_TO_HASH(values[index]); + return KEY_TO_HASH(ENTRY_KEY()) ^ VALUE_TO_HASH(ENTRY_VALUE()); } @Override public String toString() { - return KEY_TO_STRING(keys[index]) + "=" + VALUE_TO_STRING(values[index]); + return KEY_TO_STRING(ENTRY_KEY()) + "=" + VALUE_TO_STRING(ENTRY_VALUE()); } } } \ No newline at end of file diff --git a/src/builder/resources/speiger/assets/collections/templates/utils/maps/Maps.template b/src/builder/resources/speiger/assets/collections/templates/utils/maps/Maps.template index a640b9a..1328436 100644 --- a/src/builder/resources/speiger/assets/collections/templates/utils/maps/Maps.template +++ b/src/builder/resources/speiger/assets/collections/templates/utils/maps/Maps.template @@ -341,12 +341,20 @@ public class MAPS @Override public VALUE_TYPE COMPUTE(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTENonDefault(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTE_IF_ABSENTNonDefault(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTE_IF_PRESENTNonDefault(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE SUPPLY_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE SUPPLY_IF_ABSENTNonDefault(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE MERGE(KEY_TYPE key, VALUE_TYPE value, VALUE_UNARY_OPERATOR VALUE_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override public void BULK_MERGE(MAP KEY_VALUE_GENERIC_TYPE m, VALUE_UNARY_OPERATOR VALUE_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @@ -403,12 +411,20 @@ public class MAPS @Override public VALUE_TYPE COMPUTE(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTENonDefault(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTE_IF_ABSENTNonDefault(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTE_IF_PRESENTNonDefault(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE SUPPLY_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE SUPPLY_IF_ABSENTNonDefault(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE MERGE(KEY_TYPE key, VALUE_TYPE value, VALUE_UNARY_OPERATOR VALUE_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override public void BULK_MERGE(MAP KEY_VALUE_GENERIC_TYPE m, VALUE_UNARY_OPERATOR VALUE_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @@ -654,12 +670,20 @@ public class MAPS @Override public VALUE_TYPE COMPUTE(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTENonDefault(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTE_IF_ABSENTNonDefault(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE COMPUTE_IF_PRESENTNonDefault(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE SUPPLY_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { throw new UnsupportedOperationException(); } @Override + public VALUE_TYPE SUPPLY_IF_ABSENTNonDefault(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { throw new UnsupportedOperationException(); } + @Override public VALUE_TYPE MERGE(KEY_TYPE key, VALUE_TYPE value, VALUE_UNARY_OPERATOR VALUE_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @Override public void BULK_MERGE(MAP KEY_VALUE_GENERIC_TYPE m, VALUE_UNARY_OPERATOR VALUE_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); } @@ -1086,12 +1110,20 @@ public class MAPS @Override public VALUE_TYPE COMPUTE(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { synchronized(mutex) { return map.COMPUTE(key, mappingFunction); } } @Override + public VALUE_TYPE COMPUTENonDefault(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { synchronized(mutex) { return map.COMPUTENonDefault(key, mappingFunction); } } + @Override public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { synchronized(mutex) { return map.COMPUTE_IF_ABSENT(key, mappingFunction); } } @Override + public VALUE_TYPE COMPUTE_IF_ABSENTNonDefault(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { synchronized(mutex) { return map.COMPUTE_IF_ABSENTNonDefault(key, mappingFunction); } } + @Override public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { synchronized(mutex) { return map.COMPUTE_IF_PRESENT(key, mappingFunction); } } @Override + public VALUE_TYPE COMPUTE_IF_PRESENTNonDefault(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { synchronized(mutex) { return map.COMPUTE_IF_PRESENTNonDefault(key, mappingFunction); } } + @Override public VALUE_TYPE SUPPLY_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { synchronized(mutex) { return map.SUPPLY_IF_ABSENT(key, valueProvider); } } @Override + public VALUE_TYPE SUPPLY_IF_ABSENTNonDefault(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { synchronized(mutex) { return map.SUPPLY_IF_ABSENTNonDefault(key, valueProvider); } } + @Override public VALUE_TYPE MERGE(KEY_TYPE key, VALUE_TYPE value, VALUE_UNARY_OPERATOR VALUE_VALUE_GENERIC_TYPE mappingFunction) { synchronized(mutex) { return map.MERGE(key, value, mappingFunction); } } @Override public void BULK_MERGE(MAP KEY_VALUE_GENERIC_TYPE m, VALUE_UNARY_OPERATOR VALUE_VALUE_GENERIC_TYPE mappingFunction) { synchronized(mutex) { map.BULK_MERGE(m, mappingFunction); } } diff --git a/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeIfAbsentTester.template b/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeIfAbsentTester.template index ca67b61..4e1c9f2 100644 --- a/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeIfAbsentTester.template +++ b/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeIfAbsentTester.template @@ -26,14 +26,13 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfAbsentTester KEY_VALUE_GEN @MapFeature.Require(SUPPORTS_PUT) #endignore public void testComputeIfAbsent_supportedAbsent() { - assertEquals("COMPUTE_IF_ABSENT(notPresent, function) should return new value", v3(), - getMap().COMPUTE_IF_ABSENT(k3(), k -> { - assertEquals(k3(), k); - return v3(); - })); + assertEquals("COMPUTE_IF_ABSENT(notPresent, function) should return new value", v3(), getMap().COMPUTE_IF_ABSENTNonDefault(k3(), k -> { + assertEquals(k3(), k); + return v3(); + })); expectAdded(e3()); } - + #if !VALUE_BOOLEAN #ignore @MapFeature.Require(SUPPORTS_PUT) @@ -41,22 +40,20 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfAbsentTester KEY_VALUE_GEN #endignore public void testComputeIfAbsent_supportedAbsentFirst() { getMap().setDefaultReturnValue(v0()); - assertEquals("COMPUTE_IF_ABSENT(notPresent, function) should return new value", v3(), - getMap().COMPUTE_IF_ABSENT(k0(), k -> { - assertEquals(k0(), k); - return v3(); - })); + assertEquals("COMPUTE_IF_ABSENT(notPresent, function) should return new value", v3(), getMap().COMPUTE_IF_ABSENTNonDefault(k0(), k -> { + assertEquals(k0(), k); + return v3(); + })); expectContents(entry(k0(), v3())); } - + #ignore @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ONE) #endignore public void testComputeIfAbsent_supportedAbsentSameResult() { getMap().setDefaultReturnValue(v0()); - assertEquals("COMPUTE_IF_ABSENT(notPresent, function) should return new value", v0(), - getMap().COMPUTE_IF_ABSENT(k0(), k -> { + assertEquals("COMPUTE_IF_ABSENT(notPresent, function) should return new value", v0(), getMap().COMPUTE_IF_ABSENTNonDefault(k0(), k -> { assertEquals(k0(), k); return v0(); })); @@ -69,35 +66,33 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfAbsentTester KEY_VALUE_GEN @CollectionSize.Require(absent = ZERO) #endignore public void testComputeIfAbsent_supportedPresent() { - assertEquals("COMPUTE_IF_ABSENT(present, function) should return existing value", v0(), - getMap().COMPUTE_IF_ABSENT(k0(), k -> { - throw new AssertionFailedError(); - })); + assertEquals("COMPUTE_IF_ABSENT(present, function) should return existing value", v0(), getMap().COMPUTE_IF_ABSENTNonDefault(k0(), k -> { + throw new AssertionFailedError(); + })); expectUnchanged(); } - + #ignore @MapFeature.Require(SUPPORTS_PUT) #endignore public void testComputeIfAbsent_functionReturnsNullNotInserted() { - assertEquals("COMPUTE_IF_ABSENT(absent, returnsNull) should return INVALID_VALUE", - INVALID_VALUE, getMap().COMPUTE_IF_ABSENT(k3(), k -> { - assertEquals(k3(), k); - return INVALID_VALUE; - })); + assertEquals("COMPUTE_IF_ABSENT(absent, returnsNull) should return INVALID_VALUE", INVALID_VALUE, getMap().COMPUTE_IF_ABSENTNonDefault(k3(), k -> { + assertEquals(k3(), k); + return INVALID_VALUE; + })); expectUnchanged(); } - + static class ExpectedException extends RuntimeException { private static final long serialVersionUID = 1L; } - + #ignore @MapFeature.Require(SUPPORTS_PUT) #endignore public void testComputeIfAbsent_functionThrows() { try { - getMap().COMPUTE_IF_ABSENT(k3(), k -> { + getMap().COMPUTE_IF_ABSENTNonDefault(k3(), k -> { assertEquals(k3(), k); throw new ExpectedException(); }); @@ -112,7 +107,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfAbsentTester KEY_VALUE_GEN #endignore public void testComputeIfAbsent_unsupportedAbsent() { try { - getMap().COMPUTE_IF_ABSENT(k3(), k -> { + getMap().COMPUTE_IF_ABSENTNonDefault(k3(), k -> { // allowed to be called assertEquals(k3(), k); return v3(); @@ -129,11 +124,10 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfAbsentTester KEY_VALUE_GEN #endignore public void testComputeIfAbsent_unsupportedPresentExistingValue() { try { - assertEquals("COMPUTE_IF_ABSENT(present, returnsCurrentValue) should return present or throw", v0(), - getMap().COMPUTE_IF_ABSENT(k0(), k -> { - assertEquals(k0(), k); - return v0(); - })); + assertEquals("COMPUTE_IF_ABSENT(present, returnsCurrentValue) should return present or throw", v0(), getMap().COMPUTE_IF_ABSENTNonDefault(k0(), k -> { + assertEquals(k0(), k); + return v0(); + })); } catch (UnsupportedOperationException tolerated) { } expectUnchanged(); @@ -145,11 +139,10 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfAbsentTester KEY_VALUE_GEN #endignore public void testComputeIfAbsent_unsupportedPresentDifferentValue() { try { - assertEquals("COMPUTE_IF_ABSENT(present, returnsDifferentValue) should return present or throw", v0(), - getMap().COMPUTE_IF_ABSENT(k0(), k -> { - assertEquals(k0(), k); - return v3(); - })); + assertEquals("COMPUTE_IF_ABSENT(present, returnsDifferentValue) should return present or throw", v0(), getMap().COMPUTE_IF_ABSENTNonDefault(k0(), k -> { + assertEquals(k0(), k); + return v3(); + })); } catch (UnsupportedOperationException tolerated) { } expectUnchanged(); diff --git a/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeIfPresentTester.template b/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeIfPresentTester.template index 58b0ad1..a37b521 100644 --- a/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeIfPresentTester.template +++ b/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeIfPresentTester.template @@ -21,52 +21,49 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfPresentTester KEY_VALUE_GE @MapFeature.Require(SUPPORTS_PUT) #endignore public void testComputeIfPresent_supportedAbsent() { - assertEquals("COMPUTE_IF_PRESENT(notPresent, function) should return INVALID_VALUE", INVALID_VALUE, - getMap().COMPUTE_IF_PRESENT(k3(), (k, v) -> { - throw new AssertionFailedError(); - })); + assertEquals("COMPUTE_IF_PRESENT(notPresent, function) should return INVALID_VALUE", INVALID_VALUE, getMap().COMPUTE_IF_PRESENTNonDefault(k3(), (k, v) -> { + throw new AssertionFailedError(); + })); expectUnchanged(); } - + #ignore @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(absent = ZERO) #endignore public void testComputeIfPresent_supportedPresent() { - assertEquals("COMPUTE_IF_PRESENT(present, function) should return new value", v3(), - getMap().COMPUTE_IF_PRESENT(k0(), (k, v) -> { - assertEquals(k0(), k); - assertEquals(v0(), v); - return v3(); - })); + assertEquals("COMPUTE_IF_PRESENT(present, function) should return new value", v3(), getMap().COMPUTE_IF_PRESENTNonDefault(k0(), (k, v) -> { + assertEquals(k0(), k); + assertEquals(v0(), v); + return v3(); + })); expectReplacement(entry(k0(), v3())); } - + #ignore @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(absent = ZERO) #endignore public void testComputeIfPresent_functionReturnsNull() { - assertEquals("COMPUTE_IF_PRESENT(present, returnsNull) should return INVALID_VALUE", INVALID_VALUE, - getMap().COMPUTE_IF_PRESENT(k0(), (k, v) -> { - assertEquals(k0(), k); - assertEquals(v0(), v); - return INVALID_VALUE; - })); + assertEquals("COMPUTE_IF_PRESENT(present, returnsNull) should return INVALID_VALUE", INVALID_VALUE, getMap().COMPUTE_IF_PRESENTNonDefault(k0(), (k, v) -> { + assertEquals(k0(), k); + assertEquals(v0(), v); + return INVALID_VALUE; + })); expectMissing(e0()); } - + static class ExpectedException extends RuntimeException { private static final long serialVersionUID = 1L; } - + #ignore @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(absent = ZERO) #endignore public void testComputeIfPresent_functionThrows() { try { - getMap().COMPUTE_IF_PRESENT(k0(), (k, v) -> { + getMap().COMPUTE_IF_PRESENTNonDefault(k0(), (k, v) -> { assertEquals(k0(), k); assertEquals(v0(), v); throw new ExpectedException(); @@ -82,7 +79,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfPresentTester KEY_VALUE_GE #endignore public void testComputeIfPresent_unsupportedAbsent() { try { - getMap().COMPUTE_IF_PRESENT(k3(), (k, v) -> { + getMap().COMPUTE_IF_PRESENTNonDefault(k3(), (k, v) -> { throw new AssertionFailedError(); }); } catch (UnsupportedOperationException tolerated) { @@ -96,7 +93,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeIfPresentTester KEY_VALUE_GE #endignore public void testComputeIfPresent_unsupportedPresent() { try { - getMap().COMPUTE_IF_PRESENT(k0(), (k, v) -> v3()); + getMap().COMPUTE_IF_PRESENTNonDefault(k0(), (k, v) -> v3()); fail("Expected UnsupportedOperationException"); } catch (UnsupportedOperationException expected) { } diff --git a/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeTester.template b/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeTester.template index 70afb64..c22883e 100644 --- a/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeTester.template +++ b/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapComputeTester.template @@ -21,12 +21,11 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeTester KEY_VALUE_GENERIC_TYP @MapFeature.Require({ SUPPORTS_PUT, SUPPORTS_REMOVE }) #endignore public void testCompute_absentToPresent() { - assertEquals("Map.COMPUTE(absent, functionReturningValue) should return value", v3(), - getMap().COMPUTE(k3(), (k, v) -> { - assertEquals(k3(), k); - assertEquals(INVALID_VALUE, v); - return v3(); - })); + assertEquals("Map.COMPUTE(absent, functionReturningValue) should return value", v3(), getMap().COMPUTENonDefault(k3(), (k, v) -> { + assertEquals(k3(), k); + assertEquals(INVALID_VALUE, v); + return v3(); + })); expectAdded(e3()); assertEquals(getNumElements() + 1, getMap().size()); } @@ -35,7 +34,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeTester KEY_VALUE_GENERIC_TYP @MapFeature.Require({ SUPPORTS_PUT, SUPPORTS_REMOVE }) #endignore public void testCompute_absentToAbsent() { - assertEquals("Map.COMPUTE(absent, functionReturningNull) should return INVALID_VALUE", INVALID_VALUE, getMap().COMPUTE(k3(), (k, v) -> { + assertEquals("Map.COMPUTE(absent, functionReturningNull) should return INVALID_VALUE", INVALID_VALUE, getMap().COMPUTENonDefault(k3(), (k, v) -> { assertEquals(k3(), k); assertEquals(INVALID_VALUE, v); return INVALID_VALUE; @@ -49,12 +48,11 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeTester KEY_VALUE_GENERIC_TYP @CollectionSize.Require(absent = ZERO) #endignore public void testCompute_presentToPresent() { - assertEquals("Map.COMPUTE(present, functionReturningValue) should return new value", v3(), - getMap().COMPUTE(k0(), (k, v) -> { - assertEquals(k0(), k); - assertEquals(v0(), v); - return v3(); - })); + assertEquals("Map.COMPUTE(present, functionReturningValue) should return new value", v3(), getMap().COMPUTENonDefault(k0(), (k, v) -> { + assertEquals(k0(), k); + assertEquals(v0(), v); + return v3(); + })); expectReplacement(entry(k0(), v3())); assertEquals(getNumElements(), getMap().size()); } @@ -64,7 +62,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeTester KEY_VALUE_GENERIC_TYP @CollectionSize.Require(absent = ZERO) #endignore public void testCompute_presentToAbsent() { - assertEquals("Map.COMPUTE(present, functionReturningNull) should return INVALID_VALUE", INVALID_VALUE, getMap().COMPUTE(k0(), (k, v) -> { + assertEquals("Map.COMPUTE(present, functionReturningNull) should return INVALID_VALUE", INVALID_VALUE, getMap().COMPUTENonDefault(k0(), (k, v) -> { assertEquals(k0(), k); assertEquals(v0(), v); return INVALID_VALUE; @@ -84,7 +82,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeTester KEY_VALUE_GENERIC_TYP #endignore public void testCompute_presentFunctionThrows() { try { - getMap().COMPUTE(k0(), (k, v) -> { + getMap().COMPUTENonDefault(k0(), (k, v) -> { assertEquals(k0(), k); assertEquals(v0(), v); throw new ExpectedException(); @@ -100,7 +98,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeTester KEY_VALUE_GENERIC_TYP #endignore public void testCompute_absentFunctionThrows() { try { - getMap().COMPUTE(k3(), (k, v) -> { + getMap().COMPUTENonDefault(k3(), (k, v) -> { assertEquals(k3(), k); assertEquals(INVALID_VALUE, v); throw new ExpectedException(); @@ -116,7 +114,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeTester KEY_VALUE_GENERIC_TYP #endignore public void testCompute_removeAbsent() { try { - getMap().COMPUTE(k3(), (k, v) -> { + getMap().COMPUTENonDefault(k3(), (k, v) -> { assertEquals(k3(), k); assertEquals(INVALID_VALUE, v); return INVALID_VALUE; @@ -132,7 +130,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapComputeTester KEY_VALUE_GENERIC_TYP #endignore public void testCompute_putAbsent() { try { - getMap().COMPUTE(k3(), (k, v) -> { + getMap().COMPUTENonDefault(k3(), (k, v) -> { assertEquals(k3(), k); assertEquals(INVALID_VALUE, v); return INVALID_VALUE; diff --git a/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapSupplyIfAbsentTester.template b/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapSupplyIfAbsentTester.template index 4bd9bbe..254960a 100644 --- a/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapSupplyIfAbsentTester.template +++ b/src/builder/resources/speiger/assets/testers/templates/tests/maps/MapSupplyIfAbsentTester.template @@ -26,8 +26,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE @MapFeature.Require(SUPPORTS_PUT) #endignore public void testSupplyIfAbsent_supportedAbsent() { - assertEquals("SUPPLY_IF_ABSENT(notPresent, function) should return new value", v3(), - getMap().SUPPLY_IF_ABSENT(k3(), this::v3)); + assertEquals("SUPPLY_IF_ABSENT(notPresent, function) should return new value", v3(), getMap().SUPPLY_IF_ABSENTNonDefault(k3(), this::v3)); expectAdded(e3()); } @@ -38,8 +37,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE #endignore public void testSupplyIfAbsent_supportedAbsentFirst() { getMap().setDefaultReturnValue(v0()); - assertEquals("SUPPLY_IF_ABSENT(notPresent, function) should return new value", v3(), - getMap().SUPPLY_IF_ABSENT(k0(), this::v3)); + assertEquals("SUPPLY_IF_ABSENT(notPresent, function) should return new value", v3(), getMap().SUPPLY_IF_ABSENTNonDefault(k0(), this::v3)); expectContents(entry(k0(), v3())); } @@ -49,8 +47,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE #endignore public void testSupplyIfAbsent_supportedAbsentSameResult() { getMap().setDefaultReturnValue(v0()); - assertEquals("SUPPLY_IF_ABSENT(notPresent, function) should return new value", v0(), - getMap().SUPPLY_IF_ABSENT(k0(), this::v0)); + assertEquals("SUPPLY_IF_ABSENT(notPresent, function) should return new value", v0(), getMap().SUPPLY_IF_ABSENTNonDefault(k0(), this::v0)); expectUnchanged(); } @@ -60,10 +57,9 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE @CollectionSize.Require(absent = ZERO) #endignore public void testSupplyIfAbsent_supportedPresent() { - assertEquals("SUPPLY_IF_ABSENT(present, function) should return existing value", v0(), - getMap().SUPPLY_IF_ABSENT(k0(), () -> { - throw new AssertionFailedError(); - })); + assertEquals("SUPPLY_IF_ABSENT(present, function) should return existing value", v0(), getMap().SUPPLY_IF_ABSENTNonDefault(k0(), () -> { + throw new AssertionFailedError(); + })); expectUnchanged(); } @@ -71,7 +67,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE @MapFeature.Require(SUPPORTS_PUT) #endignore public void testSupplyIfAbsent_functionReturnsNullNotInserted() { - assertEquals("SUPPLY_IF_ABSENT(absent, returnsNull) should return INVALID_VALUE", INVALID_VALUE, getMap().SUPPLY_IF_ABSENT(k3(), () -> INVALID_VALUE)); + assertEquals("SUPPLY_IF_ABSENT(absent, returnsNull) should return INVALID_VALUE", INVALID_VALUE, getMap().SUPPLY_IF_ABSENTNonDefault(k3(), () -> INVALID_VALUE)); expectUnchanged(); } @@ -84,7 +80,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE #endignore public void testSupplyIfAbsent_functionThrows() { try { - getMap().SUPPLY_IF_ABSENT(k3(), () -> { + getMap().SUPPLY_IF_ABSENTNonDefault(k3(), () -> { throw new ExpectedException(); }); fail("Expected ExpectedException"); @@ -98,7 +94,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE #endignore public void testSupplyIfAbsent_unsupportedAbsent() { try { - getMap().SUPPLY_IF_ABSENT(k3(), this::v3); + getMap().SUPPLY_IF_ABSENTNonDefault(k3(), this::v3); fail("SUPPLY_IF_ABSENT(notPresent, function) should throw"); } catch (UnsupportedOperationException expected) { } @@ -111,7 +107,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE #endignore public void testSupplyIfAbsent_unsupportedPresentExistingValue() { try { - assertEquals("SUPPLY_IF_ABSENT(present, returnsCurrentValue) should return present or throw", v0(), getMap().SUPPLY_IF_ABSENT(k0(), this::v0)); + assertEquals("SUPPLY_IF_ABSENT(present, returnsCurrentValue) should return present or throw", v0(), getMap().SUPPLY_IF_ABSENTNonDefault(k0(), this::v0)); } catch (UnsupportedOperationException tolerated) { } expectUnchanged(); @@ -123,7 +119,7 @@ public class FILE_KEY_TYPE2FILE_VALUE_TYPEMapSupplyIfAbsentTester KEY_VALUE_GENE #endignore public void testSupplyIfAbsent_unsupportedPresentDifferentValue() { try { - assertEquals("SUPPLY_IF_ABSENT(present, returnsDifferentValue) should return present or throw", v0(), getMap().SUPPLY_IF_ABSENT(k0(), this::v3)); + assertEquals("SUPPLY_IF_ABSENT(present, returnsDifferentValue) should return present or throw", v0(), getMap().SUPPLY_IF_ABSENTNonDefault(k0(), this::v3)); } catch (UnsupportedOperationException tolerated) { } expectUnchanged();